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

Составить программу в pascal free

Составить программу проверяющую образует ли элементы двухмерного массива магический квадрат, в магическом квадрате сумма чисел по всем вертикалям, всем горизонталям и двум диагоналям одинаковы. Размерность массива должна задаваться у пользователя.
program N89853831;
var
  a: array of array of word;
  i, j, n: byte;
  sum, si, sj: longint;
  f: boolean;
begin
  write('Введите порядок матрицы: ');
  readln(n);
  setlength(a, n, n);
  writeln('Введите элементы матрицы: ');
  si := 0;
  sj := 0;
  for i := 0 to n - 1 do
    for j := 0 to n - 1 do
    begin
      write('A[', i + 1, ',', j + 1, ']: ');
      readln(a[i, j]);
      if i = j then
        si := si + a[i, j];
      if i = n - j - 1 then
        sj := sj + a[i, j]
    end;
  f := si = sj;
  sum := si;
  i := 0;
  while f and (i < n) do
  begin
    si := 0;
    sj := 0;
    for j := 0 to n - 1 do
    begin
      si := si + a[i, j];
      sj := sj + a[j, i]
    end;
    f := (si = sum) and (sj = sum);
    inc(i)
  end;
  write('Введённая матрица ');
  if not f then
    write('не ');
  writeln('является магическим квадратом. ');
  readln
end.
Юрий Табак
Юрий Табак
51 590
Лучший ответ
var size: integer;
function sum(xs,ys, x_p, y_p: integer ):integer;
var x,y, s: integer;
begin
x := xs; y := ys; s := 0;
while (x < size) and (y < size) do begin inc(s, a[x,y]); inc(x,x_p); inc(y,y_p); end;
sum := s;
end;
var i, s: integer;
begin
...
s := sum(0,0,1,0);
if (sum(0,0,1,1) <> s) or (sum(size-1,0,-1,1) <> s) then не магический
for i := 0 to size do
if (sum(i,0,0,1) <> s) or (sum(0,i,1,0) <> s) then не магический
...
Anai-Haak Monge
Anai-Haak Monge
6 852