Заполнить спираль размерность 10 на 10,из нижнего левого в право — Pascal(Паскаль)

program Zmeyka;
type
   TCountMatr = 1..100;
const
   x = 0;
   y = 1;
type
   TCount = Low(TCountMatr)*Low(TCountMatr)..High(TCountMatr)*High(TCountMatr);
   TVect = array [TCountMatr] of Integer;
   TMatr = array [TCountMatr] of TVect;
   TNapravlenie1 = (n1Pravo, n1Niz, n1Levo, n1Verh);
   TNapravlenie2 = (n2PravoVerh, n2LevoNiz, n2Pravo, n2Niz);
   TVector = array [x..y] of Integer;
const
   VECTOR_1: array [TNapravlenie1] of TVector = ((1, 0), (0, 1), (-1, 0), (0, -1));
   VECTOR_2: array [TNapravlenie2] of TVector = ((1, -1), (-1, 1), (1, 0), (0, 1));
 
var
   RowCount, ColCount: TCountMatr;
   Row, Col: TCountMatr;
   Count: TCount;
   i, j: Integer;
   M1, M2: TMatr;
   N1: TNapravlenie1;
   N2: TNapravlenie2;
   MaxLen: Integer;
   sCount: String;
 
procedure NextNapravlenie1;
begin
   if N1 = High (TNapravlenie1) then
      N1 := Low (TNapravlenie1)
   else
      Inc (N1);
end;
 
procedure NextNapravlenie2;
begin
   case N2 of n2PravoVerh:
   begin
      if Col = ColCount then
         N2 := n2Niz
      else
         if Row = Low(Row) then
            N2 := n2Pravo;
   end;
   n2LevoNiz:
   begin
      if Row = RowCount then
         N2 := n2Pravo
      else
         if Col = Low(Col) then
            N2 := n2Niz;
   end;
   n2Pravo:
   begin
      if Row = RowCount then
         N2 := n2PravoVerh
      else
         N2 := n2LevoNiz;
   end;
   n2Niz:
   begin
      if Col = ColCount then
         N2 := n2LevoNiz
      else
         N2 := n2PravoVerh;
   end;
   end;
end;
 
function NextRow1: TCountMatr;
begin
   NextRow1 := Row + VECTOR_1 [N1, y];
end;
 
function NextCol1: TCountMatr;
begin
   NextCol1 := Col + VECTOR_1 [N1, x];
end;
 
function NextRow2: TCountMatr;
begin
  NextRow2 := Row + VECTOR_2 [N2, y];
end;
 
function NextCol2: TCountMatr;
begin
  NextCol2 := Col + VECTOR_2 [N2, x];
end;
 
begin
   write ('Kol-vo strok: ');
   readln (RowCount);
   write ('Kol-vo stolbcov: ');
   readln (ColCount);
   for i := Low(RowCount) to High(RowCount) do
      for j := Low(ColCount) to High(ColCount) do
      begin
         M1 [j, i] := 0;
         M2 [j, i] := 0;
      end;
 
   Count := RowCount * ColCount;
   Str (Count, sCount);
   MaxLen := Length (sCount);
   Row := Low (Row);
   Col := Low (Col);
   N1 := Low (N1);
   for i := Low (TCount) to Count do
   begin
      M1 [Col, Row] := i;
      if (NextRow1 < Low (RowCount)) or (NextRow1 > RowCount) or
       (NextCol1 < Low (ColCount)) or (NextCol1 > ColCount) or
       (M1 [NextCol1, NextRow1] <> 0) then
      begin
         NextNapravlenie1;
      end;
      Row := NextRow1;
      Col := NextCol1;
   end;
   Row := Low (Row);
   Col := Low (Col);
   N2 := Low (N2);
   for i := Low (TCount) to Count do
   begin
      M2 [Col, Row] := i;
      NextNapravlenie2;
      Row := NextRow2;
      Col := NextCol2;
   end;
   writeln ('sIIupaJIb');
   for i := Low(RowCount) to RowCount do
   begin
      for j := Low(ColCount) to ColCount do
      begin
         write (M1 [j, i]:MaxLen, ' ');
      end;
      writeln;
   end;
   writeln;
   writeln ('zigzag');
   for i := Low(RowCount) to RowCount do
   begin
      for j := Low(ColCount) to ColCount do
      begin
         write (M2 [j, i]:MaxLen, ' ');
      end;
   writeln;
   end;
   readln;
end.

Leave a Comment

+ 45 = 53