Дана целая квадратная матрица, n- го порядка. Определить, является ли она магическим квадратом, т.е. такой, в которой сумма элементов во всех строках и столбцах одинаковая. Нужна адекватная программа уровня 11 класса на паскале.

Дана целая квадратная матрица, n- го порядка. Определить, является ли она магическим квадратом, т.е. такой, в которой сумма элементов во всех строках и столбцах одинаковая. Нужна адекватная программа уровня 11 класса на паскале.
Гость
Ответ(ы) на вопрос:
Гость
Program MagicSquares;  {Построение магических квадратов}  Uses CRT;  Type a_type=array[1..50,1..50] of integer;  Var i,j,n:integer;  a:a_type;  t:boolean;  {логическая переменная true (правда) или false (ложь)}  x,y:integer;  Label 1;  {метка}  Procedure Print(n:integer; a:a_type);  {процедура вывода}  Var i,j:integer;  Begin  for i:=1 to n do begin  for j:=1 to n do write(a[i,j]:4);  writeln('');  end;  end;  Procedure WinSh(x1,y1,x2,y2,col1,col2:word);  {процедура вывода окна}  Begin  TextBackGround(black);  Window (x1+1,y1+1,x2+1,y2+1);  {тень - черный прямоугольник}  ClrScr;  TextBackGround(col1);  Window(x1,y1,x2,y2);  ClrScr;  TextColor(col2);  {рисование рамки}  GotoXY(2, 1); write('г');  for i:=1 to x2-x1-2 do write('=');  GotoXY(x2-x1,1); write('=');  GotoXY(2,y2-y1+1);  write('L'); for i:=1 to x2-x1-2 do write('=');  GotoXY(x2-x1,y2-y1+1); write('-');  for j:=2 to y2-y1 do begin  GotoXY(2,j); write('¦');  GotoXY(x2-x1,j); write('¦');  end;  End;  Procedure OddMagic(n:integer; var a:a_type);  {Процедура формирования магического квадрата при нечетном n. Описание алгоритма в сопроводительной записке }  Var  i,j,k:integer;  p,l:integer;  Begin  for i:=1 to n do  for j:=1 to n do a[i,j]:=0;  j:=n div 2 +1; p:=sqr(n); i:=1; a[i,j]:=1;  for l:=2 to p do begin  i:=i-1;  j:=j+1;  if (i=0) and (j<>n+1) then i:=n;  if (j=n+1) and (i<>0) then j:=1;  if ((i=0) and (j=n+1)) or (a[i,j]<>0) then  {важен порядок условий!}  begin  i:=i+2;  j:=j-1;  end;  a[i,j]:=l;  end;  end;  Procedure Two (n:integer; var a:a_type);  {Процедура построения квадрата при n обычной четности: n=6,10,14,18...}  Var  u,i,j,k,m,z:integer;  b:a_type;  Begin  u:= n div 2;  m:=(u-1) div 2;  OddMagic(u,b);  {вызов процедуры построения квадрата при нечет-ном u}  k:=u*u;  for i:=1 to n do  for j:=1 to n do begin  if (i>=1) and (i<=u) and (j>=1) and (j<=u) then a[i,j]:=b[i,j];  if (i>=u+1) and (i<=n) and (j>=u+1) and (j<=n) then a[i,j]:=b[i-u,j-u]+k;  if (i>=1) and (i<=u) and (j>=u+1) and (j<=n) then a[i,j]:=b[i,j-u]+2*k;  if (i>=u+1) and (i<=n) and (j>=1) and (j<=u) then a[i,j]:=b[i-u,j]+3*k;  end;  for i:=1 to u do  if i=u div 2+1 then begin  j:= u div 2+1;  for k:=1 to m do begin  z:=a[i,j];  {обмен данными}  a[i,j]:=a[i+u,j];  a[i+u,j]:=z;  j:=j-1  end;  end 
Гость
const n=5; var a:array[1..n,1..n] of integer; i,j,s1,s2:integer; b:boolean; begin for i:=1 to n do  for j:=1 to n do read(a[i,j]);b:=true; s1:=0; for j:=1 to n do s1:=s1+a[1,j]; for i:=1 to n do  begin  s2:=0;  for j:=1 to n do s2:=s2+a[i,j];  if s1<>s2 then b:=false;  s2:=0;  for j:=1 to n do s2:=s2+a[j,i];  if s1<>s2 then b:=false;  end; if b then writeln('Матрица - магический квадрат')      else writeln('Матрица не является магическим квадратом'); end. Пример 1: 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9Матрица - магический квадрат Пример 2: 15 24 1 8 17 5 23 7 14 16 22 4 6 13 20 10 12 19 21 3 11 18 2 25 9 Матрица не является магическим квадратом
Не нашли ответ?
Ответить на вопрос
Похожие вопросы