uses crt;
const NMax = 30;
MMax = 30;
type MyMatrix=array[1..NMax, 1..MMax]of integer;
var a: MyMatrix;
n, m : integer;
procedure Print(a : MyMatrix; N, M : integer); {выводит массив A(N,M)}
var i, j : integer;
begin
for i := 1 to N do
begin
for j := 1 to M do Write(a[i,j]:4);
Writeln;
end;
Writeln;
end;
procedure Fill(var a : MyMatrix; N, M : integer); {заполняет массив A(N,M) случайными числами от 1 до 1000}
var i, j : integer;
begin
for i := 1 to N do for j := 1 to M do a[i,j] := 1 + random(1000);
end;
procedure PrintSpiral (a : MyMatrix; N, M : integer);
var i, j, ii_d, ii_u, jj_d, jj_u, k: integer;
begin
ii_d := 1;
ii_u := N;
jj_d := 1;
jj_u := M;
k := N*M;
while (k > 0) and (abs(ii_d - ii_u) >= 0) and (abs(jj_u - jj_d) >= 0) do
begin
if k > 0 then for j := jj_d to jj_u do write(a[ii_d,j]:4);
inc(ii_d);
k := k - (jj_u - jj_d + 1);
if k > 0 then for i := ii_d to ii_u do write(a[i,jj_u]:4);
dec(jj_u);
k := k - (ii_u - ii_d + 1);
if k > 0 then for j := jj_u downto jj_d do write(a[ii_u,j]:4);
dec(ii_u);
k := k - (jj_u - jj_d + 1);
if k > 0 then for i := ii_u downto ii_d do write(a[i,jj_d]:4);
inc(jj_d);
k := k - (ii_u - ii_d + 1);
end;
end;
begin
clrscr;
N := 4;
M := 7;
Fill(a, N, M);
Print(a, N, M);
PrintSpiral(a, N, M);
writeln;
end.