Помощь - Поиск - Пользователи - Календарь
Полная версия: Матрица. Суммы диоганалей паралельных главной и побочной
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Евгений
С заданием в принципе справился, но терзают меня смутные сомненья, что ее можно сделать и покороче заменив два цикла подсчета сумм паралельнных Главной(Побочной), на один , например через 2*М-1, но не как не могу справиться с агоритмом изменения индексов матрицы. Может есть у кого какие мысли на этот счет?

Program Massiv;
uses crt;
const M=3;
var
a: Array [1..M,1..M] of Integer;
sum: Integer;
j,I: Byte;
begin
textbackground(white);
clrscr;
textcolor(black);
Writeln('Введите ');
For I := 1 to M do
For j := 1 to M do
begin
Write(i,'-',j,' ');
Readln(a[i,j]);
end;
for i:= 1 to M do
begin
sum:=0;
for j:= 1 to i do
sum:= sum + a[j,M-i+j];
writeln(sum);
end;
for i:= 1 to M-1 do
begin
sum:=0;
for j:= 1 to M-i do
sum:= sum + a[i+j,j];
writeln(sum);
end;
for i:= 1 to M do
begin
sum:=0;
for j:= 1 to i do
sum:= sum + a[I+1-j,j];
writeln(sum);
end;
for i:= 1 to M-1 do
begin
sum:=0;
for j:= 1 to M-i do
sum:= sum + a[j+i,M+1-j];
writeln(sum);
end;
readln;
end.

Lapp
Цитата(Евгений @ 4.12.2010 4:08) *
С заданием в принципе справился, но терзают меня смутные сомненья, что ее можно сделать и покороче заменив два цикла подсчета сумм паралельнных Главной(Побочной), на один , например через 2*М-1, но не как не могу справиться с агоритмом изменения индексов матрицы. Может есть у кого какие мысли на этот счет?
Конечно, можно покороче )). И в первую очередь - за счет выбрасывания на фиг НЕНУЖНОЙ И ВРЕДНОЙ CRT со всеми ее процедурами и функциями (а САМАЯ вредная - ClrScr, брр..)

Про замену циклов говорить не буду. Мысли на этот счет - все поменять в корне и сделать НАМНОГО ПРОЩЕ. Весь подсчет умещается в три строки. Я вижу, что ты работаешь, поэтому даю тебе полное готовое решение. Разбирайся с ним и задавай вопросы, что неясно - ладно?
const
m=3;
n=2*m-1;
var
a: array [1..m,1..m] of integer;
b,c: array [1..n] of integer;
s1,s2,i,j: integer;

begin
// filling up the matrix
for i:=1 to m do for j:=1 to m do a[i,j]:=Random(10);
// show the matrix
for i:=1 to m do begin
for j:=1 to m do Write(a[i,j]:4);
WriteLn
end;
WriteLn;
// counting the sums
for i:=1 to m do for j:=1 to m do begin
Inc(b[j-i+m],a[i,j]);
Inc(c[i+j-1],a[i,j])
end;
// output the result
WriteLn('Main Diagonals Sums:');
for i:=1 to n do Write(b[i]:4);
WriteLn;
WriteLn('Side diagonals Sums:');
for i:=1 to n do Write(c[i]:4);
ReadLn
end.

Надеюсь, ты скачал и установил FreePascal. Если нет - давай, скачивай, или убери/переделай комментарии.
Успехов тебе.

P.S.
А от CRT - отвыкай. Это хуже, чем маленькие колесики сбоку у детского велосипеда. Когда действительно НУЖНО - тогда пользуй. А без дела менять цвет и чистить экран - это вызывает длинную тираду нехороших слов у тех, кто твою программу запускает.. ))
Евгений
Спасибо за помощь! Не все мне в этой программе понятно, но постараюсь разобраться, если что не пойму, надеюсь разъясните)).
Прошу строго меня не судить, если вопросы в вашем понимании покажутся глупыми. От получения задания до сессии, мне отведен месяц с небольшим и в голове каша из дискретной математики, алгебры логики, программирования и т.д., если что то не получается откладываю, занимаюсь другим, затем возращаюсь.
По поводу CRT , в задание есть условие об использовании очистки экрана и т.д., просто в каком виде ее написал в том и выложил, но на будующее учту.
Lapp
Цитата(Евгений @ 4.12.2010 23:19) *
в задание есть условие об использовании очистки экрана и т.д., просто в каком виде ее написал в том и выложил, но на будующее учту.
Ну, что сказать.. Мне жаль, что у тебя такие учителя. Очистку экрана нужно использовать только в тех задачах, где она необходима (например, там есть меню, управление курсором..) В консольных задачах свой стиль. Ты можешь себе представить, что ты печатаешь команду dir или cd - а она тебе бах и очистила все результаты твоей предыдущей работы? ))

Давай, разбирайся. Там все тривиально просто, только нужно мозги переключить с одного образа мышления на другой. Надо будет - объясню подробно, нет проблем )).
Credo
Цитата
А от CRT - отвыкай

Нужно пользовотся со всеми модулями что облегчает жизнь которые когда то написали умненькие дяденьки smile.gif
volvo
CRT усложняет жизнь пользователю. Видеть не могу, когда начинающие программисты
1) раскрашивают свои программы, как елки, всеми цветами радуги
2) убирают с экрана то, что было на нем ДО запуска их супер-пупер-нужной (как им кажется) программы. МНЕ, пользователю, решать, какая программа нужная, а какая - нет. Та, которая считает себя важнее других (и убирает с экрана то, что было до ее запуска) сразу летит в мусорку. Умные дяденьки написали достаточно модулей, чтобы при старте программы сохранить содержимое экрана, а при финише - восстановить его, если уж на то пошло. А еще лучше - не трогать чужое. Вывел свои результаты и угомонись. Не надо убирать ЧУЖИЕ.
Lapp
volvo, извини, в чем-то я повторю твои слова..

Цитата(Credo @ 5.12.2010 15:24) *
Нужно пользовотся со всеми модулями что облегчает жизнь которые когда то написали умненькие дяденьки smile.gif

Я не стану говорить, что не нужно пользоваться спичками или ножами. Но детям давать их все равно не буду. Потому что пользоваться нужно умеючи.

Если тебе НУЖНА эта функциональность - пожалуйста, используй. Если же ты просто прибалдел от розового цвета и все теперь раскрашиваешь - то ПТНФ (пошел ты на фиг). А когда ты делаешь ClrScr - ты стираешь ВСЕ (не только свое). А ты сотри все с диска, прежде чем записать туда свой файл - флаг тебе в руки. Во, крастота-то будет! Все чистенько, все в порядочке!

Кроме того, CRT нарушает стандартную модель доступа к файлам (что не написано в ее описании) и приводит к многим осложнениям при работе с диском.

Умные дяденьки придумали ядерную бомбу. Иди, используй..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.