Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Сумма элементов матрицы

Автор: Вячеслав Людской 7.12.2009 17:49

Сравните две прграммы вывода суммы модулей элементов столбца матрицы:

var
a:array[1..5,1..5] of integer;
i,j,s:integer;

begin

writeln('matriza:');

for i:=1 to 5 do
begin
for j:=1 to 5 do
begin
a[i,j]:=random(20)-10;
write(a[i,j]:4);
end;
writeln;
end;

for j:=1 to 5 do
begin
s:=0;
for i:=1 to 5 do
begin
if a[i,j]<0 then a[i,j]:=abs(a[i,j]);
s:=s+a[i,j];
end;
writeln('symma stolbca ',j,' = ',s);
end;

end.

и
var
a:array[1..5,1..5] of integer;
i,j,s,k:integer;

begin

writeln('matriza:');

for i:=1 to 5 do
begin
for j:=1 to 5 do
begin
a[i,j]:=random(20)-10;
write(a[i,j]:4);
end;
writeln;
end;

for j:=1 to 5 do
begin
s:=0;
for i:=1 to 5 do
begin
if a[i,j]<0 then k:=abs(a[i,j]);
s:=s+k;
end;
writeln('symma stolbca ',j,' = ',s);
end;

end.
Разница в том, что в первой мы изменяем сами элементы массива, а во второй присваиваем некой переменной k значение этого элемента массива. Почесу же втроая программа выдает неправильный резельтат (ответ выводится неверный)?

Автор: volvo 7.12.2009 17:58

Потому что у тебя переменная K не инициализируется элементом матрицы, если он положительный. Надо было делать так:

        if a[i,j]<0 then k:=abs(a[i,j]) else k := a[i, j];
s:=s+k;


Хотя на самом деле все гораздо проще:
    for i:=1 to 5 do
begin
s:=s+abs(a[i, j]);
end;
, и не надо ничего запоминать...

Автор: Вячеслав Людской 7.12.2009 19:16

Ох, как все просто. Спасибо, volvo.