Дана целая квадратная матрица n-го порядка. Определить, является ли она магическим квадратом, т.е. такой, в которой суммы элементов во всех строках и столбцах одинаковы. — Pascal(Паскаль)

Var
X:array [1..20,1..20] of integer; {Матрица целых чисел максимальной размерности 20x20}
N:integer; {Размерность матрицы}
i,j:integer; {i, j - счётчики циклов}
S,T:integer; {S - "сумма" магического квадрата, T - вспомогательная переменная}
Flag:boolean;
begin
 writeln('Проверка матрицы на "магический квадрат".'); {Формулировка цели алгоритма}
 write('Введите размерность квадратной матрицы: ');
 readln(N);         
 writeln('Введите поочередно элементы таблицы:');
 for i:=1 to N do {Цикл для i от 1 до N}
  for j:=1 to N do {Цикл для j от 1 до N}
   begin
    write('X[',i,',',j,']=');
    readln(X[i,j]); {Ввод очередного элемента матрицы X}
   end;
 writeln;
 for i:=1 to N do {Цикл для i от 1 до N}
  begin    
   for j:=1 to N do {Цикл для j от 1 до N}
   write (X[i,j]:5); {Форматированный вывод в строку очередного элемента массива X}
   writeln;
  end;      
 S:=0; {Начальное значение S присваиваем равным 0}
 for i:=1 to N do {Цикл для i от 1 до N}
 S:=S+X[1,i]; {Накапливаем в S сумму элементов первой строки}
 Flag:=True; {Присваиваем Flag=True, т.е. матрица ПОКА удовлетворяет требованиям}
 for i:=1 to N do {Цикл для i от 1 до N}
  begin
   T:=0; {Присваиваем T = 0}
   for j:=1  to N do {Цикл для j от 1 до N}
   T:=T+X[i,j]; {Накапливаем в T сумму элементов j-ой строки}
   if T<>S then Flag:=False; {Если найденное T не равно S, то матрица УЖЕ не удовлетворяет требованиям}
  end;
 for j:=1 to N do {Цикл для j от 1 до N}
  begin
   T:=0;
    for i:=1 to N do {Цикл для i от 1 до N}
    T:=T+X[i,j]; {Накапливаем в T сумму элементов i-го столбца}
    if T<>S then Flag:=False; {Eсли найденное T не равно S, то матрица УЖЕ не удовлетворяет требованиям}
  end;      
 T:=0;
 for i:=1 to N do T:=T+X[i,i]; {В цикле для i от 1 до N накапливаем в T сумму эл-тов главной диагонали}
 if T<>S  then Flag:=False; {Если найденное T не равно S, то матрица УЖЕ не удовлетворяет требованиям}
 T:=0;
 for i:=1 to N do T:=T+X[i,N-i+1]; {В цикле для i от 1 до N накапливаем в T сумму эл-тов побочной диагонали}
 if T<>S then Flag:=False; {Если найденное T не равно S, то матрица УЖЕ не удовлетворяет требованиям}
 if (Flag:=True) then writeln('Матрица является "магическим квадратом".')
 else writeln('Матрица не является "магическим квадратом".');
 readln;
end.

Leave a Comment

+ 33 = 35