Как сделать цикл в кумире. Ветвление в языке кумир. Алгоритмы с “обратной связью”. Команда “пока”

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

Если вам больше нравится информация в формате видеоуроков, то на сайте есть видеоурок

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

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

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

  • вверх
  • влево
  • вправо
  • закрасить

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

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

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

  • вверх — Escape, Up (стрелка вверх)
  • вниз — Escape, Down (стрелка вниз)
  • влево — Escape, Left (стрелка влево)
  • вправо — Escape, Right (стрелка вправо)
  • закрасить — Escape, Space (пробел)

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

Теперь мы готовы написать первый алгоритм для Робота. Предлагаю начать с простого — нарисуем квадрат со стороной 3 клетки. Поехали!

Запускаем Кумир, его. Можно начинать писать программу? Конечно нет! Мы же не ! Делаем это. Предлагаю использовать вот такую:

Вот теперь все готово. Начинаем писать программу. Пока она выглядит так

Удаляем символ «|» и называем наш алгоритм «Квадрат»

Предлагаю рисовать квадрат, двигаясь по часовой стрелке. Для начала закрасим текущую клетку, дав команду закрасить . Потом делаем шаг вправо и опять закрашиваем клетку. И еще раз шаг вправо и закрасить.

Попробуем запустить программу и посмотреть что же получилось. Для запуска нажимаем F9 или же кнопку на панели инструментов

В результате мы должны увидеть вот такую картину

Если такое окно Робота у вас не появилось, то на панели инструментов щелкните «Показать окно Робота » или в меню Робот выберите пункт «Показать окно Робота «. Продолжаем дальше.

Теперь мы будем двигаться вниз и закрашивать правую сторону квадрата:

вниз

закрасить

вниз

закрасить

Потом пойдем влево, закрашивая нижнюю границу квадрата

влево

закрасить

влево

закрасить

У нас осталась одна незакрашенная клетка. Закрасим ее

вверх

закрасить

Все готово! В итоге наша программа выглядит так:

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

алг Квадрат

нач

закрасить

вправо

закрасить

вправо

закрасить

вниз

закрасить

вниз

закрасить

Цели : сформировать умение записи, исполнения и отладки алгоритмов с использованием цикла пока ; добиться понимания использования цикла пока ; развивать умение анализировать.

Ученики должны знать : правила записи и исполнения цикла пока ; свойства цикла пока .

Ученики должны уметь : использовать при составлении алгоритмов конструкцию цикла пока и записывать ее на языке Кумир, владеть методами отладки: по шагам, непрерывно.

Метод обучения: объяснительно-иллюстративный и репродуктивный (на этапе объяснения нового материала), репродуктивный с элементами проблемного (этап закрепления материала).

Обеспечение урока:

  • система Кумир;
  • интерактивная доска;
  • мультимедийный проектор;
  • карточки-задания.

Ход урока

1. Объяснение нового материала.

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

Общий вид цикла пока

В общем виде цикл пока записывается так:

При выполнении цикла компьютер повторяет следующие действия:

а) проверяет записанное после служебного слова пока условие;

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

Пример .

Метод отладки : по шагам.

Диалог Компьютера и Робота

Компьютер : снизу свободно?

Робот : да.

Компьютер : вниз.

Робот : смещается вниз в клетку Б.

Компьютер : снизу свободно?

Робот : да.

Компьютер : вниз.

Робот : смещается вниз в клетку В.

Компьютер : снизу свободно?

Робот: нет.

Так как Робот ответил нет, т.о. записанное после пока условие не соблюдается и выполнение цикла заканчивается.

Продемонстрировать в системе Кумир методы отладки: по шагам и непрерывно.

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

Зацикливание. Выполнение цикла пока может и не завершиться, если условие все время будет соблюдаться. Например, если ниже Робота никаких стен нет, то при выполнении предыдущего алгоритма, компьютер «зациклится», т.е. будет бесконечно спрашивать у Робота «снизу свободно», получать в ответ да и командовать «вниз».

Выполнение упражнений.

2. Эксперименты с программой на примере исполнителя Робот.

Необходимо, в системе Кумир, предварительно сделать заготовки расположения Робота (файлы 1. fil -6. fil ).

Упражнения.

Эксперименты с программой.

Задание 1 . (Загрузить файл 1.fil)

Требуется перевести Робота из клетки А в клетку Б. Использовать цикл пока:

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

Задание 2 . (Загрузить файл 2.fil)

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

Задание 3 . (Загрузить файл 3.fil)

Робот находится в горизонтальном коридоре. Закрасить все клетки коридора:

Задание 4 . (Загрузить файл 4.fil)

1. Переделайте алгоритм «закрасить ряд вправо и вернуться» используя в нем цикл:

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

Задание 5 . (Загрузить файл 5.fil)

