Заполнить (квадратную) матрицу a(n,n) числами натурального ряда в последовательности указанной на рисунке - Pascal ABC
Формулировка задачи:
Нужно заполнить (квадратную) матрицу a(n,n) числами натурального ряда в последовательности указанной на рисунке и вывести ее на экран. Pascal abc. Рисунок 37.
Кто может киньте готовый код, пожалуйста, а то никак не могу понять как решать такое.
Решение задачи: «Заполнить (квадратную) матрицу a(n,n) числами натурального ряда в последовательности указанной на рисунке»
textual
Листинг программы
var a:array[1..19,1..19] of integer;
n,i,j,k:integer;
begin
repeat
write('Введите размер матрицы целое число от 3 до 19 n=');
readln(n);
until n in [3..19];
k:=0;
for i:=n downto 1 do
begin
if i>n div 2 then
if odd(i) then
for j:=n-i+1 to i do
begin
inc(k);
a[i,j]:=k;
end
else
for j:=i downto n-i+1 do
begin
inc(k);
a[i,j]:=k;
end
else
if odd(i) then
for j:=i to n-i+1 do
begin
inc(k);
a[i,j]:=k;
end
else
for j:=n-i+1 downto i do
begin
inc(k);
a[i,j]:=k;
end;
end;
for i:=1 to n do
begin
for j:=1 to n do
if a[i,j]>0 then write(a[i,j]:4)
else write(' ':4);
writeln;
end;
end.
Объяснение кода листинга программы
- Создается переменная
aтипаarray[1..19,1..19] of integer;, которая представляет собой квадратную матрицу размером от 3 до 19 строк и столбцов. - Создаются три переменные
n,i,jтипаinteger;, которые будут использоваться для итерации по матрице. - В цикле
repeatвыполняется запрос на ввод размера матрицы. Размер должен быть целым числом от 3 до 19. Цикл продолжается, пока введенное значение не будет удовлетворять этому условию. - Переменная
kинициализируется значением 0. Она будет использоваться для отслеживания текущего значения, которое будет увеличиваться на единицу при каждой итерации цикла. - В цикле
forвыполняется следующая логика:- Если текущая строка
iбольшеnделить на 2, то есть еслиiявляется четным числом, и еслиiне делится на 2, то есть еслиi- нечетное число. - Если
iявляется четным числом иiделится на 2, то есть еслиiменьше или равноnделить на 2, то выполняется циклfor j:=i-1 до i-i+1. Это означает, что для каждой четной строкиiвыполняется циклfor j:=i-1 до i-i+1. - Если
iявляется нечетным числом, то выполняется циклfor j:=i до n-i+1. Это означает, что для каждой нечетной строкиiвыполняется циклfor j:=i до n-i+1. - Если
iявляется четным числом иiне делится на 2, то выполняется циклfor j:=i+1 до n-i+1. Это означает, что для каждой четной строкиiвыполняется циклfor j:=i+1 до n-i+1.
- Если текущая строка
- После завершения цикла
forзаписывается значение переменнойkв соответствующую ячейку матрицыa[i,j]. - После завершения всех циклов выполняется вывод матрицы
a. Для этого используется циклfori:=1 to n doи циклfor j:=1 to n do. Если значение в ячейкеa[i,j]больше 0, то оно выводится на экран в формате4 цифр. В противном случае выводится пробел. - Конец программы.