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.