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 - отвыкай. Это хуже, чем маленькие колесики сбоку у детского велосипеда. Когда действительно НУЖНО - тогда пользуй. А без дела менять цвет и чистить экран - это вызывает длинную тираду нехороших слов у тех, кто твою программу запускает.. ))
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
Спасибо за помощь! Не все мне в этой программе понятно, но постараюсь разобраться, если что не пойму, надеюсь разъясните)). Прошу строго меня не судить, если вопросы в вашем понимании покажутся глупыми. От получения задания до сессии, мне отведен месяц с небольшим и в голове каша из дискретной математики, алгебры логики, программирования и т.д., если что то не получается откладываю, занимаюсь другим, затем возращаюсь. По поводу CRT , в задание есть условие об использовании очистки экрана и т.д., просто в каком виде ее написал в том и выложил, но на будующее учту.
в задание есть условие об использовании очистки экрана и т.д., просто в каком виде ее написал в том и выложил, но на будующее учту.
Ну, что сказать.. Мне жаль, что у тебя такие учителя. Очистку экрана нужно использовать только в тех задачах, где она необходима (например, там есть меню, управление курсором..) В консольных задачах свой стиль. Ты можешь себе представить, что ты печатаешь команду dir или cd - а она тебе бах и очистила все результаты твоей предыдущей работы? ))
Давай, разбирайся. Там все тривиально просто, только нужно мозги переключить с одного образа мышления на другой. Надо будет - объясню подробно, нет проблем )).
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
CRT усложняет жизнь пользователю. Видеть не могу, когда начинающие программисты 1) раскрашивают свои программы, как елки, всеми цветами радуги 2) убирают с экрана то, что было на нем ДО запуска их супер-пупер-нужной (как им кажется) программы. МНЕ, пользователю, решать, какая программа нужная, а какая - нет. Та, которая считает себя важнее других (и убирает с экрана то, что было до ее запуска) сразу летит в мусорку. Умные дяденьки написали достаточно модулей, чтобы при старте программы сохранить содержимое экрана, а при финише - восстановить его, если уж на то пошло. А еще лучше - не трогать чужое. Вывел свои результаты и угомонись. Не надо убирать ЧУЖИЕ.
Нужно пользовотся со всеми модулями что облегчает жизнь которые когда то написали умненькие дяденьки
Я не стану говорить, что не нужно пользоваться спичками или ножами. Но детям давать их все равно не буду. Потому что пользоваться нужно умеючи.
Если тебе НУЖНА эта функциональность - пожалуйста, используй. Если же ты просто прибалдел от розового цвета и все теперь раскрашиваешь - то ПТНФ (пошел ты на фиг). А когда ты делаешь ClrScr - ты стираешь ВСЕ (не только свое). А ты сотри все с диска, прежде чем записать туда свой файл - флаг тебе в руки. Во, крастота-то будет! Все чистенько, все в порядочке!
Кроме того, CRT нарушает стандартную модель доступа к файлам (что не написано в ее описании) и приводит к многим осложнениям при работе с диском.