Влево
кц
Р | |||||||||
| Двигаемся вверх, пока не дойдём до прохода в стене, и закрашиваем клетки
Нц пока не слева свободно
Закрасить
Вверх
кц
Р | |||||||||
| Двигаемся дальше до вертикальной стены
|
|
Нц пока слева свободно
Вверх
кц
Р | |||||||||
| Двигаемся вверх до конца стены и закрашиваем клетки
Нц пока не слева свободно
Закрасить
Вверх
кц
Р | |||||||||
| Обходим стену
Влево
Вниз
Р | |||||||||
| Двигаемся вниз, пока не дойдём до прохода в стене, и закрашиваем клетки
|
|
Нц пока не справа свободно
Закрасить
Вниз
кц
Р | |||||||||
| Двигаемся дальше до вертикальной стены
Нц пока справа свободно
Вниз
кц
Р | |||||||||
| Двигаемся вниз до конца стены и закрашиваем клетки
Нц пока не справа свободно
Закрасить
Вниз
кц
Р | |||||||||
Следует проверить универсальность составленного алгоритма, протестировав его в других условиях среды, удовлетворяющих тексту задания, например:
Р | |||||||||
Р | |||||||||
Возможны и другие верные варианты решения.
Задача 2:
На поле Робота существует вертикальная галерея шириной в одну клетку. Длина галереи неизвестна. Боковые выходы неизвестной ширины располагаются произвольно по всей длине галереи. Галерея начинается и заканчивается тупиком. Робот расположен где-то внутри галереи, начальная позиция Робота неизвестна.
На рисунке указан один из возможных вариантов галереи и расположения Робота (Робот обозначен буквой «Р»).
Р | ||||
Напишите алгоритм, закрашивающий клетки галереи, ограниченные не менее чем двумя стенами. Требуется закрасить только клетки, удовлетворяющие данному условию. Например, для приведённого выше рисунка Робот должен закрасить следующие клетки (см. рисунок):
|
|
Конечное расположение Робота может быть произвольным. Алгоритм должен решать задачу для произвольного размера галереи и любого допустимого расположения и размера выходов из галереи. При исполнении алгоритма Робот не должен разрушиться, выполнение алгоритма должно завершиться. Алгоритм может быть выполнен в среде формального исполнителя или записан в текстовом редакторе.
Решение:
| Двигаемся в начальную позицию – нижнюю клетку галереи
Нц пока снизу свободно
Вниз
кц
Необходимо закрасить клетки галереи, ограниченные не менее чем двумя стенами, т.е. двумя, тремя или четырьмя стенами (такое возможно, если длина галереи - одна клетка).
Отдельно обрабатываем нижнюю клетку галереи, у которой уже есть одна стена – нижняя. Для того, чтобы она стала закрашенной, достаточно еще хотя бы одной стены – правой или левой или верхней (если длина галереи - одна клетка). Используем команду условия если, применяя сложное условие с логической связкой или: (не справа свободно) или (не слева свободно) или (не сверху свободно). Если это условие будет выполнено, то нижняя клетка галереи будет закрашена.
| Отдельно обрабатываем нижнюю клетку галереи