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

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

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