Вопрос:

10. На бесконечном поле имеется вертикальная стена. Длина стены неизвестна. От нижнего конца стены вправо отходит горизонтальная стена неизвестной длины. Робот находится в клетке, расположенной сверху от правого края горизонтальной стены. На рисунке указано расположение стен и Робота. Робот обозначен буквой «Р». Напишите для Робота программу, использующую 2 циклических алгоритма, закрашивающую все клетки, расположенные непосредственно справа от вертикальной стены и сверху от горизонтальной стены. Вы можете использовать цикл нц-раз-кц или нц-пока-кц. Робот должен закрасить только клетки, удовлетворяющие данному условию. На рисунке показаны клетки, которые Робот должен закрасить (см. рисунок). Конечное расположение Робота может быть произвольным. При исполнении алгоритма Робот не должен разрушиться. Выполнение алгоритма должно завершиться. Алгоритм может быть выполнен исполнителем или записан в текстовом редакторе.

Ответ:

Робот должен закрасить клетки, расположенные справа от вертикальной стены и сверху от горизонтальной стены. Представим, что вертикальная стена идет вверх от начала координат, а горизонтальная – вправо от начала координат. Робот находится в позиции (1, 1).

Алгоритм:

Цикл 1: Закрашивание клеток справа от вертикальной стены.

Мы будем двигаться вправо, пока не упремся в вертикальную стену.

нц пока не стена справа
вправо
если не стена справа то
закрасить
иначе
остаться на месте
конец если
кц

Цикл 2: Закрашивание клеток сверху от горизонтальной стены.

После завершения первого цикла, робот находится либо на клетке, примыкающей к стене справа, либо перед ней. Теперь нужно двигаться вверх, пока не упремся в горизонтальную стену.

нц пока не стена сверху
вверх
если не стена сверху то
закрасить
иначе
остаться на месте
конец если
кц

Примечание:

Эта программа предполагает, что Робот может определить наличие стены в любом направлении. Также, для корректной работы, начальное положение Робота должно быть таким, чтобы он не начал закрашивать клетки, которые не должны быть закрашены.

Если использовать команды `нц-раз-кц`:

нц раз 5 (допустим, что максимальная ширина поля 5 клеток)
вправо
закрасить
кц

нц раз 5 (допустим, что максимальная высота поля 5 клеток)
вверх
закрасить
кц

Это упрощенный вариант, который может закрасить лишние клетки, если размеры поля или расположение стен неизвестны.

Более точный вариант с `нц-пока-кц`:

нц пока не стена справа
вправо
закрасить
кц

нц пока не стена сверху
вверх
закрасить
кц

Ответ:

Программа для Робота:

нц пока не стена справа
вправо
закрасить
кц

нц пока не стена сверху
вверх
закрасить
кц