Примеры алгоритмических конструкций при работе с Роботом в программе «КуМир»
1. Линейная конструкция (следование)
Задача: закрасить 3 клетки по прямой линии.
использовать Робот
алг ПрямаяЛиния
нач
закрасить
вправо
закрасить
вправо
закрасить
кон
Пояснение: команды выполняются строго последовательно — Робот закрашивает текущую клетку, двигается вправо, снова закрашивает и т. д.
2. Ветвление (разветвляющаяся конструкция)
Задача: если справа свободно, то двигаться вправо и закрасить клетку, иначе просто закрасить текущую клетку.
использовать Робот
алг УсловноеДвижение
нач
если справа свободно
то вправо
закрасить
иначе закрасить
все
кон
Пояснение: конструкция если... то... иначе... все позволяет Роботу принимать решения в зависимости от обстановки.
3. Цикл с заданным числом повторений
Задача: нарисовать горизонтальную линию из 5 закрашенных клеток.
использовать Робот
алг ЛинияИзПятиКлеток
нач
нц 5 раз
закрасить
вправо
кц
кон
Пояснение: цикл нц ... раз ... кц повторяет действия заданное число раз. Робот 5 раз закрашивает клетку и двигается вправо.
4. Цикл с предусловием
Задача: двигаться вправо, пока справа свободно, закрашивая каждую клетку.
использовать Робот
алг ДвижениеДоСтены
нач
нц пока справа свободно
закрасить
вправо
кц
закрасить // закрашиваем последнюю клетку
кон
Пояснение: цикл нц пока ... кц выполняется, пока условие истинно. Робот останавливается, когда справа оказывается стена.
5. Цикл с постусловием
Задача: двигаться вниз, пока снизу есть свободное пространство, но сделать минимум один шаг.
использовать Робот
алг МинимумОдинШаг
нач
нц
вниз
закрасить
кц_при не снизу свободно
кон
Пояснение: конструкция нц ... кц_при гарантирует выполнение тела цикла хотя бы один раз, затем проверяет условие выхода.
6. Вложенные циклы
Задача: создать квадрат 3×3 из закрашенных клеток.
использовать Робот
алг Квадрат3x3
нач
цел i, j
нц для i от 1 до 3
нц для j от 1 до 3
закрасить
вправо
кц
вниз
влево
влево
влево // возвращаемся в начало строки
кц
кон
Пояснение: внутренний цикл рисует одну строку, внешний — повторяет это 3 раза, перемещая Робота на следующую строку.
7. Комбинированная конструкция (ветвление внутри цикла)
Задача: двигаться вправо до стены, обходя препятствия (если снизу свободно — спускаться, если сверху — подниматься).
использовать Робот
алг ОбходПрепятствий
нач
нц пока справа свободно
если снизу свободно
то вниз
иначе если сверху свободно
то вверх
все
вправо
закрасить
кц
кон
Пояснение: внутри цикла проверяется несколько условий, что позволяет Роботу адаптироваться к обстановке.
8. Использование логических операций в условиях
Задача: двигаться вправо, только если справа свободно и клетка не закрашена.
использовать Робот
алг БезопасноеДвижение
нач
нц пока справа свободно и не клетка закрашена
вправо
закрасить
кц
кон
Пояснение: условие содержит логическую операцию и, что позволяет проверять сразу два критерия.
Краткие выводы
Ключевые особенности работы с алгоритмическими конструкциями в «КуМире»:
- Линейные алгоритмы подходят для простых задач с фиксированным набором действий.
- Ветвления (
если... то... иначе... все) позволяют учитывать разные сценарии. - Циклы с параметром (
нц N раз ... кц) удобны, когда известно число повторений. - Циклы с условием (
нц пока ... кц,нц ... кц_при) адаптируются к обстановке. - Вложенные циклы решают задачи с двумерной структурой (например, рисование фигур).
- Логические операции (
и,или,не) расширяют возможности проверки условий.
Практическая работа
Задача №1
На бесконечном поле есть горизонтальная и вертикальная стены. Левый конец горизонтальной стены соединён с верхним концом вертикальной стены. Длины стен неизвестны. В каждой стене есть ровно один проход, точное место прохода и его ширина неизвестны. Робот находится в клетке, расположенной непосредственно под горизонтальной стеной у её правого конца. На рисунке указан один из возможных способов расположения стен и Робота (Робот обозначен буквой «Р»). Напишите для Робота алгоритм, закрашивающий все клетки, расположенные непосредственно ниже горизонтальной стены и правее вертикальной стены. Проходы должны остаться не закрашенными. Робот должен закрасить только клетки, удовлетворяющие данному условию. Например, для приведённого рисунка Робот должен закрасить следующие клетки (см. рис.). При исполнении алгоритма Робот не должен разрушиться, выполнение алгоритма должно завершиться. Конечное расположение Робота может быть произвольным. Алгоритм должен решать задачу для любого допустимого расположения стен и любого расположения и размера проходов внутри стен.
Решение
Откроем среду программирования — Кумир. Нас встретит следующий интерфейс программы. Нам необходимо создать такую же обстановку робота и написать программу, чтобы он успешно прошёл путь и закрасил нужные клетки.
Для начала нам необходимо создать стартовую обстановку (поле для нашего робота), как на примере из задания. Зайдём во вкладку “Робот” → “Новая обстановка”.
Далее укажем необходимое количество строк и столбцов, предварительно посчитав сколько их в образце. После того, как записали нужное количество, нажимаем “ОК”.
После этого необходимо расставить “стены” как на примере (точно так же). Для построения стены просто нажимаем на линию, где хотим построить стену. На кнопки “плюс” и “минус” также можно управлять размерами обстановки.
Также установим начальное положение робота как на образце, для этого перетащим его. После создания стен нажимаем “Робот” → “Редактировать обстановку” (чтобы перестать её редактировать, т.к. уже находимся в режиме редактирования).
Теперь можем уже создавать алгоритм. Выберем исполнителя Робот. Зайдём во вкладку “Вставка” и нажмём на “использовать Робот”. После этого Кумир начнёт воспринимать его команды. Команду можно написать и самостоятельно.
Все наши команды должны быть оформлены через циклы. Без них задание считается проваленным (0 баллов). Поэтому будем использовать циклы. Пройдём первую часть, воспользуясь циклом:
Пройдём пробел за счёт цикла:
Далее воспользуемся ещё одним циклом:
Продолжим следующим циклом:
Теперь снова нужно пройти пробел:
Осталось закончить алгоритм, закрасив оставшуюся часть:
Выполните задание.
На бесконечном поле имеются две вертикальные стены и одна горизонтальная, соединяющая нижний конец правой и верхний конец левой вертикальных стен. Длины стен неизвестны. Робот находится в клетке, расположенной слева от верхнего края правой вертикальной стены, рядом со стеной.На рисунке указан один из возможных способов расположения стен и Робота (Робот обозначен буквой «Р»).
Напишите для Робота алгоритм, закрашивающий все клетки, примыкающие к вертикальным стенам справа. Робот должен закрасить только клетки, удовлетворяющие данному условию. Например, для приведенного выше рисунка Робот должен закрасить следующие клетки (см. рис.).
При исполнении алгоритма Робот не должен разрушиться, выполнение алгоритма должно завершиться. Конечное расположение Робота может быть произвольным. Алгоритм должен решать задачу для любого допустимого расположения стен. Алгоритм может быть выполнен в среде формального исполнителя или записан в текстовом редакторе.