Обход массива змейкой, по спирали — Pascal(Паскаль)

1 2 3
6 5 4
7 8 9
type
  arr = array[0..100,0..100] of Integer;
 
procedure FillCharArr(a: arr; m1, n1: Integer);
var
  i, j: Integer;
begin
  for i := 0 to m1 do
    for j := 0 to n1 do
      a[i, j] := 0;
end;
 
procedure Print(a: arr; m1, n1: Integer);
var
  i, j: Integer;
begin
  for i := 0 to m1 do
  begin
    for j := 0 to n1 do
      Write(a[i, j]: 3);
    Writeln;
  end;
end;
 
var
  a: arr;
  dx, dy: array[0..3] of Integer;
  x, y, i, k, m, n, d: Integer;
begin
  dx[0] := 1; dx[1] := 0; dx[2] := -1; dx[3] := 0;
  dy[0] := 0; dy[1] := 1; dy[2] := 0; dy[3] := -1;
  Readln(m, n);
  d := 0; x := 0;
  y := 0; k := 1;
  FillCharArr(a, m, n);
  while (k <= (m + 1) * (n + 1)) do begin
    a[x, y] := k;
    x := x + dx[d]; y := y + dy[d];
    if (x + dx[d] > m) or (y + dy[d] > n) or (x + dx[d] < 0) or
       (y + dy[d] < 0) or (a[x + dx[d], y + dy[d]] <> 0) then 
          d := (d + 1) mod 4;
    k := k + 1;
  end;
  Print(a, m, n);
  Readln;
end.

Leave a Comment

+ 29 = 39