Является ли матрица латинским квадратом - Pascal
Формулировка задачи:
12. латинский квадрат порядка N называется квадратная таблица размерности NхN, каждая строка и каждый столбец которой содержит все из цифр 1,2, ..., N. Данная целочисленная квадратная матрица порядка 5. Выяснить, является ли она латинским квадратом.
Решение задачи: «Является ли матрица латинским квадратом»
textual
Листинг программы
var a:array[1..20,1..20] of byte; m,m1,m2:set of 1..20; n,i,j,k:byte; begin write('Размер матрицы n='); readln(n); writeln('Заполните матрицу числами от 1 до ',n); for i:=1 to n do for j:=1 to n do repeat write('a[',i,',',j,']='); readln(a[i,j]); until a[i,j] in [1..n]; writeln('Введеная матрица'); for i:=1 to n do begin for j:=1 to n do write(a[i,j]:3); writeln; end; m:=[1..n]; k:=0; i:=1; while i<=n do begin m1:=[]; for j:=1 to n do m1:=m1+[a[i,j]]; m2:=[]; for j:=1 to n do m2:=m2+[a[j,i]]; if(m1<>m)or(m2<>m) then begin k:=1; break; end else inc(i); end; if k=0 then write('Это латинский квадрат') else write('Это не латинский квадрат'); end.
Объяснение кода листинга программы
- Объявлены переменные:
- a: массив 20x20 целых чисел (byte), для хранения значений элементов матрицы;
- m, m1, m2: множества (set) от 1 до 20, для работы с элементами матрицы;
- n, i, j, k: целые числа (byte), для итерации по элементам матрицы и контроля размера.
- Пользователю предлагается ввести размер матрицы (n).
- Пользователю предлагается заполнить матрицу числами от 1 до n.
- Введенные значения записываются в массив a с помощью двух вложенных циклов.
- Выводится введенная матрица в консоль с помощью трех вложенных циклов и функции write.
- Создаются пустые множества m1 и m2 для хранения элементов главной диагонали и побочной диагонали матрицы соответственно.
- Внутренний цикл (6-8) перебирает строки матрицы (i-я строка).
- Внешний цикл (7-8) перебирает столбцы матрицы (j-й столбец).
- Значение элемента матрицы a[i,j] добавляется в множество m1.
- Значение элемента матрицы a[j,i] добавляется в множество m2.
- Если m1 и m2 не равны множеству [1..n], то это означает, что матрица не является латинским квадратом, и переменная k устанавливается в 1.
- Если m1 и m2 равны множеству [1..n], то это означает, что матрица является латинским квадратом, и переменная k устанавливается в 0.
- Внутренний цикл (10-12) продолжает работу до тех пор, пока i меньше или равно n.
- Если k=0, то выводится сообщение
Это латинский квадрат
. - Если k=1, то выводится сообщение
Это не латинский квадрат
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д