Исполнитель Чертёжник перемещается на координатной плоскости, оставляя след в виде линии. Чертёжник может выполнять команду сместиться на (a, b), где a, b – целые числа. Эта команда перемещает Чертёжника из точки с координатами (x, y) в точку с координатами (x + a, y + b). Например, если Чертёжник находится в точке с координатами (4, 2), то команда сместиться на (2, —3) переместит Чертёжника в точку (6, —1).
Цикл
ПОВТОРИ число РАЗ
последовательность команд
КОНЕЦ ПОВТОРИ
означает, что последовательность команд будет выполнена указанное число раз (число должно быть натуральным).
Чертёжнику был дан для исполнения следующий алгоритм (количество повторений и смещения в первой из повторяемых команд неизвестны):
НАЧАЛО
сместиться на (—1, 4)
ПОВТОРИ… РАЗ
сместиться на (…, …)
сместиться на (—1, —2)
КОНЕЦ ПОВТОРИ
сместиться на (—23, —12)
КОНЕЦ
После выполнения этого алгоритма Чертёжник возвращается в исходную точку. Какое наибольшее число повторений могло быть указано в конструкции «ПОВТОРИ… РАЗ»?
Решение:
Будем считать, что Чертёжник находится в начале координат. После выполнения команды сместиться на (—1, 4) Чертёжник окажется в точке с координатами (—1, 4). После выполнения цикла Чертёжник переместится, по оси икс Чертёжник сместится на -1+n (-1+x) -23 и по игреку на 4+n (-2+y) -12, где n, x, y – неизвестные. В результате последнего перемещения Чертёжник должен переместиться в начало координат, то есть:
– 1+n (-1+x) -23=0 и 4+n (-2+y) -12=0
В первом и втором уравнении перенесем цифры в правую часть и получим 1+23=24 и 12—8=8. Остается только найти наибольший общий делитель чисел 24 и 8. Это число 8.
Ответ: 8.
Пример 5.4
Исполнитель Робот существует в лабиринте – поле, представленном в виде квадрата 6х6. Робот имеет две команды: влево и вниз, вверх, вниз, которые перемещают его на клетку влево или вниз соответственно. При попытке выхода за границы лабиринта или столкновения со стеной Робот разрушается.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
В конструкции
ЕСЛИ условие
ТО команда1
ИНАЧЕ команда2
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно) или команда2 (если условие ложно).
Сколько клеток лабиринта соответствуют требованию, что, начав движение в ней и выполнив предложенную программу, РОБОТ уцелеет и закончит работу в клетке начала движения?
НАЧАЛО
ПОКА <снизу свободно>
вниз
КОНЕЦ ПОКА
ПОКА <слева свободно>
влево
КОНЕЦ ПОКА
ПОКА <сверху свободно>
вверх
КОНЕЦ ПОКА
ПОКА <справа свободно>
вправо
КОНЕЦ ПОКА
КОНЕЦ
Решение:
1) Заметим, что в общем случае Робот идет сначала до стены вниз, затем влево, потом вверх и заканчивает маршрут движением вверх, до стены.
Один из главных приёмов в решении этой задачи – проверять клетки группами, а не по одной.
Проверим почти все клетки Робота на предмет того, подходит ли алгоритм:
– A6 – маршрут вниз-вверх – подходит;
– F6 – маршрут влево-вправо – подходит;