Построить латинский квадрат используя циклический сдвиг - Turbo Pascal
Формулировка задачи:
Написать программу для решения следующей задачи. построить латинский квадрат,используя циклический сдвиг. Латинский квадрат-матрица размером N x N, элементы которой равны 1,2..N и каждое число встречается только один раз в каждой строке и каждом столбце. Это нужно через объекты делать) Заранее огромное человеческое спасибо!!!))
Решение задачи: «Построить латинский квадрат используя циклический сдвиг»
textual
Листинг программы
uses crt;
const nmax=15;
type mas=array[1..nmax] of byte;
mtr=array[1..nmax] of mas;
lkv=object
a:mtr;
b:mas;
n:byte;
procedure razm;
procedure sdvig;
procedure lat_kvd;
end;
procedure lkv.razm;
begin
repeat
write('Размер квадрата от 2 до ',nmax,' n=');
readln(n);
until n in [2..nmax];
end;
procedure lkv.sdvig;
var j,x:byte;
begin
x:=b[n];
for j:=n downto 2 do
b[j]:=b[j-1];
b[1]:=x;
end;
procedure lkv.lat_kvd;
var i,j:byte;
begin
for j:=1 to n do
begin
a[1,j]:=j;
b[j]:=j;
end;
for i:=2 to n do
begin
sdvig;
for j:=1 to n do
a[i,j]:=b[j];
end;
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:4);
writeln;
end;
end;
var a:lkv;
begin
clrscr;
a.razm;
a.lat_kvd;
readln
end.
Объяснение кода листинга программы
- В начале кода подключается библиотека crt, которая обеспечивает функции для работы с консолью.
- Затем определяются константы и типы данных, включая максимальное значение nmax для использования в циклах.
- Определяется тип массива mas, который представляет собой массив байтов. Также определяется массив mtr, который содержит массивы типа mas.
- Создается объект lkv, который имеет три свойства: a (массив mtr), b (массив mas) и n (байт).
- В методе razm происходит чтение размера квадрата от пользователя. Метод повторяет этот процесс до тех пор, пока введенный размер не будет находиться в диапазоне от 2 до nmax.
- В методе sdvig происходит циклический сдвиг массива mtr. Для этого используется цикл for, который перебирает все элементы массива от n до 2. При каждом проходе цикла значение элемента сдвигается на один элемент влево. Затем значение элемента с индексом 1 заменяется на значение переменной x.
- В методе lat_kvd происходит создание латинского квадрата. Для этого используется цикл for, который перебирает все элементы массива a от 1 до n. На каждой итерации цикла значение элемента a[i,j] заменяется на значение элемента b[j].
- После завершения всех методов, программа завершается.
- В основной части программы создается экземпляр объекта lkv.
- Затем вызываются методы razm и lat_kvd.
- После завершения всех вызовов методов, программа завершается.