Алгоритм: как остановиться на расстоянии одной клетки от стены |
Изучение данного алгоритма поможет Вам быстро решать целый класс задач, которые относят к сложным и даже олимпиадным. Алгоритм заключается в "запрыгивании" ( "заглядывании" ) на одну клетку вперед для проверки, нет ли там стены. Если стены нет, можно вернуться назад и выполнить вместо прыжка шаг. Если стена есть, возвращаться и делать шаг уже не нужно. Все эти действия помещаются в тело цикла. Перемещение в нужную клетку выполняется после завершения исполнения цикла. Алгоритм универсален и правильно работает при изменении размеров поля. |
Учебная задача |
||
Постановка задачи. |
Постановка задачи: Разработайте алгоритм перемещения из
точки А в точку Б по прямой с рисованием следа. Исходное
положение "Стрелочки": | Образец для воспроизведения рисунка: |
Решение задачи. | Решение задачи: Перемещение из А в Б без запрыгивания вперед привело бы к тому, что след Стрелочки завершится не в точке Б, а в клетке у стены. Будем использовать цикл ПОКА с проверкой условия "впереди НЕ стена". В теле цикла разместим команду ПРЫЖОК, а затем ВЕТВЛЕНИЕ с проверкой условия "впереди НЕ стена". На ветви ТО разместим два поворота, прыжок и снова два поворота. После этого мы окажемся в клетке, из которой начали движение в теле цикла. Выполним команду ШАГ. Этот шаг точно не приведет нас вплотную к стене, так как соответствующую проверку мы сделали. Ветвь ИНАЧЕ можно удалить (воспользуйтесь контекстным меню). На ветви ИНАЧЕ не стоит размещать никакие команды. Здесь легко можно допустить ошибку и получить зацикливание алгоритма. Сделав последний прыжок и "упершись носом в стену", Стрелочка закончит исполнение цикла. После этого можно вернуться в точку Б. | |
Исполнение алгоритма:
АЛГОРИТМ ПУТЬ_1 |
Представление алгоритма в виде блок-схемы:
|