Как сделать цикл для в кумире робот. Циклы с условием в кумире
Хирьянов Тимофей Федорович
Основные алгоритмические конструкции, кроме элементарных операций, изображаемых одним элементом схемы – это альтернативное исполнение и циклы. Существует два варианта программирования альтернативного исполнения и существует три основных вида цикла.
Условно исполняемый код
Некоторые операции могут быть поставлены под условный оператор. Тогда они будут выполнены только в случае истинности этого условия.если <условие>
то
<действия>
все
Альтернатива
В блок-схеме проверка условия может служить принципом выбора альтернативных операций. То есть, если условие истинно, исполнение пойдет по одной траектории, а если ложно, то по другой. На языке КуМир цикл с предусловием имеет следующий вид:если <условие>
то
<действия>
иначе
<альтернативные действия>
все
Условия для робота:
слева стена
справа стена
снизу стена
сверху стена
клетка закрашена
слева свободно
справа свободно
снизу свободно
сверху свободно
клетка чистая
Цикл с предусловием
Цикл с предусловием — цикл, который выполняется пока истинно некоторое условие, указанное перед его началом. Это условие проверяется до выполнения тела цикла, поэтому тело может быть не выполнено ни разу (если условие с самого начала ложно). В большинстве процедурных языков программирования реализуется оператором while , отсюда его второе название — while-цикл. На языке КуМир цикл с предусловием имеет следующий вид:нц пока <условие>
<тело цикла>
кц
Цикл с постусловием
Цикл с постусловием — цикл, в котором условие проверяется после выполнения тела цикла. Отсюда следует, что тело всегда выполняется хотя бы один раз. В языке Паскаль этот цикл реализует оператор repeat..until , в Си — do…while .На языке КуМир цикл с постусловием имеет следующий вид:
нц
<тело цикла>
кц_при <условие>
Цикл со счётчиком
Цикл со счётчиком — цикл, в котором некоторая переменная изменяет своё значение от заданного начального значения до конечного значения с некоторым шагом, и для каждого значения этой переменной тело цикла выполняется один раз. В большинстве процедурных языков программирования реализуется оператором for , в котором указывается счётчик (так называемая «переменная цикла»), требуемое количество проходов (или граничное значение счётчика) и, возможно, шаг, с которым изменяется счётчик. На языке КуМир цикл со счетчиком имеет следующий вид:В различных языках программирования по-разному решается вопрос о значении переменной по завершении цикла, в котором эта переменная использовалась как счётчик.цел а
нц для а от 0 до 9
… тело цикла
кц
Рассмотрим задачу:
На вход программе поступает натуральное число, не превосходящее 2 * 10 9 . Определите сумму цифр этого числа.
На первый взгляд задача весьма проста: необходимо последовательно выделять цифры в числе и добавлять их к сумме. В тоже время, очевидно, что количество цифр в числе может меняться, поэтому конечное значение параметра цикла для оказывается неопределенным и возникают сложности с его применением.
В циклических алгоритмах, в которых количество повторений определенного набора команд нельзя получить до момента его начала, применяются циклы с условием.
Цикл «пока»
Одной из таких конструкций в языке программирования Кумир является цикл пока . Этот цикл, именуемый часто цикл с предусловием , имеет следующий формат записи:
- нц пока условие
- тело_цикла
Условие, записанное после служебного слова пока , представляет собой логическое выражение.
Выполнение цикла происходит следующим образом:
- Вычисляется значение логического выражения.
- Если результат вычисления равен нет , то выполнение цикла заканчивается, и Кумир переходит к первой команде после цикла пока . Если результат вычисления да , то выполняется тело цикла, после чего снова происходит вычисление значения выражения с новым значением.
Важно! В теле цикла пока должно происходить изменение некоторой величины, связанной с условием, чтобы обеспечить окончание цикла, в противном случае, цикл может оказаться вечным.
Теперь применим цикл пока для решения нашей задачи
- ввод num
- нц пока num > 0
- сумма:= сумма + mod(num, 10 )
- num:= div(num, 10 )
- вывод сумма
Итак, в ходе каждого исполнения тела цикла к величине сумма прибавляется последняя цифра числа, затем, число уменьшается в 10 раз. Очевидно, что в конце концов num станет равным 0, после чего выполнение цикла закончится.
Цикл «до тех пор»
В Кумире существует еще один вариант цикла с условием, получивший название цикл до тех пор , который имеет следующий формат:
- тело_цикла
- кц при условие
Если в цикле пока проверка условия осуществляется перед телом цикла, то в цикле до тех пор - после. Поэтому этот цикл часто называют цикл с постусловием . Тело такого цикла всегда выполнится хотя бы один раз
Работа цикла до тех пор происходит следующим образом:
- Выполняется тело цикла
- Вычисляется значение логического выражения. Если результат вычисления равен нет , то снова начинает выполняться тело цикла и т. д.. Если результат вычисления да , то цикл заканчивается, и Кумир переходит к выполнению следующей команды после цикла.
Задача. На вход программе поступает последовательность целых чисел, заканчивающихся нулем. Найдите количество отрицательных чисел в последовательности. Гарантируется, что в последовательности есть хотя бы одно число отличное от нуля.
{Фрагмент кода программы}
- ввод 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». В информатике эти выражения называются арифметическими . Правила языка позволяют при записи алгоритмов всюду, где можно написать число, написать и произвольное арифметическое выражение.