Обход по стенам
Робот обходит периметр прямоугольной области, закрашивая все клетки вдоль стен по часовой стрелке. Пример знакомит с циклом нц пока ... кц и проверкой стен.
Идея алгоритма
- Двигаемся вправо, пока справа свободно, закрашивая каждую клетку
- Упёрлись в стену -- поворачиваем и двигаемся вниз
- Упёрлись -- двигаемся влево
- Упёрлись -- двигаемся вверх
- В итоге Робот обходит весь периметр и возвращается в исходную точку
Разбор
Подключение исполнителя
использовать Робот
Команда использовать Робот делает доступными все команды перемещения, закрашивания и проверки стен.
Движение вдоль каждой стороны
Программа состоит из четырёх одинаковых по структуре циклов -- по одному на каждую сторону прямоугольника.
Правая сторона:
нц пока справа свободно
вправо
закрасить
кц
справа свободно-- логическое выражение, которое истинно, если справа от Робота нет стенынц пока ... кц-- цикл с условием: тело выполняется, пока условие истинно- Робот шагает вправо и закрашивает клетку на каждом шаге
- Как только справа окажется стена, цикл завершится
Нижняя сторона:
нц пока снизу свободно
вниз
закрасить
кц
Аналогично: Робот спускается вниз, пока не встретит стену.
Левая и верхняя стороны:
нц пока слева свободно
влево
закрасить
кц
нц пока сверху свободно
вверх
закрасить
кц
Робот продолжает обход, двигаясь влево, а затем вверх. Четыре цикла вместе образуют полный обход периметра по часовой стрелке.
Команды проверки стен:
справа свободно-- нет стены справаслева свободно-- нет стены слевасверху свободно-- нет стены сверхуснизу свободно-- нет стены снизу
Полная программа
использовать Робот
алг обход_стен
нач
| Идём вдоль стены пока можем
нц пока справа свободно
вправо
закрасить
кц
нц пока снизу свободно
вниз
закрасить
кц
нц пока слева свободно
влево
закрасить
кц
нц пока сверху свободно
вверх
закрасить
кц
кон