Цитата:
Сообщение от Зюня,0
Ой простите!!! Вот текст задачи:
Будет ли квадратная матрица «магическим квадратом» (суммы во всех вертикалях, во всех диагоналях, на обеих диагоналях равны).
|
Понятно.
Извольте:
program mag;
{Имя программы}
const:
{Грубейшая ошибка. Двоеточие - убрать!!!!! Впрочем, может быть, в каких-то версиях Паскаля это и допустимо - не знаю.}
n = 3;
{Задание размерности матрицы}
a: array[1 .. n, 1 .. n] of integer =
((1, 2, 1), (1, 1, 1), (1, 1, 1));
{Задание самой матрицы}
var
i, j, s, main: integer;
{Ввод переменных: i,j - индексы, s - текущее значение суммы (столбца, строки, побочной диагонали), main - базовое значение (сумма элементов главной диагонали)}
b: boolean;
{Логический флажок для фиксации совпадения (или несовпадения) текущих сумм с базовой}
begin
s := 0; b := true;
{Присвоение исходных значений}
for i := 1 to n do
{Вычисление суммы элементов главной диагонали и фиксация найденной суммы путём присвоения переменной main значения этой суммы (в дальнейшем сумму элементов главной диагонали будем называть базовой)}
s := s + a[i, i];
main := s;
for i := 1 to n do
{Проверка равенства суммы элементов побочной диагонали базовой сумме. Для этого из базовой вычитаются последовательно значения элементов побочной диагонали, и если в результате получится 0, то флажок b сохраняет значение true, если нет - то флажок получает значение false.}
s := s - a[i, n - i + 1];
b := b and (s = 0);
if b then
{Если предыдущая проверка прошла успешно, то аналогичным образом проверяем суммы элементов всех строк последовательно. Если хотя в одной из строк сумма элементов отклонилась от базовой, то b становится false.}
for i := 1 to n do
begin
s := main;
for j := 1 to n do
s := s - a[i, j];
b := b and (s = 0)
end;
if b then
{То же для столбцов}
for j := 1 to n do
begin
s := main;
for i := 1 to n do
s := s - a[i, j];
b := b and (s = 0)
end;
writeln('magic: ', b)
{Вывод результата в виде значения флажка true/false}
end.