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.