Задание №15 — Алгоритмы и программирование
Исполнитель Робот умеет перемещаться по лабиринту, начерченному на плоскости, разбитой на клетки. Между соседними (по сторонам) клетками может стоять стена, через которую Робот пройти не может.
У Робота есть девять команд. Четыре команды – это команды-приказы:
вверх вниз влево вправо
При выполнении любой из этих команд Робот перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Если Робот получит команду передвижения сквозь стену, то он разрушится.
Также у Робота есть команда закрасить,при которойзакрашивается клетка, в которой Робот находится в настоящий момент.
Ещё четыре команды – это команды проверки условий. Эти команды проверяют, свободен ли путь для Робота в каждом из четырёх возможных направлений:
сверху свободно снизу свободно слева свободно справа свободно
Эти команды можно использовать вместе с условием «eсли», имеющим следующий вид:
если условие то
последовательность команд
все
Здесь условие – одна из команд проверки условия.
Последовательность команд – это одна или несколько любых команд-приказов.
Например, для передвижения на одну клетку вправо, если справа нет стенки и закрашивания клетки, можно использовать такой алгоритм:
если справа свободно то
вправо
закрасить
все
В одном условии можно использовать несколько команд проверки условий, применяя логические связки и, или, не, например:
если (справа свободно) и (не снизу свободно) то
вправо
все
Для повторения последовательности команд можно использовать цикл «пока», имеющий следующий вид:
нц пока условие
последовательность команд
кц
Например, для движения вправо, пока это возможно, можно использовать следующий алгоритм:
нц пока справа свободно
вправо
кц
Выполните задание
Робот находится в левом верхнем углу огороженного пространства, имеющего форму прямоугольника. Размеры прямоугольника неизвестны. Один из возможных размеров прямоугольника и расположение Робота внутри прямоугольника приведено на рисунке (Робот обозначен буквой «Р»):


Напишите для Робота алгоритм, закрашивающий четыре угловые клетки прямоугольника. Робот должен закрасить только угловые клетки. Например, для приведённого выше рисунка Робот должен закрасить следующие клетки (см. рисунок):


Конечное расположение Робота может быть произвольным. Алгоритм должен решать задачу для произвольного размера поля. При исполнении алгоритма Робот не должен разрушиться, выполнение алгоритма должно завершиться.
Алгоритм может быть выполнен в среде формального исполнителя или записан в текстовом редакторе.
Сохраните алгоритм в формате программы Кумир или в текстовом файле. Название файла и каталог для сохранения Вам сообщат организаторы экзамена.
Проверка решения с помощью ИИ доступна авторизованным пользователям
Решение.
Для решения задачи нам необходимо последовательно переместить Робота во все четыре угла прямоугольника и закрасить их. Поскольку размеры прямоугольника неизвестны, мы будем использовать циклы пока, чтобы Робот двигался до тех пор, пока не встретит стену (границу прямоугольника).
Шаг 1: Закрашиваем первый угол (левый верхний).
По условию Робот уже находится в левом верхнем углу. Нам достаточно просто закрасить эту клетку.
закрасить
Шаг 2: Перемещаемся во второй угол (правый верхний) и закрашиваем его.
Робот должен двигаться вправо до упора. Используем цикл, который проверяет свободу пути справа. Когда Робот упрётся в стену, он остановится в угловой клетке.
нц пока справа свободно
вправо
кц
закрасить
Шаг 3: Перемещаемся в третий угол (правый нижний) и закрашиваем его.
Теперь из правого верхнего угла Робот должен спуститься вниз до самой нижней границы прямоугольника.
нц пока снизу свободно
вниз
кц
закрасить
Шаг 4: Перемещаемся в четвёртый угол (левый нижний) и закрашиваем его.
Находясь в правом нижнем углу, Робот должен проследовать влево до упора в стену.
нц пока слева свободно
влево
кц
закрасить
Итоговый алгоритм выглядит так:
закрасить
нц пока справа свободно
вправо
кц
закрасить
нц пока снизу свободно
вниз
кц
закрасить
нц пока слева свободно
влево
кц
закрасить
Ответ: закрасить нц пока справа свободно вправо кц закрасить нц пока снизу свободно вниз кц закрасить нц пока слева свободно влево кц закрасить
Источник: ФИПИ