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


Задания
Версия для печати и копирования в 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;