Задача. Магический/Не магический квадрат - Pascal ABC
Формулировка задачи:
Проверить, является ли заданная целочисленная матрица A(N, N) "магическим квадратом" (это значит, что суммы чисел во всех её строках, всех столбцах и двух диагоналях одинаковы).
Решить без процедур и функций.
Решение задачи: «Задача. Магический/Не магический квадрат»
textual
Листинг программы
s:=0; for i:=1 to n do s:=s+a[i,i];//сумма главной диагонали s1:=0; for i:=1 to n do s:=s+a[i,n-i+1];//сумма побочной диагонали if s1<>s then begin write('Это не магический квадрат'); exit end; m:=0; i:=1; while(i<=n)and(m=0) do//проверяем строки begin s1:=0; for j:=1 to n do s1:=s1+a[i,j]; if s1<>s then m:=1 else i:=i+1; end; if m=1 then begin write('Это не магический квадрат'); exit end; j:=1; while(j<=n)and(m=0) do//проверяем столбцы begin s1:=0; for i:=1 to n do s1:=s1+a[i,j]; if s1<>s then m:=1 else j:=j+1; end; if m=1 then write('Это не магический квадрат') else write('Это магический квадрат') end.
Объяснение кода листинга программы
- Переменная
s
инициализируется значением 0. - Затем происходит цикл
for
, который выполняется от 1 доn
. Внутри этого цикла переменнаяs
увеличивается на сумму элементов главной диагонали матрицыa[i,i]
(т.е. элементов, расположенных на позицияхi
как по вертикали, так и по горизонтали). - После этого инициализируется переменная
s1
со значением 0. - Затем также происходит цикл
for
, который выполняется от 1 доn
. Внутри этого цикла переменнаяs1
увеличивается на сумму элементов побочной диагонали матрицыa[i,n-i+1]
(т.е. элементов, расположенных на позицияхi
как по вертикали, так и по горизонтали, но на другой стороне от главной диагонали). - Если значение переменной
s1
отличается от значения переменнойs
, то выводится сообщениеЭто не магический квадрат
и цикл прерывается с помощью оператораexit
. - Затем инициализируется переменная
m
со значением 0. - После этого происходит цикл
while
, который выполняется от 1 доn
иm
равным 0. Внутри этого цикла переменнаяm
инициализируется значением 1, если сумма элементов строки или столбца (в зависимости от текущей проверки) отличается от суммы главной диагонали. - Если значение переменной
m
равно 1, то выводится сообщениеЭто не магический квадрат
и цикл прерывается с помощью оператораexit
. - Если цикл завершается без прерывания, то выводится сообщение
Это магический квадрат
.