Что проверяет задание
Задание 15 - короткий алгоритм для исполнителя Робот в среде Кумир. Робот стоит на клетчатом поле со стенами. Длины стен и положение Робота точно неизвестны. Нужно написать алгоритм, который закрашивает указанные клетки при любых допустимых размерах. Ответ - программа.
На сайте алгоритм можно написать в окне «Кумир · Робот» (кнопка с роботом на панели задания) и проверить на нескольких полях.
Команды Робота
Перемещения: вверх, вниз, влево, вправо - на одну клетку. Если на пути стена, Робот разбивается.
Закраска: закрасить - закрашивает клетку, в которой стоит Робот.
Проверки (условия):
сверху свободно,снизу свободно,слева свободно,справа свободно;клетка закрашена,клетка чистая.
Условия можно соединять словами и, или, не.
Конструкции языка
Цикл «пока»:
нц пока справа свободно
вправо
кц
Ветвление:
если снизу свободно то
вниз
иначе
вправо
все
Цикл с известным числом повторений:
нц 5 раз
вправо
кц
Вся программа:
использовать Робот
алг
нач
нц пока не снизу свободно
закрасить
вправо
кц
кон
Алгоритм для Робота
Общий приём: Робот идёт вдоль стены, пока стена есть, и закрашивает клетки по пути.
- Определите, вдоль какой стены и в какую сторону идти.
- Выберите условие цикла: «пока стена снизу» -
нц пока не снизу свободно; «пока впереди свободно» -нц пока справа свободно. - Решите, что делать в теле цикла: сначала закрасить, потом шагнуть, или наоборот. Проверьте крайние клетки: первую и последнюю - закрашиваются ли они.
- Если стен несколько (угол, коридор), разбейте путь на части и напишите цикл для каждой части.
- Проверьте алгоритм на поле с длиной стены 1 и на большом поле.
Если нужно закрасить клетки, которые граничат с двумя стенами сразу (коридор), используйте ветвление внутри цикла:
нц пока справа свободно
если не сверху свободно и не снизу свободно то
закрасить
все
вправо
кц
Разбор задачи из демоварианта
Задача. На бесконечном поле имеется лестница. Сначала лестница направлена вверх, затем вниз. Высота подъёма и высота спуска неизвестны. Высота и ширина каждой ступени - одна клетка. Робот находится на нижней ступеньке на левом краю лестницы. Напишите для Робота алгоритм, закрашивающий все клетки, расположенные на ступенях лестницы.
Решение.
- На подъёме справа от Робота стена - вертикальная часть следующей ступени. Пока стена справа: закрашиваем клетку, шагаем вверх и вправо - Робот оказывается на следующей ступени.
- На верхней ступени справа стены нет - цикл заканчивается. Верхнюю клетку закрашиваем отдельно и переходим на первую ступень спуска: вправо и вниз.
- На спуске слева от Робота стена - вертикальная часть ступени, с которой он сошёл. Пока стена слева: закрашиваем, шагаем вправо и вниз.
- После последней ступени слева стены нет - алгоритм заканчивается.
использовать Робот
алг
нач
нц пока не справа свободно
закрасить
вверх
вправо
кц
закрасить
вправо
вниз
нц пока не слева свободно
закрасить
вправо
вниз
кц
кон
Проверьте лестницу из одной ступени вверх и одной вниз: обе клетки и вершина должны закраситься, и Робот не должен врезаться в стену.
Типичные ошибки
- Последняя клетка не закрашена: цикл кончился раньше, чем Робот её закрасил.
- Робот врезается в стену при повороте за угол.
- Алгоритм работает только для поля с рисунка (например,
нц 5 развместо цикла «пока»).
