Дана матрица 4х4, заполненная случайными числами. Сформировать одномерный массив из элементов матрицы, расположенных по спирали, начиная с первого элемента матрицы- Pascal(Паскаль)

uses crt;
const n=4;
var a:array[1..n,1..n]of byte;
    b:array[1..n*n] of byte;
    i,j,x,y,num,add,dir:byte;
begin
clrscr;
randomize;
writeln('Matrica:');
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;//знак направления(+,-)
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;//меняем знак
  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 = 5