На бесконечном поле имеется стена, состоящая из двух горизонтальных и одного вертикального участков, примерная форма которой представлена на рисунке. Длины участков неизвестны. Робот находится в клетке под левой горизонтальной частью стены. На рисунке указан один из возможных вариантов расположения стены и Робота. Задача Робота — закрасить клетки, примыкающие сверху к горизонтальным участкам стены. Например, для приведённого выше рисунка Робот должен закрасить следующие клетки. Конечное расположение Робота может быть произвольным. Задача должна быть решена для стены, горизонтальные и вертикальный участки которой могут иметь любые размеры. Есть план действий Робота: 1) двигаться вверх до горизонтального участка стены; 2) двигаться влево под горизонтальным участком стены и сместиться на 1 клетку левее стены; 3) занять положение над горизонтальным участком стены; 4) закрасить клетки слева направо над горизонтальным участком стены; 5) спуститься вниз вдоль вертикального участка стены; 6) закрасить клетки слева направо над горизонтальным участком стены. Реализуйте этот план, составив алгоритм для Робота в среде КуМир.
Используем проверки Робота «сверху стена», «снизу стена» и «слева стена». Неизвестные длины заменяем циклами с условием: число повторений заранее неизвестно.
использовать Робот
алг
нач
нц пока сверху свободно
вверх
кц
нц пока сверху стена
влево
кц
вверх
вправо
нц пока снизу стена
закрасить
вправо
кц
вниз
нц пока слева стена
вниз
кц
вверх
нц пока снизу стена
закрасить
вправо
кц
кон
Первый цикл останавливает Робота непосредственно под левым горизонтальным участком. Второй доводит его до клетки левее начала участка: именно там сверху уже свободно. После команд «вверх; вправо» Робот оказывается над первой клеткой стены. Пока снизу стена, он закрашивает очередную клетку и переходит к следующей; после конца первого участка находится справа от него. Он делает шаг вниз, чтобы оказаться сбоку от вертикальной стены, затем идёт вниз, пока стена слева. Когда она заканчивается, Робот стоит ниже второго горизонтального участка; шаг вверх ставит его над этим участком. Последний цикл закрашивает все клетки над ним. Результат не зависит от длин участков.
Алгоритм последовательно закрашивает клетки над обоими горизонтальными участками стены при любых их длинах.
