Условие:
Проверьте плиз, правильно ли я решил?
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.
У тебя если семь элементов в матрице. А если n? Тогда условие меняется на:
readln(n); {у тебя n=7}
for i:=1 to n do
for j:=1 to n do begin
if i=j then s1:=s1+p[i,j]; {это для главной диагонали}
Ну тогда проще так
s:=0;kvadrat почитай FAQ - поможет
For i:=1 To n Do s:=s+a[i,i];
Кстати да, 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.
Что такое отладка??
http://volvo71.narod.ru/full_debug.htm
Круто, поотлаживал всё и заметил что после строчек с for он пропрыгивает begin, пробовал ставить 2 бегина и энда всё равно также, также пропобал после первой фор ставить бегин и после второй, но всё равно внаглую просткакивает их. И разультат попрежнему неверен. Незнаю чё делать. =(
begin - это не выполняемый оператор, а операторная скобка. Ка по-твоему должна выполняться скобка?
Сижу вот с самого утра в этой проге на F7 тычю и ваще неодупляю где ошибка, тыкните пальцем хотябы, мой мозг на гране взрыва.
Смотри: (при n=3)
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;
Сейчас подумала, что можно и в этом цикле, но несколько в другом месте.. попробуй переделать))
Ееее получилось, вот так работает правильно:
for i := 1 to n do
begin
for j := 1 to n do
begin
readln(p[i,j]);
end;
s1:=s1+p[i,i];
s2:=s2+p[i,n-i+1];
end;
Ага
А еще можно убрать лишние "скобки" и получится чуть-чуть короче))
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;
Скажите как называется способ введения элементов матрицы в этом решении?
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 кудато впихнуть. Я так и непонял чё она от меня ваще хатела и чё это за способы ввода матрицы, и как надо их вводить, в строчку все элементы через пробел или через запятую? или как?
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.
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.
А возможно сделать так чтобы ввод матрицы был примерно такой:
Можно:
for i := 1 to n do
begin
for j := 1 to n do write(p[i, j]:5:2);
write(' ',i,'-я строка');
writeln;
end;
Оля, ввод, а не вывод...
...Всю строку вводишь через пробелы, после этого нажимаешь Enter...
writeln('vvedite elementi matrici');
for i:=1 to n do begin
write(i:2, '-я строка: ');
for j:=1 to n do read(p[i,j]);
readln;
s1:=s1+p[i,i];
s2:=s2+p[i,n+1-i];
end;
...