Вывести на экран компьютера маршрут движения робота - Turbo Pascal
Формулировка задачи:
Петя вместе со своим другом Пашей решили создать программу для урока информатики по теме "Моделирование". За основу работы они решили взять алгоритм работы робота, шагающего по прямоугольному полю размером m*n по следующему маршруту:
1 2 6 7 ...
3 5 8 ...
4 9 ...
10 ...
...
Напишите программу, выводящую на экран компьютера маршрут движения робота, если каждый свой шаг робот обозначает порядковым числом, начиная с 1 в верхнем левом углу. Размеры поля не превышают 50х50.
Решение задачи: «Вывести на экран компьютера маршрут движения робота»
textual
Листинг программы
var n, m, c, i, j :longint; a :array[1 .. 100, 1 .. 100] of longint; procedure go(x, y, f :longint); begin c := c + 1; a[x][y] := c; if (x <> n) or (y <> m) then begin if (f = 0) then begin if (x - 1 = 0) then go(x, y + 1, 1) else if (y + 1 > m) then go(x + 1, y, 1) else go(x - 1, y + 1, 0); end; if (f = 1) then begin if (x + 1 > n) then go(x, y + 1, 0) else if (y - 1 = 0) then go(x + 1, y, 0) else go(x + 1, y - 1, 1); end; end; end; begin read(n, m); go(1, 1, 0); for i := 1 to n do begin for j := 1 to m do write(a[i][j], ' '); writeln; end; end.
Объяснение кода листинга программы
- Переменные
n
,m
иc
инициализируются значением 0. - В процедуре
go
переменныеx
,y
иf
инициализируются значениями 1, 1 и 0 соответственно. - Переменная
c
увеличивается на 1. - Если
x
не равноn
иy
не равноm
, то выполняется условный блок. - Если
f
равно 0, то выполняются следующие действия:- Если
x
равно 1 иy
равно 1, то вызывается процедураgo
с аргументамиx
,y
и 1. - Если
x
равно 0 иy
не равноm
, то вызывается процедураgo
с аргументамиx+1
,y
и 1. - Если
x
равно 0 иy
равно 0, то вызывается процедураgo
с аргументамиx+1
,y
и 0. - Если
x
равно 0 иy
не равно 0, то вызывается процедураgo
с аргументамиx-1
,y
и 0.
- Если
- Если
f
равно 1, то выполняются следующие действия:- Если
x
равно 1 иy
равно 0, то вызывается процедураgo
с аргументамиx
,y
и 0. - Если
x
равно 0 иy
равно 1, то вызывается процедураgo
с аргументамиx+1
,y
и 0. - Если
x
равно 0 иy
равно 0, то вызывается процедураgo
с аргументамиx+1
,y
и 1. - Если
x
равно 0 иy
равно 2, то вызывается процедураgo
с аргументамиx+1
,y-1
и 1.
- Если
- Выводится значение переменной
a[i][j]
. - Выполняется цикл
for
, который проходит по всем элементам массиваa
. - После завершения цикла выводится символ пробела и переход на новую строку.