Сформировать одномерный массив, получающийся при чтении квадратной матрицы по спирали, начиная с верхнего левого элемента (против часовой стрелки) — Pascal(Паскаль)

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.

Leave a Comment

13 + = 17