Дана квадратная матрица порядка 7, заполнить массив по спирали- Pascal(Паскаль)

uses crt;
const n=7;
var a:array[1..n,1..n]of integer;
    b:array[1..n*n] of integer;
    i,j:byte;
    x,y,num,add,dir:integer;
begin
clrscr;
writeln('Maтрица:');
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    a[i,j]:=random(50);
    write(a[i,j]:4);
   end;
  writeln;
 end;
x:=0;//слева от матрицы
y:=1;//в первой строке
num:=1;//первый номер массива
Add:=n;//длина пути в одном направленит
dir:=1;//знак, вправо и вниз +1, иначе -1
while (add<>0) do//пока есть ходы
begin
  i:=0;
  while (i<>add) do//вправо-влево
    begin
    x:=x+dir;
    b[num]:=a[y,x];
    num:=num+1;
    i:=i+1;
    end;
  i:=0;
  add:=add-1;//путь меньше на 1
  while (i<>add) do//вниз-вверх
    begin
    y:=y+dir;
    b[num]:=a[y,x];
    num:=num+1;
    i:=i+1;
    end;
  dir:=dir*(-1);//после двух отрезков меняем направление
end;
writeln('Massiv:');
for i:=1 to n*n do
write(b[i],' ');
readln
end.

Leave a Comment

2 + 2 =