1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Матрица. Суммы диоганалей паралельных главной и побочной, Как сократить программу?
С заданием в принципе справился, но терзают меня смутные сомненья, что ее можно сделать и покороче заменив два цикла подсчета сумм паралельнных Главной(Побочной), на один , например через 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.
С заданием в принципе справился, но терзают меня смутные сомненья, что ее можно сделать и покороче заменив два цикла подсчета сумм паралельнных Главной(Побочной), на один , например через 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 - отвыкай. Это хуже, чем маленькие колесики сбоку у детского велосипеда. Когда действительно НУЖНО - тогда пользуй. А без дела менять цвет и чистить экран - это вызывает длинную тираду нехороших слов у тех, кто твою программу запускает.. ))
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой