КуМир

В этом разделе собраны уроки, в которых объясняется как работать с исполнителем Робот.

КуМир (Комплект Учебных МИРов) - система программирования, предназначенная для поддержки начальных курсов информатики и программирования в средней и высшей школе.

Бесплатно скачать КуМир для Windows можно на официальном сайте разработчика данного ПО, для этого пройдите по ссылке https://www.niisi.ru/kumir/dl.htm.

Теория

У любого исполнителя должна быть система команд (СКИсистема команд исполнителя). Система команд исполнителя — совокупность всех команд, которые может выполнить исполнитель. В качестве примера рассмотрим дрессированную собаку. Она умеет выполнять некоторые команды — «Сидеть», «Лежать», «Рядом» и т. п. Это и есть ее система команд.

Простые команды Робота

У нашего Робота тоже есть система команд. Сегодня мы рассмотрим простые команды Робота. Всего их 5:

  • вверх

  • вниз

  • влево

  • вправо

  • закрасить

Результат выполнения этих команд понятен из их названия:

  1. вверх — переместить Робота на одну клетку вверх

  2. вниз — переместить Робота на одну клетку вниз

  3. влево — переместить Робота на одну клетку влево

  4. вправо — переместить Робота на одну клетку вправо

  5. закрасить — закрасить текущую клетку (клетку в которой находится Робот).

Эти команды можно писать с клавиатуры, а можно использовать горячие клавиши (нажав их команды будут вставляться автоматически):

  • вверх — Escape, Up (стрелка вверх)

  • вниз — Escape, Down (стрелка вниз)

  • влево — Escape, Left (стрелка влево)

  • вправо — Escape, Right (стрелка вправо)

  • закрасить — Escape, Space (пробел)

Обратите внимание, что набирать нужную комбинацию горячих клавиш нужно не привычным нам способом! Мы привыкли нажимать клавиши одновременно, а здесь их нужно нажимать последовательно. К примеру, чтобы ввести команду вверх, нужно нажать Escape, отпустить ее и после этого нажать стрелку вверх. Это нужно помнить.


Цикл

Давайте разберемся, что же такое цикл и как научить выполнять циклические алгоритмы нашего Робота.

Итак, что такое цикл? Представьте, что мы находимся на уроке физической культуры и перед нами стоит задача сделать 7 приседаний. Это задание можно оформить в виде линейного алгоритма и тогда оно будет выглядеть примерно так:

сделай приседание

сделай приседание

сделай приседание

сделай приседание

сделай приседание

сделай приседание

сделай приседание

Т. е мы повторили команду сделай приседание 7 раз. А есть ли смысл писать 7 одинаковых команд? Может проще дать команду сделай 7 приседаний? Конечно проще и правильнее. Это и есть цикл. Вы можете сами вспомнить примеры циклов из жизни — их довольно много.

Таким образом линейный алгоритм, где повторяются одни и те же команды мы можем оформить в виде циклического алгоритма — примерно так:

повторяй 7 раз

сделай приседание

конец цикла

Вот так, на придуманном нами языке мы оформили цикл. У исполнителя Робот тоже есть возможность записывать циклы. Причем, циклы бывают разные. Тот вариант, который мы только что рассмотрели называется цикл со счетчиком или цикл с параметром.

Цикл — это многократное исполнение последовательности команд

Виды циклов

Цикл со счетчиком

Цикл со счетчиком применяется когда заранее известно сколько повторений необходимо сделать. В примере выше с приседаниями именно такой случай.

Для того, чтобы написать цикл со счетчиком для исполнителя необходимо знать его синтаксис. А он такой:

нц <количество повторений> раз

<команда 1>

<команда 2>

<команда n>

кц

Здесь мы должны указать количество повторений (число) и команды, которые будут повторяться. Команды, которые повторяются в цикле называют телом цикла.

В системе КуМир цикл "n раз" записывается при помощи следующей конструкции:

нц n раз

набор команд

кц

n - число повторений цикла.

Пример алгоритма для исполнителя Робот в системе КуМир:

использовать Робот

алг задание

нач

нц 5 раз

вправо

закрасить

кц

кон

В результате работы программы исполнитель Робот пройдёт вправо на 1 клетку и закрасит её. Затем повторит те же действия ещё 4 раза. Таким образом, Робот переместится вправо на 5 клеток и закрасит их.


Цикл с параметром

Вернемся к физкультуре и изменим задачу. Ведь кто-то может и не сделать 7 приседаний, а другой способен сделать 27. Можно ли учесть это при создании цикла? Конечно. Только теперь мы будем использовать не счетчик (количество повторений), а условие. К примеру, пока не устал, делай приседания. В этом случае человек будет делать не конкретное число приседаний, а приседать до тех пор, пока не устанет. И наш цикл на абстрактном языке примет такой вид:

пока не устал

сделай приседание

конец цикла

Слова не устал в нашем случае — это условие. Когда оно истинно, цикл выполняется. Если же оно ложно (устал) тело цикла не будет выполнено. У исполнителя Робот есть несколько условий

  1. сверху не стена или сверху свободно

  2. снизу не стена или снизу свободно

  3. слева не стена или слева свободно

  4. справа не стена или справа свободно

  5. сверху стена или сверху не свободно

  6. снизу стена или снизу не свободно

  7. слева стена или слева не свободно

  8. справа стена или справа не свободно

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

Давайте сначала сформулируем словесный алгоритм — т. е. опишем словами что нужно делать Роботу. Этот алгоритм будет звучать примерно так:

«Пока справа свободно делай шаг вправо и закрашивай клетку»

В результате Робот пробежит по всем клеткам вправо и будет их закрашивать до тех пор, пока справа не окажется стена.

Исходный код нашей программы для Робота будет примерно такой:

использовать Робот

алг

нач

нц пока справа свободно

вправо

закрасить

кц

кон


Исполнитель Робот

Примеры

Пример: На бесконечном поле есть горизонтальная и вертикальная стены. Левый конец горизонтальной стены соединён с нижним концом вертикальной стены. Длины стен неизвестны. В каждой стене есть ровно один проход, точное место прохода и его ширина неизвестны. Робот находится в клетке, расположенной непосредственно над горизонтальной стеной у её правого конца.

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

Конечное расположение Робота может быть произвольным. Алгоритм должен решать задачу для произвольного размера поля и любого допустимого расположения стен внутри прямоугольного поля. При исполнении алгоритма Робот не должен разрушиться, выполнение алгоритма должно завершиться.


Детализация плана действий Робота.

  1. Закрасить все клетки слева до прохода в горизонтальной стене.

  2. Перейти через проход до горизонтальной стены.

  3. Двигаться влево до вертикальной стены и закрашивать все клетки, расположенные непосредственно выше горизонтальной стены.

  4. Закрасить все клетки справа от вертикальной стены до прохода.

  5. Перейти через проход до вертикальной стены.

  6. Закрасить все клетки справа от вертикальной стены.


Исходный код нашей программы для Робота будет примерно такой:

использовать Робот

алг

нач

нц пока снизу стена

закрасить

влево

кц

нц пока снизу не стена

влево

кц

нц пока слева не стена

закрасить

влево

кц

нц пока слева стена

закрасить

вверх

кц

нц пока слева не стена

вверх

кц

нц пока слева стена

закрасить

вверх

кц


кон