Помогите с паскалем
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.
