{ Пример 6.3. Проверить является ли заданная целочисленая матрица А(N,N)
"магическим квадратом" (это значит, что суммы чисел во всех
ее строках, всех столбцах и двух диагоналях одинаковы).
Система тестов
╔══════╤═════════════╤═════════════════╤════════════════╗
║ Номер│ Проверяемый │ Данные │ ║
║ теста│ случай ├───┬─────────────┤ Результат ║
║ │ │ N │ Матрица А │ ║
╟──────┼─────────────┼───┼─────────────┼────────────────╢
║ 1 │ Является │ 3 │ 1 2 3 │ "Магический ║
║ │ │ │ 4 2 0 │ квадрат" ║
║ │ │ │ 1 2 3 │ ║
╟──────┼─────────────┼───┼─────────────┼────────────────╢
║ 2 │ Не является │ 2 │ 2 1 │ "Не магический ║
║ │ │ │ 1 2 │ квадрат" ║
╚══════╧═════════════╧═══╧═════════════╧════════════════╝
}
Program MagicSquare;
Uses Crt;
Var A : Array [1..20, 1..20] of Integer;
i, j, N : Integer;
Standard, S : Integer; { Standard - сумма-эталон, S - текущая сумма }
Flag : Boolean;
{-------------------------------------}
Procedure InputOutput; { описание процедуры ввода-вывода матрицы }
Begin
ClrScr;
Write('Количество строк и столбцов - ');
ReadLn(N);
For i := 1 to N do
For j := 1 to N do
begin Write('A[' , i , ', ' , j , '] = ');
ReadLn(A[i, j])
end;
ClrScr;
WriteLn('Исходная матрица :'); WriteLn;
For i := 1 to N do
begin
For j := 1 to N do Write(A[i, j] : 5);
WriteLn
end; WriteLn
End; { of InputOutput }
{-------------------------------------------}
Procedure MagicOrNot(Var Flag : Boolean); { описание процедуры, в которой
выясняется, является ли квадрат "магическим" }
Begin { вычисление суммы элементов главной }
{ диагонали в качестве эталонной суммы }
Standard:=0;
For i := 1 to N do Standard := Standard+A[i, i];
Flag:=TRUE; i:=1;
While (i<=N) and Flag do { вычисление сумм элементов строк }
begin
S:=0;
For j := 1 to N do S := S+A[i, j];
If S<>Standard then Flag := FALSE else i:=i+1
end;
j:=1;
While (j<=N) and Flag do { вычисление сумм элементов столбцов }
begin
S:=0;
For i := 1 to N do S:=S+A[i, j];
If S<>Standard then Flag := FALSE else j := j+1
end;
If Flag then
begin
S:=0; { вычисление суммы элементов побочной диагонали }
For i := 1 to N do S := S+A[i, N+1-i];
If S<>Standard then Flag := FALSE;
end;
End;
{--------------------------------------------------------}
BEGIN
InputOutput; { Вызов процедуры ввода-вывода }
MagicOrNot(Flag); { Вызов процедуры решения задачи }
If Flag then WriteLn('Это магический квадрат.')
else WriteLn('Это не магический квадрат.');
ReadLn
END.
Похожие записи/страницы:
- Дана целая квадратная матрица n-го порядка . Определить, является ли она логическим квадратом , т.е во всех…
- Дана целая квадратная матрица n-го порядка. Определить, является ли она магическим квадратом, т.е. такой, в…
- Проверка матрицы на "магический квадрат" - Pascal(Паскаль)
- дана целая квадратная матрица n-порядка. Определить, является ли она магическим квадратом, т.е. такой, в которой…
- Определить, является ли заданная последовательность чисел... - Pascal(Паскаль)
- Определить, является ли заданная последовательность чисел монотонно убывающией - Pascal(Паскаль)
- Написать программу, использующую подпрограмму, которая проверяет, является ли введенная матрица магическим…
- Дано четное натуральное число. Проверить является ли число квадратом- Pascal(Паскаль)