Алгоритм: как остановиться на расстоянии одной клетки от стены

Изучение данного алгоритма поможет Вам быстро решать целый класс задач, которые относят к сложным и даже олимпиадным. Алгоритм заключается в "запрыгивании" ( "заглядывании" ) на одну клетку вперед для проверки, нет ли там стены. Если стены нет, можно вернуться назад и выполнить вместо прыжка шаг. Если стена есть, возвращаться и делать шаг уже не нужно. Все эти действия помещаются в тело цикла. Перемещение в нужную клетку выполняется после завершения исполнения цикла. Алгоритм универсален и правильно работает при изменении размеров поля.

Учебная задача

Постановка задачи.

Постановка задачи: Разработайте алгоритм перемещения из точки А в точку Б по прямой с рисованием следа.
Расстояние от А до Б заранее неизвестно. Но точно известно, что за точкой Б, на расстоянии одной клетки от неё, находится стенка. Воспользуйтесь этой стенкой для того, чтобы завершить перемещение именно в точке Б.

Исходное положение "Стрелочки":
- точка А;
- направление вправо.
Результат: "Стрелочка" в точке Б.

Образец для воспроизведения рисунка:

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

Исполнение алгоритма:

АЛГОРИТМ ПУТЬ_1
  Дано: Исполнитель в т.А
  Надо: Исполнитель в т.Б
НАЧ
   ПОКА впереди НЕ стена
      НЦ
         ПРЫЖОК
         ЕСЛИ впереди НЕ стена
            ТО
              ПОВОРОТ
              ПОВОРОТ
              ПРЫЖОК
              ПОВОРОТ
              ПОВОРОТ
         ВСЁ
      КЦ
         ПОВОРОТ
         ПОВОРОТ
         ПРЫЖОК
КОН
 

Представление алгоритма в виде блок-схемы: