Вывести матрицу спиралью - Free Pascal
Формулировка задачи:
Дан массив NxN (N<=10), заполненный буквами. Вывести массив спиралью.
Пример:
Ввод
a b c
d e f
g h i
Вывод
a b c
h i d
g f e
Решение задачи: «Вывести матрицу спиралью»
textual
Листинг программы
const n=4;
type matr=array[1..n,1..n] of char;
mas=array[1..n*n] of char;
var a:matr;
b:mas;
i,imax,imin,j,jmax,jmin,k:integer;
begin
k:=1;
writeln('A:');
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=chr(97+random(26));
b[k]:=a[i,j];
inc(k);
write(a[i,j]:3)
end;
writeln
end;
writeln;
jmin:=1;jmax:=n;imin:=2;imax:=n;
k:=0;
repeat
for j:=jmin to jmax do
begin
inc(k);
a[imin-1,j]:=b[k];
end;
for i:=imin to imax do
begin
inc(k);
a[i,jmax]:=b[k];
end;
dec(jmax);
for j:=jmax downto jmin do
begin
inc(k);
a[imax,j]:=b[k];
end;
dec(imax);
for i:=imax downto imin do
begin
inc(k);
a[i,jmin]:=b[k];
end;
inc(imin);
inc(jmin);
until k>=n*n;
writeln('A'':');
for i:=1 to n do
begin
writeln;
for j:=1 to n do write(a[i,j]:3);
end;
readln;
end.
Объяснение кода листинга программы
- Объявлены две матрицы: квадратная матрица
aразмеромn x nтипаarray[1..n,1..n] of charи одномерная матрицаbразмеромn x nтипаarray[1..n*n] of char. - В цикле заполняется матрица
aслучайными символами. - Задаются границы для внутреннего цикла, который будет выводить символы матрицы
aв консоль. - Внутренний цикл перебирает строки матрицы
a. - Внешний цикл перебирает столбцы матрицы
a. - Каждая итерация внутреннего цикла выводит символ из матрицы
aв консоль. - В конце программы выводится итоговая матрица
a.