Основные алгоритмические конструкции, кроме элементарных операций, изображаемых одним элементом схемы – это альтернативное исполнение и циклы. Существует два варианта программирования альтернативного исполнения и существует три основных вида цикла.
Условно исполняемый код
Некоторые операции могут быть поставлены под условный оператор. Тогда они будут выполнены только в случае истинности этого условия.
Альтернатива
В блок-схеме проверка условия может служить принципом выбора альтернативных операций. То есть, если условие истинно, исполнение пойдет по одной траектории, а если ложно, то по другой. На языке КуМир цикл с предусловием имеет следующий вид:
Условия для робота:
слева стена
справа стена
снизу стена
сверху стена
клетка закрашена
слева свободно
справа свободно
снизу свободно
сверху свободно
клетка чистая
Цикл с предусловием
Цикл с предусловием — цикл, который выполняется пока истинно некоторое условие, указанное перед его началом. Это условие проверяется до выполнения тела цикла, поэтому тело может быть не выполнено ни разу (если условие с самого начала ложно). В большинстве процедурных языков программирования реализуется оператором 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
Алгоритм рисование спирали:
использовать Чертежник
алг
нач
. сместиться в точку (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». В информатике эти выражения называются арифметическими . Правила языка позволяют при записи алгоритмов всюду, где можно написать число, написать и произвольное арифметическое выражение.
Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных
Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор
Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности
Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел
Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных
Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор
Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности
Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел
Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных
Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор
Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности
Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел
Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных
Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор
Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности
Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел
Цели : сформировать умение записи, исполнения и отладки алгоритмов с использованием цикла пока ; добиться понимания использования цикла пока ; развивать умение анализировать.
Ученики должны знать : правила записи и исполнения цикла пока ; свойства цикла пока .
Ученики должны уметь : использовать при составлении алгоритмов конструкцию цикла пока и записывать ее на языке Кумир, владеть методами отладки: по шагам, непрерывно.
Метод обучения: объяснительно-иллюстративный и репродуктивный (на этапе объяснения нового материала), репродуктивный с элементами проблемного (этап закрепления материала).
Обеспечение урока:
- система Кумир;
- интерактивная доска;
- мультимедийный проектор;
- карточки-задания.
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. Закрепление. Вопросы:
Какие команды Компьютер будет давать Роботу при выполнении цикла:
а) нц пока клетка не закрашена
б) нц пока клетка закрашена
В ситуации, когда Робот стоит:
- в закрашенной клетке,
- в не закрашенной?
Расположение Робота показано на следующих рисунках:
Как будет выполняться цикл?
Домашнее задание. Определите значение переменной S после выполнения операторов:
Литература : А.Г.Кушниренко «Основы информатики и вычислительной техники».
Эта статья также доступна на следующих языках: Тайский
Огромное Вам СПАСИБО за очень полезную информацию в статье. Очень понятно все изложено. Чувствуется, что проделана большая работа по анализу работы магазина eBay
Спасибо вам и другим постоянным читателям моего блога. Без вас у меня не было бы достаточной мотивации, чтобы посвящать много времени ведению этого сайта. У меня мозги так устроены: люблю копнуть вглубь, систематизировать разрозненные данные, пробовать то, что раньше до меня никто не делал, либо не смотрел под таким углом зрения.
Жаль, что только нашим соотечественникам из-за кризиса в России отнюдь не до шоппинга на eBay. Покупают на Алиэкспрессе из Китая, так как там в разы дешевле товары (часто в ущерб качеству). Но онлайн-аукционы eBay, Amazon, ETSY легко дадут китайцам фору по ассортименту брендовых вещей, винтажных вещей, ручной работы и разных этнических товаров.
В ваших статьях ценно именно ваше личное отношение и анализ темы. Вы этот блог не бросайте, я сюда часто заглядываю. Нас таких много должно быть. Мне на эл. почту пришло недавно предложение о том, что научат торговать на Амазоне и eBay. И я вспомнила про ваши подробные статьи об этих торг. площ.
Перечитала все заново и сделала вывод, что курсы- это лохотрон. Сама на eBay еще ничего не покупала. Я не из России , а из Казахстана (г. Алматы). Но нам тоже лишних трат пока не надо.
Желаю вам удачи и берегите себя в азиатских краях.
Источник: yarjur.ru
Цикл «для» в Кумире
Часто в различных алгоритмах приходится выполнять одну и туже последовательность действий многократно. Для организации подобного рода повторений используются конструкции, которые называются циклами.
Рассмотрим простую задачу: необходимо определить сумму чисел на отрезке от 10 до 20.
Для решения поставленной задачи можно поступить следующим образом:
- Введем величину S , в которой будем накапливать сумму заданной последовательности чисел, и присвоим ей начальное значение S := 0
- Для контроля числового диапазона введем параметр, начальным значением которого будет значение левого края отрезка (текущее значение), а конечным — правого. Назначим параметру, исходя из условия задачи, шаг изменения равным 1.
- Добавим к величине S текущее значение параметра.
- Будем возвращаться к пункту 2, увеличивать текущее значение на шаг изменения параметра и выполнять пункт 3 до тех пор, пока не достигнем конечного значения.
Для описания подобного рода алгоритмов в Кумире можно использовать цикл «для», запись которого имеет следующий формат:
- нц для i от i1 до i2
- тело_цикла
- кц
Величина i называется параметром цикла. i1 и i2 являются соответственно начальным и конечным значениями параметра. Параметр управляет количеством повторений тела цикла ( i2 – i1 + 1). Параметр цикла должен иметь тип цел .
Важно! Параметр цикла нельзя изменять в теле цикла.
Тело цикла представляет собой последовательность команд, которая должна, в условиях данного алгоритма, выполняться многократно.
Анализ описания формата записи показывает, что цикл «для» может быть использован, если известно количество повторений тела цикла .
Приведем фрагмент кода выше рассмотренного алгоритма на языке Кумир.
- S := 0
- нц для i от 10 до 20
- S := S + i
- кц
При таком формате записи цикла для начальное значение параметра должно быть не больше конечного. В противном случае, тело цикла не выполнится ни разу.
По умолчанию шаг изменения параметра равен 1. Если значение шага должно быть отличным от 1, то применяется следующий вид цикла для :
- нц для i от i1 до i2 шаг d
- тело_цикла
- кц
Заметим, что значение шага может быть отрицательным, в таком случае начальное значение параметра должно быть больше конечного. Рассмотрим пример:
Приведем фрагмент кода, реализующий цикл с параметром для решения поставленной задачи:
Задача: выведите через пробел все четные числа от 100 до 0
- нц для i от 100 до 0 шаг -2
- вывод i, » «
- кц
Вопросы для самопроверки
- В каких случаях используется оператор цикла с параметром?
- Какую роль играет параметр цикла?
- Какой тип данных может принимать параметр цикла?
- Что представляет собой тело цикла?
- Может ли тело цикла с параметром не выполниться ни разу?
- С помощью какой величины можно управлять изменением параметра цикла?
- Как должен быть оформлен оператор цикла с параметром, чтобы тело цикла выполнялось при уменьшающихся значениях параметра цикла?
Источник: informatics-lesson.ru
Чертежник рисует узор
Разберём несколько примеров использования циклов при составлении алгоритмов для исполнителя Чертежник.
Цикл с параметром
Задача 1. Составим алгоритм для исполнителя Чертежник, который начертит на рабочем поле следующий рисунок.
Для начала посмотрим на изображение и проанализируем его. Центральный квадрат раздвигается относительно своего центра и делится на четыре части. Они повторяются с одинаковым шагом удаляясь от центра фигуры.
Для решения поставленной задачи потребуется применить цикл с параметром. Где в качестве параметра будет использоваться переменная величина, задающая шаг раздвижения квадрата.
Алгоритм:
использовать Чертежник алг узор нач цел х нц для х от 0 до 3 опустить перо сместиться на вектор (-2,0) сместиться на вектор (0,2) поднять перо сместиться на вектор (0,х*2) опустить перо сместиться на вектор (0,2) сместиться на вектор (2,0) поднять перо сместиться на вектор (х*2,0) опустить перо сместиться на вектор (2,0) сместиться на вектор (0,-2) поднять перо сместиться на вектор (0,-х*2) опустить перо сместиться на вектор (0,-2) сместиться на вектор (-2,0) поднять перо сместиться на вектор (-х*2-1,-1) кц кон
Задача 2. Составим алгоритм для исполнителя Чертежник, который начертит на рабочем поле следующий рисунок.
Также как и в предыдущей задаче потребуется применить цикл с параметром. Где в качестве параметра будет использоваться переменная величина, задающая шаг раздвижения знака.
Алгоритм:
использовать Чертежник алг узор2 нач цел х нц для х от 0 до 3 опустить перо сместиться на вектор (2,0) сместиться на вектор (0,2) поднять перо сместиться на вектор (х*2+1,0) опустить перо сместиться на вектор (0,-2) сместиться на вектор (2,0) поднять перо сместиться на вектор (0,-х*2-1) опустить перо сместиться на вектор (-2,0) сместиться на вектор (0,-2) поднять перо сместиться на вектор (-х*2-1,0) опустить перо сместиться на вектор (0,2) сместиться на вектор (-2,0) поднять перо сместиться на вектор (-1,2*х+2) кц кон
Цикл N раз
Задача 3. Составить алгоритм для исполнителя Чертежник, который начертит на рабочем поле следующий узор.
В этой задаче потребуется применить цикл N раз и вспомогательный алгоритм. Вспомогательный алгоритм рисует маленький перечеркнутый квадрат. В основном алгоритме этот квадрат воспроизводится 25 раз (5 строк по 5 квадратов)
Алгоритм:
использовать Чертежник алг узор нач нц 5 раз нц 5 раз узор_1 кц сместиться на вектор (-10,-2) кц кон алг узор_1 нач опустить перо сместиться на вектор (0,2) сместиться на вектор (2,0) сместиться на вектор (0,-2) сместиться на вектор (-2,0) сместиться на вектор (0,2) сместиться на вектор (2,-2) сместиться на вектор (-2,0) сместиться на вектор (2,2) сместиться на вектор (0,-2) поднять перо кон
Задача 3. Составьте алгоритм рисования узора, показанного на рисунке.
Алгоритм:
использовать Чертежник алг узор нач нц 4 раз нц 4 раз ромб кц сместиться на вектор (-8,-2) кц кон алг ромб нач опустить перо сместиться на вектор (1,1) сместиться на вектор (1,-1) сместиться на вектор (-1,-1) сместиться на вектор (-1,1) поднять перо сместиться на вектор (2,0) кон
Дополнительное задание 3: Составьте алгоритм, по которому Чертежник нарисует ряд из 5 квадратов. Самый маленький квадрат имеет размеры 1х1. У каждого следующего сторона увеличивается на 1 клетку.
Решение:
Дополнительное задание 4: Составьте алгоритм, по которому Чертежник нарисует спираль, которая начинает раскручиваться из начала координат. Витки спирали отстоят на одну клетку друг от друга. Смотрите рисунок.
Решение:
Источник: infouch.ru