zadach320.PAS

{* Задача 320 *}

Unit ZADACH320;
Interface
Implementation
Begin
 writeln('Ввести с клавиатуры матрицу 5х5, составленную из чисел 1, 2,…25. Определить является ли заданная целочисленная матрица «магическим квадратом», т.е. такой, в которой сумма элементов в каждой строке, в каждом столбце, и в каждой диагонали одинаковы (равны между собой). Вывести сообщение о результатах своего исследования. Если матрица является «магическим квадратом», то умножить её на матрицу, составленную из числа, которому равны сумма элементов строк, столбцов, диагоналей, иначе умножить её на матрицу, составленную из сумм индексов элементов исходной матрицы.');
End.

Program lab_5;

Uses zadach320.pas; {* Эту строку можно удалить *}
Uses crt; {* Подключаем внешние файлы *}
Var {* Необходимые переменные *}
  A     : Array[1..5, 1..5] Of integer;
  B     : Array[1..5, 1..5] Of integer;
  i     : integer;
  j     : integer;
  sum   : integer;
  k     : integer;
  sumj  : integer;
  g     : integer;
  sumi  : integer;
  sumd1 : integer;
  sumd2 : integer;
  sumin : integer;
  flag  : boolean;
Begin
  clrscr; {* Очищаем экран *}
  randomize;
  flag := false;
  k := 1;
  writeln('Магический квадрат');
  For i := 1 To 5 Do {* Увеличиваем i от 1 до 5 с шагом 1 *}
    For j := 1 To 5 Do {* Увеличиваем j от 1 до 5 с шагом 1 *}
      Repeat          {read(A[i, j]);
        }

  A[i, j] := random(4);
  Until (A[i, j]1);
  For i := 1 To 5 Do {* Переменная i увеличивается с 1 до 5 *}
  Begin
    For j := 1 To 5 Do {* Переменная j увеличивается с 1 до 5 *}
    Begin
      If i = j Then
        sumd1 := sumd1 + A[i, j];
      If i + j = 6 Then
        sumd2 := sumd2 + A[i, j];
      sumin := sumin + i + j;
      write(A[i, j] : 4);
    End;
    writeln; {* Пропускаем одну строку *}
    writeln; {* Пустая строка *}
  End;
  For i := 1 To 5 Do {* Переменная i увеличивается с 1 до 5 *}
  Begin
    For j := 1 To 5 Do {* Цикл для j => [1 .. 5] *}
    Begin
      sumi := sumi + A[i, j];
      sumj := sumj + A[j, i];
    End;
    If (sumjsumd1) Or (sumisumd1) Or (sumd1sumd2) Then
      flag := true;
    sumi := 0;
    sumj := 0;
  End;
  If flag = false Then
  Begin
    writeln('Матрица является магическим квадратом');
    For i := 1 To 5 Do {* Цикл для i => [1 .. 5] *}
    Begin
      For j := 1 To 5 Do {* Увеличиваем j от 1 до 5 с шагом 1 *}
      Begin
        B[i, j] := sumd1 * sumd1;
        write(B[i, j] : 4);
      End;
      writeln; {* Пропускаем одну строку *}
      writeln; {* Пустая строка *}
    End;
    
  End;
  Else Begin
    writeln('Матрица не является магическим квадратом');
  For i := 1 To 5 Do {* Увеличиваем i от 1 до 5 с шагом 1 *}
  Begin
    For j := 1 To 5 Do {* Переменная j увеличивается с 1 до 5 *}
    Begin
      For g := 1 To 5 Do {* Цикл для g => [1 .. 5] *}
        B[i, j] := B[i, j] + A[i, g] * (g + j);
      write(B[i, j] : 4);
    End;
    writeln; {* Пустая строка *}
    writeln; {* Пустая строка *}
  End;
  
End;
  readln; {* Ждем подтверждения пользователя *}
  readln; {* Приостановка программы. Ожидание Enter *}
  End...