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