Проверка
матрицы на "магический квадрат".
|
Program
Pr34 (Input, Output);
|
Объявление
имени программы
|
Var
|
Блок
объявления глобальных переменных
|
X
:
Array [1..20, 1..20] Of Integer;
|
Матрица
целых чисел максимальной размерности
20x20
|
N
:
Integer;
|
Размерность
матрицы
|
i,
j
:
Integer;
|
i,
j - переменные циклов
|
S,
T
:
Integer;
|
S
- "сумма" магического квадрата, T -
вспомогательная переменная
|
Flag
:
Boolean;
|
Flag
- вспомогательная переменная
|
|
|
Begin
|
Начало
тела программы
|
|
|
WriteLn
('PASCAL: Проверка матрицы на "магический
квадрат".');
|
Формулировка
цели алгоритма
|
Write
('Введите размерность квадратной
матрицы: ');
|
Запрос
ввода размерности матрицы
|
ReadLn
(N);
|
Ввод
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;
|
Присваиваем
T = 0
|
For
i := 1 To N Do
|
Цикл
для i
от 1 до N
|
T
:= T + X [i, j];
|
Накапливаем
в T сумму элементов i-го столбца
|
If
T <> S Then Flag := False;
|
Если
найденное T не равно S, то матрица УЖЕ не
удовлетворяет требованиям
|
End;
|
Конец
тела цикла
|
|
|
T
:= 0;
|
Присваиваем
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;
|
Присваиваем
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)
|
Если
значение переменной Flag все еще равно TRUE,
т.е. условия не нарушены
|
Then
Writeln('Матрица является "магическим
квадратом".')
|
То
выводим положительный ответ на вопрос
задачи
|
Else
Writeln('Матрица не является "магическим
квадратом".');
|
Иначе
выводим соответствующую надпись о
нарушении требований.
|
|
|
ReadLn;
|
Ожидание
нажатия клавиши Enter для завершения
|
End.
|
Конец
программы
|