Составьте алгоритм для закраски всех клеток вокруг прямоугольной стены:

Задание 6 . (Загрузить файл 6.fil) (Из материалов экзамена 2009г.)

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

Задание 7 . (Загрузить файл 6.fil) (Из материалов экзамена 2009 г.)

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

3. Закрепление. Вопросы:

Какие команды Компьютер будет давать Роботу при выполнении цикла:

а) нц пока клетка не закрашена

б) нц пока клетка закрашена

В ситуации, когда Робот стоит:

  1. в закрашенной клетке,
  2. в не закрашенной?

Расположение Робота показано на следующих рисунках:

Как будет выполняться цикл?

Домашнее задание. Определите значение переменной S после выполнения операторов:

Литература : А.Г.Кушниренко «Основы информатики и вычислительной техники».

Алгоритм рисование спирали:

использовать Чертежник
алг
нач
. сместиться в точку (3,3)
. опустить перо
. виток(1); виток(3); виток(5); виток(7); виток (9)
. поднять перо
кон
алг виток(арг вещ а)
нач
. сместиться на вектор (а, 0)
. сместиться на вектор (0, -а)
. сместиться на вектор (-а-1,0)
. сместиться на вектор (0, а+1)
кон

Обратите внимание на блок команд:

Виток(1); виток(3); виток(5); виток(7); виток (9)

Вспомогательный алгоритм «виток(арг вещ а) » вызывается 5 раз, но вызывать его в цикле «N раз» нельзя, т. к. каждый раз он вызывается с разными значениями аргумента.

Но можно заметить, что значения аргумента изменяются от 1 до 9, каждый раз увеличиваясь на 2. Значит, нам может помочь цикл со счётчиком . Так же такой цикл называется цикл «для» .

Цикл со счётчиком - цикл, в котором некоторая переменная изменяет своё значение от заданного начального значения до конечного значения с некоторым шагом, и для каждого значения этой переменной тело цикла выполняется один раз.

Обычно этот цикл применяется в том случае, если нужно перебрать какие-то значения и для каждого из них выполнить какие-то действия.

Общий вид цикла со счётчиком:

нц для <счетчик> от <нач. знач.> до <кон. знач.> [шаг <знач.>]
<тело цикла (последовательность команд)>
кц

Указывать шаг необязательно, если он не указан, то считается равным единице.

Теперь алгоритм «спираль» можем переписать таким образом:

использовать Чертежник
алг
нач
. сместиться в точку (3,3)
. опустить перо
. цел размер
. нц для размер от 1 до 9 шаг 2
. . виток(размер)
. кц
. поднять перо
кон
алг виток(арг вещ а)
нач
. сместиться на вектор (а, 0)
. сместиться на вектор (0, -а)
. сместиться на вектор (-а-1,0)
. сместиться на вектор (0, а+1)
кон

В этом примере переменная-счетчик «размер» будет получать значения: 1, 3, 5, 7, 9. Т.е. цикл выполниться 5 раз. Для каждого значения переменой «размер» будет один раз выполнено тело цикла, в нашем примере это вызов вспомогательного алгоритма «виток(арг вещ а) ».

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

Блок-схема такого алгоритма выглядит так:

Рассмотрим еще один пример:

Давайте для начала вспомним и напишем вспомогательный алгоритм, который будет рисовать квадрат в точке (x, y). Для разнообразия для рисования будем использовать команду сместиться на вектор (в предыдущих примерах смещались в точку).

Алгоритм может быть таким:

алг квадрат(арг вещ x, y, сторона)
нач
. сместиться в точку (x, y)
. сместиться на вектор (-сторона/2, сторона/2)
. опустить перо
. сместиться на вектор (сторона, 0)
. сместиться на вектор (0, -сторона)
. сместиться на вектор (-сторона, 0)
. сместиться на вектор (0, сторона)
. поднять перо
кон

Используя такой вспомогательный алгоритм, нарисуем такой рисунок:

Для этого воспользуемся циклом «для». Изучите пример программы:

использовать Чертежник
алг рисунок1
нач
. цел z
. нц для z от 2 до 10 шаг 2
. . квадрат(0, 0, z)
. кц
кон
алг квадрат(арг вещ x, y, сторона)
нач
. сместиться в точку (x, y)
. сместиться на вектор (-сторона/2, сторона/2)
. опустить перо
. сместиться на вектор (сторона, 0)
. сместиться на вектор (0, -сторона)
. сместиться на вектор (-сторона, 0)
. сместиться на вектор (0, сторона)
. поднять перо
кон

В этом примере переменная «z» будет получать значения: 2, 4, 6, 8, 10. Т.е. цикл выполниться 5 раз. Для каждого значения «z» будет один раз выполнено тело цикла, в нашем примере это вызов вспомогательного алгоритма квадрат.

