Другие языки программирования и технологии

Программирование на PASCAL

Как реализовать данный алгоритм?Дана матрица n-ного порядка. Определить является ли она магическим квадратом (то есть таким, у которого сумма чисел стоящих во всех столбцах и в строках совпадает).
Доброго времени суток.

Ну если только кусок.. . Пишите функцию, возвращающую сумму элементов строки.

function SumRow(Row: Integer): Integer;
var j, S : Integer;
begin
S := 0;
for j:=1 to n do S := S + A[Row,j];
SumRow := S;
end;

Аналогично для столбцов. А затем проверяете

RowValid := True; {предположим, что суммы по строка равны}
for j:=1 to n-1 do
if SumRow(j) <> SumRow(j+1) then begin
RowValid := False; {сбросим флаг}
Break; {дальше нет смысла проверять}
end;

Если после выполнения этого цикла RowValid остается истинной, то проверяете столбцы. Если и там все в порядке, то проверяете

if SumRow(1) = SumCol(1) then ...

Вот только не все здесь шокаладно. Если не изменяет память, то магическим квадратом считается такой, у которого не только суммы совпадают, но и каждое число присутствует в строке и столбце только в одном экземпляре.

Удачи!
НС
Надежда Сочелович
59 612
Лучший ответ
uses crt;
var z,i,k,j,s,n,p,prds,prds1,s1:integer;
a:array[1..1000,1..1000]of integer;
procedure viv; //ïðîöåäóðà âûâîäà
begin
for i:=1 to n do
begin
writeln;
for J:=1 to n do
write(a[ i,j ]:4)
end;
writeln;
end;
begin
randomize;
readln(n);//êîë âî ñòðîê è ñòîëáöîâ
for i:=1 to n do
for J:=1 to n do
a[ i, j]:=random(20);
viv;
for i:=1 to n do
begin
prds:=s;
s:=0;
for j:=1 to n do
s:=s+a[ i,j ];
if(prds=s)then k:=k+1;
end; //íàõîäèì ñóììó â êàæäîé ñòðîêó è ñðàâíèâååì ñ ïðåä ñòðîê
for j:=1 to n do
begin
prds1:=s1;
s1:=0;
for i:=1 to n do
s1:=s1+a[ i,j ];
if(prds1=s1)then z:=z+1;
end;
if (k=n-1)and(z=n-1) then writeln('magik kvad')
end.
Чувак открой книгу и прочитай, задача не сложная. Если ты на таких задачах заваливаешся подумай что будет дальше...