1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
program qwesadf; uses crt; var p:array[1..7,1..7] of real;i,j:integer;s1,s2:real; begin clrscr; s1:=0; s2:=0; writeln('vvedite elementi matrici'); for i:=1 to 7 do for j:=1 to 7 do begin readln(p[i,j]); s1:=p[1,1]+p[2,2]+p[3,3]+p[4,4]+p[5,5]+p[6,6]+p[7,7]; s2:=p[1,7]+p[2,6]+p[3,5]+p[4,4]+p[5,3]+p[6,2]+p[7,1]; end; writeln('summa elementov glavnoi diagonali ',s1:2:2); writeln('summa elementov diagonali simetrichnoi glavnoi ',s2:2:2); end.
Кстати да, FAQ отличная вещь, тока что читал, вот получилось такое решение, но оно выводит неправельный результат. Например в матрице 2х2 с элементами 1,1,1,1 основная диагональ должна быть равна 2, и побочная тоже 2. А это решение утверждает что и то и то равно 3. Помогите исправить ошибки плиз?.
program qwesadf; uses crt; var p:array[1..10,1..10] of real;i,n,j:integer;s1,s2:real; begin clrscr; writeln('vvedite razmer matrici'); readln(n); writeln('vvedite elementi matrici'); s1:=0; s2:=0; for i:=1 to n do for j:=1 to n do begin readln(p[i,j]); s1:=s1+p[i,i]; s2:=s2+p[i,n+1-i]; end; writeln('summa elementov glavnoi diagonali ',s1:2:2); writeln('summa elementov diagonali simetrichnoi glavnoi ',s2:2:2); end.
Круто, поотлаживал всё и заметил что после строчек с for он пропрыгивает begin, пробовал ставить 2 бегина и энда всё равно также, также пропобал после первой фор ставить бегин и после второй, но всё равно внаглую просткакивает их. И разультат попрежнему неверен. Незнаю чё делать. =(
for i:=1 to n do for j:=1 to n do begin readln(p[i,j]); s1:=s1+p[i,i]; // пока у тебя j изменится от 1 до 3-х сколько раз ты прибавишь один и тот же элемент диагонали? 3 (: s2:=s2+p[i,n+1-i]; end;
Вот в этом и ошибка.. Сумму лучше считать отдельно..
Скажите как называется способ введения элементов матрицы в этом решении?
program werqwrsdfgse; uses crt; const n=2; var p:array [1..n,1..n] of real;i,j:integer;s1,s2:real; begin clrscr; s1 := 0; s2 := 0; writeln('vvedite elementi matrici'); for i:=1 to n do begin for j:=1 to n do readln(p[i,j]); s1:=s1+p[i,i]; s2:=s2+p[i,n+1-i]; end; Writeln('summa elementov glavnoi diagonali ',s1:2:2); Writeln('summa elementov diagonali simetrichnoi glavnoi ',s2:2:2); end.
Как я понял это постолбцам. Учитель сказала исправить задачу так чтоб ввод был построчным, я и исправил
readln(p[j,i]);
, но задача стала выводить неправильный ответ, она говорит мол нужно ещё begin end кудато впихнуть. Я так и непонял чё она от меня ваще хатела и чё это за способы ввода матрицы, и как надо их вводить, в строчку все элементы через пробел или через запятую? или как?
Как я понял это постолбцам. Учитель сказала исправить задачу так чтоб ввод был построчным
Это и есть по строкам... Смотри, у тебя матрица - значит, 2 индекса... Первый - номер строки, второй - номер столбца (тут уж ничего не поделаешь, так в Паскале принято, что матрица хранится построчно)... Смотрим на твой цикл:
for i:=1 to n do begin for j:=1 to n do readln(p[i,j]); { <--- по J - внутренний цикл, J меняется быстрее, чем I !!! } s1:=s1+p[i,i]; s2:=s2+p[i,n+1-i]; end;
Если первый индекс меняется быстрее второго - значит, матрица заполняется по столбцам (пока номер строки меняется, номер столбца остается неизменным)... У тебя этого не происходит, у тебя второй индекс меняется быстрее первого, значит, пока номер строки стоит на месте, меняется номер столбца => заполнение идет построчно...
Чёто я совсем запутался, если у меня ввод построчный то зачем учитель сказала мне исправить задание так чтоб ввод был построчный? Говорит 2 действия тебе надо сделать: Поменять i и j местами гдето и куда нужно вставить begin end, как выполнить её задание?
program werqwrsdfgse; uses crt; const n=2; var p:array [1..n,1..n] of real;i,j:integer;s1,s2:real; begin clrscr; s1 := 0; s2 := 0; writeln('vvedite elementi matrici'); for i:=1 to n do begin for j:=1 to n do readln(p[i,j]); s1:=s1+p[i,i]; s2:=s2+p[i,n+1-i]; end; Writeln('summa elementov glavnoi diagonali ',s1:2:2); Writeln('summa elementov diagonali simetrichnoi glavnoi ',s2:2:2); end.
если у меня ввод построчный то зачем учитель сказала мне исправить задание так чтоб ввод был построчный?
Это ты у нее спрашивай, зачем она тебя "на испуг берет"... Не можешь объяснить - значит, не понимаешь, как это работает... А ты объясни... Хотя бы то, что я написал. И не надо никакие Begin/End просто так добавлять. Программа работает? Работает. Чего ей не нравится??? Ей надо, чтоб она НЕ работала, что-ли?
Кстати, я бы на твоем месте сделал вещь, которая поставит твою "учительницу" (чему она научить может - непонятно) на место:
program werqwrsdfgse; uses crt; const n=2; var p: array[1..n, 1..n] of real; i,j:integer; s1,s2:real; begin clrscr; s1 := 0; s2 := 0; writeln('vvedite elementi matrici'); for i:=1 to n do begin for j:=1 to n do readln(p[i,j]); s1:=s1+p[i,i]; s2:=s2+p[i,n+1-i]; end;
writeln('matrix:'); for i := 1 to n do begin for j := 1 to n do write(p[i, j]:5:2); writeln; end;
Writeln('summa elementov glavnoi diagonali ',s1:2:2); Writeln('summa elementov diagonali simetrichnoi glavnoi ',s2:2:2); end.
Результат выполнения:
Цитата(Console)
vvedite elementi matrici 1 3 4 5 matrix: 1.00 3.00 4.00 5.00 summa elementov glavnoi diagonali 6.00 summa elementov diagonali simetrichnoi glavnoi 7.00