Помощь - Поиск - Пользователи - Календарь
Полная версия: Сумма элементов диагоналей матрицы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
ducky
подскажите пожалуйста.. wacko.gif

условие - Найти сумму элементов диагоналей матрицы.

program V_9_14;
var p:array[1..9,1..9] of real;
i,n,j:integer;
s1,s2:real;

begin
s1:=0;
s2:=0;
writeln ('vvedite razmer matrici');
readln(n);
writeln ('vvedite elementi matrici');

for i:=1 to n do
for j:=1 to n do
readln(p[i,j]);

for i:=1 to n do
for j:=1 to n do

begin
if (i=j) then s1:=s1+p[i,j];
if (i=j+1-10) then s2:=s2+p[i,j];
end;

writeln ('summa elementov glavnoj diagonali', s1:2:2);
writeln ('summa elementov diagonali simetrichnoj glavnoj', s2:2:2);

readln;

end.


вышло вот такое, но почему-то при запуске программу циклит..
Client
не совсем понял сумму каких диагоналей?
ну и... смотри FAQ (сверху красная ссылка)
volvo
Ничего не циклит, просто ответ неправильный. Вот тут посмотри, как вычисляется сумма элементов, лежащих не диагоналях:
Массивы. Матрицы. Типичные задачи.
, и избавься от никому не нужного двойного цикла и всех этих проверок. Все делается гораздо проще...
Freedom
program V_9_14;
var p:array[1..9,1..9] of real;
i,n,j:integer;
s1,s2:real;

begin
s1:=0;
s2:=0;
writeln ('vvedite razmer matrici');
readln(n);
writeln ('vvedite elementi matrici');

for i:=1 to n do
for j:=1 to n do
readln(p[i,j]);

for i:=1 to n do s1:=s1+p[i,i];

for i:=1 to n do s2:=s2+p[i,n-i+1];

writeln ('summa elementov glavnoj diagonali', s1:2:2);
writeln ('summa elementov diagonali simetrichnoj glavnoj', s2:2:2);

readln;

end.


вот так.
Не нужно делать двойной цикл когда находите сумму элементов главной диагонали, потому что все элементы главной диагонали являются p[i,i]мы элементами матрицы. Вот например матрица 3 на 3 , главная диагональ p[1,1] p[2,2] p[3,3], а побочная является p[i,n-i+1]
volvo
Freedom, решение пока скрыто... Пускай учатся ДУМАТЬ хоть чуть-чуть!
Freedom
Цитата(volvo @ 29.11.2010 19:18) *

Freedom, решение пока скрыто... Пускай учатся ДУМАТЬ хоть чуть-чуть!

Хорошо.
ducky
в том то и беда, что нужно с массивами это делать. задачи по темам делятся у нас.

спасибо, сейчас пойду исправлять!)
ducky
я ее сделала))

program V_9_14;
var a:array[1..9,1..9] of integer;
i,j,n:integer;
s1,s2,s:real;

begin
randomize;

for i:=1 to 9 do
begin
for j:=1 to 9 do
a[i,j]:= random(1)+1;
end;
for i:=1 to 9 do
begin
for j:=1 to 9 do write(a[i,j]:6);
writeln;
end;

s1:=0;
for i:=1 to 9 do
s1:=s1+a[i,i];

s2:=0;
n:=9;
for i:=1 to n do s2:=s2+a[i,n+1-i];

i:=5;
j:=5;
s:=s1+s2-a[i,j];
writeln(s:6:2);

readln;
end.

мисс_граффити
я бы посоветовала:
1. объединить циклы заполнения массива и его распечатки.
2. объединить циклы подсчета суммы по главной и по побочной диагонали.

вот.. а n лучше объявить как константу и использовать везде, вместо 9... не только в одном цикле.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.