Требуется составить программу, которая проверяет, является ли введённая с клавиатуры целочисленная квадратная матрица размером 10х10 "магическим квадратом", то есть равны ли между собой суммы элементов каждой строки, каждого столбца и суммы элементов каждой диагонали.
uses crt;
const
n=10;
var a:array[1..n,1..n] of integer;
ok:boolean;
i,j,k:integer;
sum:integer;
temp:integer;
begin
for i:=1 to n do
for j:=1 to n do
readln(a[i,j]);
Ok:=True;
sum:=0;
//считаем главную диагональ
for i:=1 to n do
sum:=sum+a[i,i];
{Вычисляем сумму по строкам}
i:=1;
repeat
temp:=0;
for j:=1 to n do
temp:=temp+a[i,j];
i:=i+1;
if temp <> sum then
ok:=False;
until (ok=false) or (i>n);
//если сумма по строкам подходит, то вычисляем по столбцам
if ok=true then
begin
j:=1;
repeat
temp:=0;
for i:=1 to n do
temp:=temp+a[i,j];
j:=j+1;
if temp <> sum then
ok:=False;
until (ok=false) or (j>n);
end;
//далее по диагоналям
if ok=true then
begin
k:=1;
repeat
temp:=0;
for i:=1 to n do begin
j:=i+k;
if j>n then j:=j-n;
temp:=temp+a[i,j];
end;
k:=k+1;
if temp <> sum then
ok:=False;
until (ok=false) or (k>=n);
end;
if ok=true then
begin
k:=1;
repeat
temp:=0;
for i:=1 to n do begin
j:=k-i;
if j<1 then j:=j+n;
temp:=temp+a[i,j];
end;
k:=k+1;
if temp <> sum then
ok:=False;
until (ok=false) or (k>n);
end;