С заданием в принципе справился, но терзают меня смутные сомненья, что ее можно сделать и покороче заменив два цикла подсчета сумм паралельнных Главной(Побочной), на один , например через 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 18:28
Цитата(Евгений @ 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 - отвыкай. Это хуже, чем маленькие колесики сбоку у детского велосипеда. Когда действительно НУЖНО - тогда пользуй. А без дела менять цвет и чистить экран - это вызывает длинную тираду нехороших слов у тех, кто твою программу запускает.. ))
Евгений
5.12.2010 3:19
Спасибо за помощь! Не все мне в этой программе понятно, но постараюсь разобраться, если что не пойму, надеюсь разъясните)). Прошу строго меня не судить, если вопросы в вашем понимании покажутся глупыми. От получения задания до сессии, мне отведен месяц с небольшим и в голове каша из дискретной математики, алгебры логики, программирования и т.д., если что то не получается откладываю, занимаюсь другим, затем возращаюсь. По поводу CRT , в задание есть условие об использовании очистки экрана и т.д., просто в каком виде ее написал в том и выложил, но на будующее учту.
Lapp
5.12.2010 3:46
Цитата(Евгений @ 4.12.2010 23:19)
в задание есть условие об использовании очистки экрана и т.д., просто в каком виде ее написал в том и выложил, но на будующее учту.
Ну, что сказать.. Мне жаль, что у тебя такие учителя. Очистку экрана нужно использовать только в тех задачах, где она необходима (например, там есть меню, управление курсором..) В консольных задачах свой стиль. Ты можешь себе представить, что ты печатаешь команду dir или cd - а она тебе бах и очистила все результаты твоей предыдущей работы? ))
Давай, разбирайся. Там все тривиально просто, только нужно мозги переключить с одного образа мышления на другой. Надо будет - объясню подробно, нет проблем )).
Credo
5.12.2010 19:24
Цитата
А от CRT - отвыкай
Нужно пользовотся со всеми модулями что облегчает жизнь которые когда то написали умненькие дяденьки
volvo
5.12.2010 19:33
CRT усложняет жизнь пользователю. Видеть не могу, когда начинающие программисты 1) раскрашивают свои программы, как елки, всеми цветами радуги 2) убирают с экрана то, что было на нем ДО запуска их супер-пупер-нужной (как им кажется) программы. МНЕ, пользователю, решать, какая программа нужная, а какая - нет. Та, которая считает себя важнее других (и убирает с экрана то, что было до ее запуска) сразу летит в мусорку. Умные дяденьки написали достаточно модулей, чтобы при старте программы сохранить содержимое экрана, а при финише - восстановить его, если уж на то пошло. А еще лучше - не трогать чужое. Вывел свои результаты и угомонись. Не надо убирать ЧУЖИЕ.
Lapp
6.12.2010 5:32
volvo, извини, в чем-то я повторю твои слова..
Цитата(Credo @ 5.12.2010 15:24)
Нужно пользовотся со всеми модулями что облегчает жизнь которые когда то написали умненькие дяденьки
Я не стану говорить, что не нужно пользоваться спичками или ножами. Но детям давать их все равно не буду. Потому что пользоваться нужно умеючи.
Если тебе НУЖНА эта функциональность - пожалуйста, используй. Если же ты просто прибалдел от розового цвета и все теперь раскрашиваешь - то ПТНФ (пошел ты на фиг). А когда ты делаешь ClrScr - ты стираешь ВСЕ (не только свое). А ты сотри все с диска, прежде чем записать туда свой файл - флаг тебе в руки. Во, крастота-то будет! Все чистенько, все в порядочке!
Кроме того, CRT нарушает стандартную модель доступа к файлам (что не написано в ее описании) и приводит к многим осложнениям при работе с диском.