Исполнитель Робот умеет перемещаться по лабиринту, начерченному на плоскости, разбитой на клетки. Между соседними (по сторонам) клетками может стоять стена, через которую Робот пройти не может. Робот находится в левом нижнем углу огороженного пространства, имеющего форму прямоугольника. Размеры прямоугольника неизвестны. Где-то посередине прямоугольника есть вертикальная стена, разделяющая прямоугольник на две части. В этой стене есть один проход, при этом проход не является самой верхней или самой нижней клеткой стены. Точное расположение прохода неизвестно.
Составьте алгоритм для Робота, перемещающий Робота в правый верхний угол прямоугольника.
При исполнении алгоритма Робот не должен разрушиться, выполнение алгоритма должно завершиться.
Шаблон программы (в каждое поле нужно выбрать команду или условие):
(три пустых поля)
нц пока (поле)
(поле)
кц
нц пока (поле)
(поле)
кц
нц пока (поле)
(поле)
кц
нц пока (поле)
(поле)
кц
нц пока (поле)
(поле)
кц
кон
Списки вариантов на фото не видны, поэтому названия команд и условий даны в обычной записи исполнителя Робот. Выбирайте в списках ближайшие по смыслу.
Идея: проход не в самой верхней клетке стены, поэтому, дойдя вправо по верхнему ряду, Робот упрётся в стену. Затем он спускается вдоль стены до прохода, проходит через него и поднимается в правый верхний угол.
Три первых поля (безопасные команды, которые не разрушат Робота: высота не меньше
- вверх
- вверх
- вниз
Циклы:
-
Подняться до верхней границы:
нц пока сверху свободно
вверх
кц -
Дойти по верхнему ряду до вертикальной стены (проход не в верхней клетке, значит, Робот упрётся в стену):
нц пока справа свободно
вправо
кц -
Спускаться, пока справа стена. Остановка в клетке прохода (проход не в нижней клетке, поэтому Робот до низа не дойдёт):
нц пока справа стена
вниз
кц -
Пройти через проход и дойти до правой границы:
нц пока справа свободно
вправо
кц -
Подняться до верхней границы, это правый верхний угол:
нц пока сверху свободно
вверх
кц
кон
Каждый цикл конечен, потому что поле ограничено. Робот ни разу не идёт в стену: перед каждым шагом условие это проверяет.
Цикл «нц пока условие … кц» выполняется, пока условие истинно. Условия «свободно» и «стена» проверяют клетку перед шагом, поэтому Робот не разрушается.
вверх
вверх
вниз
нц пока сверху свободно: вверх кц
нц пока справа свободно: вправо кц
нц пока справа стена: вниз кц
нц пока справа свободно: вправо кц
нц пока сверху свободно: вверх кц
кон