До первого использования переменной ее нужно описать, т. е. указать какого она типа. Это делается в нашей программе в строчке «цел z», т. е. мы указываем что будем использовать переменную «z» для хранения целых чисел, и следовательно для нее нужно выделить память. Подробнее о переменных мы будет говорить немного позднее.

Как вы обратили внимание в алгоритме использовались не только числа, но и алгебраические выражения , формулы, например «-сторона/2». В информатике эти выражения называются арифметическими . Правила языка позволяют при записи алгоритмов всюду, где можно написать число, написать и произвольное арифметическое выражение.

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

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

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

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

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

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

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

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

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

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

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

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

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

конец цикла

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

Виды циклов.

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

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

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

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

<команда 1>

<команда 2>

<команда n>

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

Давайте рассмотрим это на примере.

Изначально Робот находился в левой верхней клетке.

Давайте для начала решим задачу линейно. В этом случае мы будет закрашивать текущую клетку и перемещаться на 1 клетку вправо и программа будет выглядеть так:
использовать Робот
алг
нач

закрасить

вправо

закрасить

вправо

закрасить

вправо

закрасить

вправо

закрасить

вправо

закрасить

вправо

закрасить

вправо

Как видим, команды закрасить и вправо повторяются 7 раз. Давайте теперь перепишем программу с использованием цикла. Кстати, чтобы вставить цикл в свою программу можно в меню Вставка выбрать пункт нц-раз-кц или нажать одну из комбинаций клавиш Esc, Р (русская буква Р) или Esc, H (латинская буква H). Причем клавиши надо нажимать последовательно — сначала Esc, отпустить ее и только потом Р или H.

Так вот, наша программа с циклом будет выглядеть так:

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

нц 7 раз

закрасить

вправо

Если мы ее запустим, то увидим, что в результате получится тоже самое — 7 закрашенных клеток. Однако программа стала короче и значительно грамотней с алгоритмической точки зрения!

В качестве разминки и закрепления предлагаю самостоятельно написать программу для Робота, которая нарисует квадрат со стороной 7 клеток. Естественно, используя цикл. Жду решения в комментариях.

Цикл с условием.

При решении задачи 19 ГИА по информатике с Роботом использовать цикл со счетчиком не получится. Так как там поле, как правило, бесконечное и стены не имеют конкретной длины. Поэтому мы не сможем определить количество повторений для цикла со счетчиком. Но не беда — нам поможет цикл с условием .

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

пока не устал

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

конец цикла

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

сверху свободно

снизу свободно

слева свободно

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

сверху стена

снизу стена

слева стена

справа стена

Но в условии задачи 19 ГИА указаны только первые 4. Так что будем пользоваться только ими.

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

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

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

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

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

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

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

вправо

закрасить

В результате выполнения этой программы мы увидим вот такую картину:

Хирьянов Тимофей Федорович

если-то-иначе-все

Общий вид команды:

если условие
то серия 1
иначе серия 2
все

Серия 2 вместе со служебным словом иначе может отсутствовать. В этом случае команда имеет вид:

если условие
то серия 1
все

При выполнении команды если КуМир сначала проверяет условие , записанное между если и то . При соблюдении этого условия выполняется серия 1 , в противном случае — серия 2 (если она есть), после чего КуМир переходит к выполнению команд, записанных после слова все .
Если условие не соблюдается, а серия 2 вместе с иначе отсутствует, то КуМир сразу переходит к выполнению команд, записанных после слова все.

Пример 1

если a то
b:=b-a
p:=p+q
иначе
a:=a-b
q:=q+p
все

Пример 2

если x > m
то
m:= x
n:= n+1
все

Пример 3 (исполнитель Робот)

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

выбор-при-иначе-все

Общий вид команды:

выбор
при условие 1: серия 1
при условие 2: серия 2

при условие n: серия n
иначе серия n+1
все

Ключевое слово иначе вместе с соответствующей серией команд может отсутствовать:

выбор
при условие 1: серия 1
при условие 2: серия 2

при условие n: серия n
все

КуМир сначала проверяет условие 1 . Если оно соблюдается, то КуМир выполняет команды из серии 1 , после чего переходит к выполнению команд, записанных после слова все . В противном случае КуМир делает то же самое с условием 2 и командами из серии 2 и т.д.
Команды, записанные после слова иначе , выполняются в том случае, когда не соблюдено ни одно из условий.
В команде выбор всегда выполняется не более одной серии команд, даже если несколько условий окажутся истинными. Выполнение команды выбор заканчивается после того, как найдено первое (по порядку следования) условие со значением да (и выполнена соответствующая серия команд).

Пример 1

выбор
при a > 1: i:= i + 1
при a < 0: j:= j - 1
иначе t:= i; i:= j; j:= t
все