§ 3.6. Циклы в алгоритмах: когда действия повторяются
Привет! Сейчас мы с тобой разберём циклические алгоритмы — это тема, которая может показаться сложной, но на самом деле она крутая и очень полезная. Представь, что ты учишь компьютер делать что-то много-много раз, не повторяя одну и ту же команду сто раз. Звучит удобно, правда?
Что такое повторение и зачем оно нужно?
Сейчас мы узнаем, как заставить компьютер повторять действия, не прописывая их десятки раз вручную.
💡 Определение
Повторение — это когда одна и та же последовательность команд выполняется снова и снова. В программировании такие конструкции называют циклами или циклическими алгоритмами. А сами команды, которые повторяются, — это тело цикла.
🏋️ Пример из жизни
Давай представим: ты качаешь пресс. Ты делаешь одно и то же движение 20 раз подряд. Вот это и есть цикл! Только в программировании компьютер будет «качать пресс» — то есть выполнять команды столько раз, сколько ты скажешь.
Какие бывают циклы?
Существует четыре основных типа циклов. Каждый из них применяется в зависимости от задачи:
Цикл-ПОКА
Цикл с заданным условием продолжения работы — выполняется, пока выполняется какое-то условие (например, «пока есть деньги на счёте»).
Цикл-ДО
Цикл с заданным условием окончания работы — выполняется до тех пор, пока условие не станет истинным (например, «пока не наберёшь 100 баллов в игре»).
Цикл с числом повторений
Цикл с заданным числом повторений — выполняется строго определённое количество раз (например, «повтори 10 раз»).
Цикл-ДЛЯ
Цикл с переменной — параметр цикла меняется с каждым шагом (например, считаем от 1 до 100).
3.6.1. Цикл с заданным условием продолжения работы (Цикл-ПОКА)
Это цикл, который работает ПОКА выполняется какое-то условие. Его ещё называют цикл-ПОКА или цикл с предусловием.
Цикл-ПОКА проверяет условие перед каждым повторением
⚙️ Как это работает
Логика простая: сначала проверяется условие. Если оно истинно («Да»), выполняется тело цикла, и снова идёт проверка. Если условие ложно («Нет»), цикл завершается.
<тело цикла (последовательность действий)>
кц
🔴 Важно!
Возможны случаи, когда тело цикла не будет выполнено ни разу! Если с самого начала условие ложно, цикл просто пропускается.
📝 Пример 1: Сортировка кирпичей
Алгоритм, по которому из всех имеющихся кирпичей отбираются целые кирпичи и складываются в машину.
нач
нц пока есть кирпичи
взять один кирпич
если кирпич целый
то положить кирпич в машину
иначе отложить кирпич в сторону
все
кц
кон
Цикл будет выполняться, пока есть кирпичи. Как только они закончатся, алгоритм завершится.
🤖 Пример 2: Робот закрашивает коридор
Правее Робота (клетка с ромбиком) расположен коридор неизвестной длины. Необходимо, чтобы Робот закрасил все клетки этого коридора.
Пока будет выполняться условие «справа свободно», Роботу следует выполнять команды:
закрась
Соответствующий алгоритм для Робота:
вправо
закрась
кц
➗ Пример 3: Деление с остатком
Требуется, не пользуясь операцией деления, получить неполное частное q и остаток r от деления натурального числа x на натуральное число y.
Представим операцию деления как последовательные вычитания делимого из делимого. Причём вычитать будем до тех пор, пока результат вычитания не станет меньше вычитаемого (делителя). В этом случае количество вычитаний будет равно неполному частному от деления q, а последняя разность — остатку от деления r.
Деление через повторяющееся вычитание
3.6.2. Цикл с заданным условием окончания работы (Цикл-ДО)
Это цикл, который выполняется хотя бы один раз, а потом проверяет условие. Его называют цикл-ДО или цикл с постусловием.
Цикл-ДО проверяет условие после каждого повторения
⚙️ Как это работает
Логика: сначала выполняется тело цикла, потом проверяется условие. Если условие НЕ выполняется («Нет»), снова выполняется тело цикла. Если условие выполняется («Да»), выполнение цикла заканчивается.
<тело цикла (последовательность действий)>
кц при <условие>
🔴 Важно!
В любом случае тело цикла будет выполнено хотя бы один раз.
📝 Пример 4: Четверостишие наизусть
Алгоритм по выучиванию наизусть четверостишия:
нач
нц
прочитать четверостишие по книге 1 раз
рассказать четверостишие
кц при рассказано без ошибок
кон
🔢 Пример 5: Вычисление переменной b
Требуется вычислить значение переменной b согласно алгоритму.
Таблица трассировки показывает пошаговое выполнение для a = 4 и условия a = 128:
Трассировка алгоритма вычисления степени
Ответ: b = 255
3.6.3. Цикл с заданным числом повторений
Для исполнителей в среде КуМир цикл с заданным числом повторений реализуется с помощью следующей конструкции:
⚙️ Синтаксис
<тело цикла>
кц
🏃 Пример 6: Спортсмен и дистанция
Спортсмен приступает к тренировкам по следующему графику: в первый день он должен пробежать 10 км; каждый следующий день требуется увеличивать дистанцию на 10% от нормы предыдущего дня. Как только дневная норма достигнет или превысит 25 км, необходимо прекратить её увеличение и далее пробегать ежедневно ровно 25 км. Начиная с какого дня спортсмен будет пробегать 25 км?
Пусть x — количество километров, которое спортсмен пробежит в некоторый i-й день. Тогда в следующий (i + 1)-й день он пробежит x + 0,1x километров (0,1x — это 10% от x).
Постепенное увеличение дистанции до целевого значения
🤖 Пример 7: Робот закрашивает 5 клеток
Если правее Робота не встретится препятствий, то, выполнив приведённый ниже алгоритм, он переместится на пять клеток вправо и закрасит эти клетки.
нач
нц 5 раз
вправо; закрасить
кц
кон
✏️ Пример 8: Исполнитель Чертёжник
Исполнитель Чертёжник предназначен для построения рисунков на координатной плоскости. Исходное положение исполнителя — начало координат.
Система команд Чертёжника:
поднять перо— Чертёжник поднимает пероопустить перо— Чертёжник опускает перосместиться в точку (a, b)— перемещается в точку с координатами (a, b)сместиться на вектор (a, b)— перемещается в точку с координатами (x + a, y + b)
Пусть Чертёжник находится в точке с координатами (x0, y0). Выясним, в какой точке он окажется после выполнения программы:
сместиться на вектор (a, b)
кц
Из таблицы видно, что вместо имеющегося циклического алгоритма можно использовать линейный алгоритм, приводящий к такому же результату:
y := y0 + k * b
Таким образом, Чертёжник, находившийся в точке с координатами (x0, y0), после выполнения программы окажется в точке с координатами (x0 + k * a, y0 + k * b).
🐢 Пример 9: Квадрат для Черепахи
Алгоритм изображения квадрата со стороной a для исполнителя Черепаха имеет следующий вид:
нач
нц 4 раз
вперед (a); вправо (90)
кц
кон
Подумай: Как модифицировать представленный выше алгоритм в алгоритм рисования универсального правильного многоугольника (правильного треугольника, пятиугольника, шестиугольника и т. д.)? Проверьте свои предположения в среде КуМир.
3.6.4. Цикл с переменной (Цикл-ДЛЯ)
Цикл с переменной иначе называют: цикл-ДЛЯ, цикл с параметром.
Цикл с переменной: шаг за шагом от начала до конца
⚙️ Синтаксис
<тело цикла (последовательность действий)>
кц
📋 Как это работает
В цикле-ДЛЯ всегда есть переменная (параметр) цикла — величина целого типа, изменяющаяся в ходе выполнения цикла от своего начального значения i1 до конечного значения i2 с шагом h.
Выполняется цикл-ДЛЯ следующим образом:
- Параметру цикла присваивается начальное значение.
- Параметр цикла сравнивается с конечным значением; если он не превышает конечного значения, то выполняется тело цикла, увеличивается значение параметра цикла на величину шага и снова осуществляется проверка параметра цикла; если же параметр цикла превышает конечное значение, то выполнение цикла заканчивается.
Если величина шага в цикле с параметром равна единице, то шаг не указывают.
⛵ Пример 10: Переправа через реку
Рассмотрим алгоритм переправы через реку воинского отряда из пяти человек. Солдаты могут воспользоваться помощью двух мальчиков — хозяев небольшой лодки, в которой может переправиться или один солдат, или один либо два мальчика.
нач
нц для i от 1 до 5
два мальчика переправляются на противоположный берег
один мальчик высаживается на берег, другой плывёт обратно
солдат переправляется через реку
мальчик возвращается на исходную позицию
кц
кон
🔢 Пример 11: Возведение в степень
Составим алгоритм вычисления степени с натуральным показателем n для любого вещественного числа a.
По определению:
a1 = a, an = a·a·...·a (n сомножителей), a ∈ R, n ∈ N, n ⩾ 2
При составлении алгоритма воспользуемся единой формулой, в которой число умножений равно показателю степени:
an = 1·a·a·...·a (n умножений)
Блок-схема и таблица трассировки для a = 4 и n = 3
🤔 Вопрос для размышления
При каких условиях работа цикла с переменной будет аналогична работе цикла с заданным числом повторений?
🎯 Самое главное
🤔 Проверь себя
Проверьте, как хорошо вы усвоили материал!
1. Вспомни реальную ситуацию из жизни, где используется повторение
Может быть, это твоя утренняя рутина? Или тренировка? Или процесс загрузки фотки в Инстаграм (повтор, пока не загрузится)? Придумай свой пример!
2. Представь, что ты объясняешь другу, чем цикл-ПОКА отличается от цикла-ДО
Как бы ты это сказал простыми словами? В чём главная разница?
3. Почему цикл с заданным числом повторений удобен для повторяющихся задач?
Придумай три примера из своей жизни, где ты делаешь что-то строго определённое количество раз.
4. Как ты думаешь, когда лучше использовать цикл с переменной, а когда — цикл-ПОКА?
Обсуди это с одноклассниками. В каких задачах каждый тип цикла будет наиболее эффективным?
5. Попробуй составить алгоритм для Робота или Чертёжника в среде КуМир
Например, пусть Робот нарисует квадрат 5x5 или Чертёжник построит лесенку из линий. Какой тип цикла ты выберешь?
6. Приведите пример циклического алгоритма из повседневной жизни
Подумай о действиях, которые ты повторяешь каждый день или в определённых ситуациях.
7. Приведите пример циклического алгоритма из литературного произведения
Вспомни сказки, где герои повторяют одни и те же действия (например, «Колобок», «Репка»).
8. Приведите пример циклического алгоритма из любой предметной области, изучаемой в школе
Это может быть математика (многократное сложение), физика (колебания), биология (циклы в природе) и т.д.
9. Какие ещё операторы цикла, кроме изученных, существуют в языках программирования?
Попробуй найти информацию о других конструкциях циклов в популярных языках программирования.
10. В чём разница между коротким и длинным алгоритмом?
Краткость алгоритма и скорость его выполнения совпадают?
✏️ Задания для практики
Попробуйте применить полученные знания на практике!
📝 Задание 1
Составьте в среде КуМир алгоритм, под управлением которого Робот обойдёт прямоугольную область, обнесённую стеной, по периметру и закрасит угловые клетки. Размеры области неизвестны.
🐟 Задание 2
Запас рыбы в пруду оценён в A тонн. Ежегодный прирост рыбы составляет 15%. Ежегодный план отлова — B тонн. Наименьший запас рыбы составляет C тонн. (Запас ниже C тонн уже не восстанавливается.) Составьте блок-схему алгоритма для подсчёта количества лет, в течение которых можно выдерживать заданный план.
🔢 Задание 3
Дана последовательность 5, 9, 13, 17, ... . Составьте блок-схему алгоритма для определения числа слагаемых (первых членов последовательности), сумма которых равна 324.
💰 Задание 4
Составьте алгоритм для определения количества цифр в записи произвольного натурального числа.
🏦 Задание 5
Сумма 10 000 рублей положена в банк, при этом прирост составляет 5% годовых. Составьте алгоритм, определяющий, через какой промежуток времени первоначальная сумма увеличится в два раза.
🧬 Задание 6
Одноклеточная амёба каждые три часа делится на 2 клетки. Составьте алгоритм вычисления времени, через которое будет X амёб.