Как сделать цикл для в кумире робот. Циклы с условием в кумире

Как сделать цикл для в кумире робот. Циклы с условием в кумире

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

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

Условно исполняемый код

Некоторые операции могут быть поставлены под условный оператор. Тогда они будут выполнены только в случае истинности этого условия.

если <условие>
то
<действия>
все

Альтернатива

В блок-схеме проверка условия может служить принципом выбора альтернативных операций. То есть, если условие истинно, исполнение пойдет по одной траектории, а если ложно, то по другой. На языке КуМир цикл с предусловием имеет следующий вид:

если <условие>
то
<действия>
иначе
<альтернативные действия>
все


Условия для робота:
слева стена
справа стена
снизу стена
сверху стена
клетка закрашена
слева свободно
справа свободно
снизу свободно
сверху свободно
клетка чистая

Цикл с предусловием

Цикл с предусловием — цикл, который выполняется пока истинно некоторое условие, указанное перед его началом. Это условие проверяется до выполнения тела цикла, поэтому тело может быть не выполнено ни разу (если условие с самого начала ложно). В большинстве процедурных языков программирования реализуется оператором while , отсюда его второе название — while-цикл. На языке КуМир цикл с предусловием имеет следующий вид:

нц пока <условие>
<тело цикла>
кц

Цикл с постусловием

Цикл с постусловием — цикл, в котором условие проверяется после выполнения тела цикла. Отсюда следует, что тело всегда выполняется хотя бы один раз. В языке Паскаль этот цикл реализует оператор repeat..until , в Си — do…while .
На языке КуМир цикл с постусловием имеет следующий вид:

нц
<тело цикла>
кц_при <условие>

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

Цикл со счётчиком — цикл, в котором некоторая переменная изменяет своё значение от заданного начального значения до конечного значения с некоторым шагом, и для каждого значения этой переменной тело цикла выполняется один раз. В большинстве процедурных языков программирования реализуется оператором for , в котором указывается счётчик (так называемая «переменная цикла»), требуемое количество проходов (или граничное значение счётчика) и, возможно, шаг, с которым изменяется счётчик. На языке КуМир цикл со счетчиком имеет следующий вид:

цел а
нц для а от 0 до 9
… тело цикла
кц

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

Рассмотрим задачу:

На вход программе поступает натуральное число, не превосходящее 2 * 10 9 . Определите сумму цифр этого числа.

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

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

Цикл «пока»

Одной из таких конструкций в языке программирования Кумир является цикл пока . Этот цикл, именуемый часто цикл с предусловием , имеет следующий формат записи:

  • нц пока условие
  • тело_цикла

Условие, записанное после служебного слова пока , представляет собой логическое выражение.

Выполнение цикла происходит следующим образом:

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

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

Теперь применим цикл пока для решения нашей задачи

  • ввод num
  • нц пока num > 0
  • сумма:= сумма + mod(num, 10 )
  • num:= div(num, 10 )
  • вывод сумма

Итак, в ходе каждого исполнения тела цикла к величине сумма прибавляется последняя цифра числа, затем, число уменьшается в 10 раз. Очевидно, что в конце концов num станет равным 0, после чего выполнение цикла закончится.

Цикл «до тех пор»

В Кумире существует еще один вариант цикла с условием, получивший название цикл до тех пор , который имеет следующий формат:

  • тело_цикла
  • кц при условие

Если в цикле пока проверка условия осуществляется перед телом цикла, то в цикле до тех пор - после. Поэтому этот цикл часто называют цикл с постусловием . Тело такого цикла всегда выполнится хотя бы один раз

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

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

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

{Фрагмент кода программы}

  • ввод num
  • если num 0
  • то k:= k + 1
  • кц при num = 0
  • вывод k

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

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

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

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

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

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

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

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

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

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

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

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

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

конец цикла

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

Виды циклов.

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

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

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

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

<команда 1>

<команда 2>

<команда n>

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

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

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

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

закрасить

вправо

закрасить

вправо

закрасить

вправо

закрасить

вправо

закрасить

вправо

закрасить

вправо

закрасить

вправо

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

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

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

нц 7 раз

закрасить

вправо

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

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

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

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

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

пока не устал

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

конец цикла

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

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

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

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

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

сверху стена

снизу стена

слева стена

справа стена

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

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

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

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

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

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

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

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

вправо

закрасить

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

Карточки-задания

    Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных

    Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор

    Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности

    Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел

    Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных

    Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор

    Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности

    Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел

    Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных

    Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор

    Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности

    Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел

    Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных

    Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор

    Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности

    Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел

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

использовать Чертежник
алг
нач
. сместиться в точку (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». В информатике эти выражения называются арифметическими . Правила языка позволяют при записи алгоритмов всюду, где можно написать число, написать и произвольное арифметическое выражение.

просмотров