СДАМ ГИА: РЕШУ ЕГЭ
Образовательный портал для подготовки к экзаменам
Информатика
≡ информатика
сайты - меню - вход - новости




Задания
Версия для печати и копирования в MS Word
Задание 25 № 2918

Требуется составить программу, которая проверяет, является ли введённая с клавиатуры целочисленная квадратная матрица размером 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;