Помогите с паскалем

uses crt;

var
  Y, I, a, g, Xmin, X, Xmax, N: integer;

procedure F;
begin
  Delay(100);       
  if I > 9 then I := 0; 
  TextColor(I + 1);   
  GotoXY(X * 2, Y); 
  Write(I);      
  I := I + 1
end;


  begin
  read(N);
  clrscr();
  Xmin := 1; Xmax := N; Y:=1;  
  for X := Xmin to     Xmax do F; Y:= Y + 1;  
  for X := Xmax downto Xmin do F; Y:= Y + 1;
  read(a);
end.

Заполнить квадрат n на n змейкой цифрами от 0 до 9 (циклически). По горизонтали я смог задать размер, а по вертикали не знаю.


Ответы (2 шт):

Автор решения: Sergey

использовать двумерный массив и два вложенных цикла - один для горизонтальных движений и один для вертикальных думаю как то так:

program SnakeMatrix;
uses crt;

var
  n, i, j, num: integer;
  matrix: array of array of integer;

begin
  writeln('Enter the size n for the square matrix: ');
  readln(n);

SetLength(matrix, n, n);

num := 0;
for i := 0 to n - 1 do
begin
  if i mod 2 = 0 then
  begin
    for j := 0 to n - 1 do
    begin
      matrix[i][j] := num mod 10;
      num := num + 1;
    end;
  end
  else
  begin
    for j := n - 1 downto 0 do
    begin
      matrix[i][j] := num mod 10;
      num := num + 1;
    end;
  end;
end;

clrscr;
for i := 0 to n - 1 do
begin
  for j := 0 to n - 1 do
    write(matrix[i][j], ' ');
  writeln;
end;

readln;
end.
→ Ссылка
Автор решения: Алексей Р

Близко к оригиналу. Комментарии в коде.

uses crt;

var
  N, I, X, Y, inc: integer;

procedure F(I, X, Y: integer);
begin
  Delay(100);       
  TextColor(I + 1);   
  GotoXY((X + 1) * 2, Y + 1); // добавил смещение +1 к Х и к У, иначе "кривой" вывод
  Write(I);
end;

begin
  read(N);
  clrscr();
  I := 0; X := 0; Y := 0;
  inc := 1;               // направление изменения X - сначала 1 (слева направо), затем чередуем, меняя знак (см. ниже)
  for a: integer := 1 to N * N do
  begin
    F(I, X, Y);           // вывод; передаем в процедуру аргументы, чтобы не использовать глобальные переменные
    I := (I + 1) mod 10;  // циклическое изменение I: 0..9-0..9
    X += inc;             // изменяем координату X в соответствии с направлением  
    if (X > N - 1) or (X < 0) then 
    begin
      inc := -inc;        // если дошли до края (слева или справа) квадрата, то меняем направление 
      X += inc;           // корректируем координату после смены направления
      Y += 1;             // переходим на следующую строку
    end
  end;
  Writeln();
end.

введите сюда описание изображения

→ Ссылка