Рассмотрим задачу:
На вход программе поступает натуральное число, не превосходящее 2 * 10 9 . Определите сумму цифр этого числа.
На первый взгляд задача весьма проста: необходимо последовательно выделять цифры в числе и добавлять их к сумме. В тоже время, очевидно, что количество цифр в числе может меняться, поэтому конечное значение параметра цикла для оказывается неопределенным и возникают сложности с его применением.
В циклических алгоритмах, в которых количество повторений определенного набора команд нельзя получить до момента его начала, применяются циклы с условием.
Одной из таких конструкций в языке программирования Кумир является цикл пока . Этот цикл, именуемый часто цикл с предусловием , имеет следующий формат записи:
Условие, записанное после служебного слова пока , представляет собой логическое выражение.
Выполнение цикла происходит следующим образом:
Важно! В теле цикла пока должно происходить изменение некоторой величины, связанной с условием, чтобы обеспечить окончание цикла, в противном случае, цикл может оказаться вечным.
Теперь применим цикл пока для решения нашей задачи
Итак, в ходе каждого исполнения тела цикла к величине сумма прибавляется последняя цифра числа, затем, число уменьшается в 10 раз. Очевидно, что в конце концов num станет равным 0, после чего выполнение цикла закончится.
В Кумире существует еще один вариант цикла с условием, получивший название цикл до тех пор , который имеет следующий формат:
Если в цикле пока проверка условия осуществляется перед телом цикла, то в цикле до тех пор - после. Поэтому этот цикл часто называют цикл с постусловием . Тело такого цикла всегда выполнится хотя бы один раз
Работа цикла до тех пор происходит следующим образом:
Задача. На вход программе поступает последовательность целых чисел, заканчивающихся нулем. Найдите количество отрицательных чисел в последовательности. Гарантируется, что в последовательности есть хотя бы одно число отличное от нуля.
{Фрагмент кода программы}
Алгоритм рисование спирали:
использовать Чертежник
алг
нач
. сместиться в точку
(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». В информатике эти выражения называются арифметическими . Правила языка позволяют при записи алгоритмов всюду, где можно написать число, написать и произвольное арифметическое выражение.
Хирьянов Тимофей Федорович
Основные алгоритмические конструкции, кроме элементарных операций, изображаемых одним элементом схемы – это альтернативное исполнение и циклы. Существует два варианта программирования альтернативного исполнения и существует три основных вида цикла.
если <условие>
то
<действия>
все
если <условие>
то
<действия>
иначе
<альтернативные действия>
все
слева стена
справа стена
снизу стена
сверху стена
клетка закрашена
слева свободно
справа свободно
снизу свободно
сверху свободно
клетка чистая
нц пока <условие>
<тело цикла>
кц
нц
<тело цикла>
кц_при <условие>
В различных языках программирования по-разному решается вопрос о значении переменной по завершении цикла, в котором эта переменная использовалась как счётчик.цел а
нц для а от 0 до 9
… тело цикла
кц
Хирьянов Тимофей Федорович
Серия 2 вместе со служебным словом иначе может отсутствовать. В этом случае команда имеет вид:если условие
то серия 1
иначе серия 2
все
При выполнении команды если КуМир сначала проверяет условие , записанное между если и то . При соблюдении этого условия выполняется серия 1 , в противном случае — серия 2 (если она есть), после чего КуМир переходит к выполнению команд, записанных после слова все .если условие
то серия 1
все
если a то
b:=b-a
p:=p+q
иначе
a:=a-b
q:=q+p
все
если x > m
то
m:= x
n:= n+1
все
если справа свободно
то
вправо
все
Ключевое слово иначе вместе с соответствующей серией команд может отсутствовать:выбор
при условие 1: серия 1
при условие 2: серия 2
…
при условие n: серия n
иначе серия n+1
все
КуМир сначала проверяет условие 1 . Если оно соблюдается, то КуМир выполняет команды из серии 1 , после чего переходит к выполнению команд, записанных после слова все . В противном случае КуМир делает то же самое с условием 2 и командами из серии 2 и т.д.выбор
при условие 1: серия 1
при условие 2: серия 2
…
при условие n: серия n
все
выбор
при a > 1: i:= i + 1
при a < 0: j:= j - 1
иначе t:= i; i:= j; j:= t
все
Ее для дальнейшей работы и научились задавать . Теперь перейдем непосредственно к составлению алгоритмов для Робота с использованием простых команд.
Если вам больше нравится информация в формате видеоуроков, то на сайте есть видеоурок
У любого исполнителя должна быть система команд (СКИ — система команд исполнителя ). Система команд исполнителя — совокупность всех команд, которые может выполнить исполнитель. В качестве примера рассмотрим дрессированную собаку. Она умеет выполнять некоторые команды — «Сидеть», «Лежать», «Рядом» и т. п. Это и есть ее система команд.
У нашего Робота тоже есть система команд. Сегодня мы рассмотрим простые команды Робота . Всего их 5:
Результат выполнения этих команд понятен из их названия:
Эти команды можно писать с клавиатуры, а можно использовать горячие клавиши (нажав их команды будут вставляться автоматически):
Обратите внимание, что набирать нужную комбинацию горячих клавиш нужно не привычным нам способом! Мы привыкли нажимать клавиши одновременно, а здесь их нужно нажимать последовательно . К примеру, чтобы ввести команду вверх, нужно нажать Escape, отпустить ее и после этого нажать стрелку вверх. Это нужно помнить.
Теперь мы готовы написать первый алгоритм для Робота. Предлагаю начать с простого — нарисуем квадрат со стороной 3 клетки. Поехали!
Запускаем Кумир, его. Можно начинать писать программу? Конечно нет! Мы же не ! Делаем это. Предлагаю использовать вот такую:
Вот теперь все готово. Начинаем писать программу. Пока она выглядит так
Удаляем символ «|» и называем наш алгоритм «Квадрат»
Предлагаю рисовать квадрат, двигаясь по часовой стрелке. Для начала закрасим текущую клетку, дав команду закрасить . Потом делаем шаг вправо и опять закрашиваем клетку. И еще раз шаг вправо и закрасить.
Попробуем запустить программу и посмотреть что же получилось. Для запуска нажимаем F9 или же кнопку на панели инструментов
В результате мы должны увидеть вот такую картину
Если такое окно Робота у вас не появилось, то на панели инструментов щелкните «Показать окно Робота » или в меню Робот выберите пункт «Показать окно Робота «. Продолжаем дальше.
Теперь мы будем двигаться вниз и закрашивать правую сторону квадрата:
вниз
закрасить
вниз
закрасить
Потом пойдем влево, закрашивая нижнюю границу квадрата
влево
закрасить
влево
закрасить
У нас осталась одна незакрашенная клетка. Закрасим ее
вверх
закрасить
Все готово! В итоге наша программа выглядит так:
использовать Робот
алг Квадрат
нач
закрасить
вправо
закрасить
вправо
закрасить
вниз
закрасить
вниз
закрасить