"Информатика (базовый уровень)", Семакин И.Г., Хеннер Е.К., Шеина Т.Ю.
Цикл — конструкция программы, которая повторяет команды по заданному правилу. Он позволяет не записывать одинаковые действия много раз: число повторений определяется диапазоном или условием. Важно различать циклы с параметром, предусловием и постусловием: в них по-разному задаётся число проходов и проверяется возможность продолжения. Чтобы цикл завершился, нужно предусмотреть изменение данных или достижение условия остановки.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Цикл — конструкция программы, которая повторяет выполнение одной или нескольких команд. Вместо того чтобы копировать одинаковые команды много раз, программист задаёт правило повторения. Оно определяет, когда цикл продолжает работу и когда останавливается.
Тело цикла — команды, выполняемые при каждом повторении цикла. Если цикл проходит пять раз, его тело выполняется пять раз, если правило не предусматривает досрочной остановки. В теле обычно находятся действия, которые нужно повторять, например ввод очередного числа или увеличение суммы.
Цикл с предусловием — цикл, в котором условие проверяется перед выполнением тела. Если условие сразу ложно, тело не будет выполнено ни разу. Такой вид нужен, когда прежде чем действовать, программа должна проверить, есть ли смысл продолжать, например остались ли данные для обработки.
Цикл с параметром — цикл, в котором переменная принимает последовательные значения из заданного диапазона. Эту переменную часто называют счётчиком: она меняется на установленный шаг при каждом повторении. Такой цикл помогает явно задать число проходов, когда известны границы и порядок их изменения.
Повторяющиеся действия удобно оформлять циклом, потому что одинаковые команды достаточно записать один раз. Если вместо цикла продублировать их вручную, программа станет длиннее, а исправлять её будет сложнее: каждую копию придётся менять отдельно. Правило цикла задаёт, сколько раз выполнить тело или при каком условии остановиться. Поэтому одна и та же конструкция подходит и для десяти повторов, и для обработки длинной последовательности.
В цикле с предусловием программа сначала проверяет условие продолжения, а только потом выполняет тело. Если условие истинно, происходит очередной проход; затем программа возвращается к проверке. Чтобы цикл когда-нибудь остановился, внутри него обычно изменяют переменную, от которой зависит условие, или получают новые данные. Если нужное изменение не происходит, проверка снова даёт тот же результат, и программа может зациклиться.
В цикле с параметром счётчик проходит значения от начального до конечного с заданным шагом. Например, начало 1, конец 10 и шаг 1 задают десять значений, если обе границы включаются правилами используемого языка программирования. Изменение счётчика встроено в принцип такого цикла, поэтому программисту не нужно отдельно описывать его на каждом проходе. Перед запуском следует проверить границы и шаг: от них зависит, сколько раз выполнится тело.
Цикл с постусловием проверяет условие после выполнения тела. Сначала программа делает действие, затем решает, нужно ли повторить его ещё раз. Поэтому тело такого цикла выполняется хотя бы один раз, даже если после первого прохода условие уже говорит остановиться. Это удобно, например, когда сначала нужно запросить ввод, а затем проверить, подходит ли полученное значение.
Выбор вида цикла зависит от того, известно ли заранее число повторений и нужно ли обязательно выполнить тело. Если количество проходов задано диапазоном, обычно проще использовать цикл с параметром. Если продолжение определяется условием и тело можно пропустить, подходит цикл с предусловием; если действие необходимо выполнить хотя бы раз — с постусловием. Такой выбор делает порядок работы программы понятным и помогает не допустить лишних или пропущенных повторений.
| Свойство | Цикл с параметром | Цикл с предусловием | Цикл с постусловием |
|---|---|---|---|
| Когда проверяется условие или задаётся число повторений | Число проходов задаётся диапазоном, начальным и конечным значениями, шагом | Условие проверяется перед каждым выполнением тела | Условие проверяется после выполнения тела |
| Может ли тело не выполниться ни разу | Да, если заданный диапазон не требует проходов | Да, если условие сразу ложно | Нет, тело выполняется хотя бы один раз |
| Когда использовать | Когда известны границы и шаг счётчика | Когда продолжение зависит от условия, проверяемого заранее | Когда действие нужно выполнить до первой проверки |
| Что обеспечивает завершение цикла | Достижение конечной границы счётчиком | Изменение данных, при котором условие станет ложным | Изменение данных, при котором условие остановки станет истинным |
Сначала определите, известно ли число повторений и должна ли программа выполнить тело хотя бы один раз. Затем сравните свой случай со строками «Когда использовать» и «Что обеспечивает завершение цикла». Если условие задачи не указывает конкретный язык программирования, ориентируйтесь на принцип работы, а точный синтаксис уточняйте по правилам этого языка.
Границы последовательности известны заранее, поэтому здесь подходит цикл с параметром. Счётчик должен начать с 1 и увеличиваться на единицу после каждого вывода. Нужно убедиться, что число 10 тоже будет обработано.
Ответ: программа выведет числа 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Всего будет десять проходов, потому что в диапазоне от 1 до 10 десять целых чисел. Если условие остановки ошибочно задать как «счётчик меньше 10», последнее число не появится.
Значение n вводит пользователь, поэтому верхняя граница становится известна перед началом вычисления. Для накопления суммы заведём переменную и будем прибавлять к ней очередное натуральное число. Счётчик на каждом проходе должен продвигаться к n, иначе цикл не завершится.
Ответ: после завершения в переменной суммы будет 1 + 2 + … + n. Начальная сумма равна нулю, чтобы первое прибавление дало именно 1, а не лишнее число. Если n равно 4, последовательные значения суммы будут 1, 3, 6 и 10.
Нужно читать числа, пока пользователь не введёт 0, и отдельно учитывать положительные значения. Здесь продолжение зависит от введённых данных, а не от заранее известного количества чисел. Если первым введено 0, тело с подсчётом не должно засчитать его как положительное.
Ответ: после ввода 0 программа выводит количество положительных чисел. Такой вариант начинает с чтения, поэтому его можно выразить циклом с предусловием: при первом же нуле тело не выполнится. Цикл с постусловием тоже возможен, если тело сначала получает число, а затем проверяет, не пора ли остановиться.
Не изменять переменную, от которой зависит условие цикла. Так происходит, если забыть увеличить счётчик или обновить данные после прохода. Условие остаётся истинным, и цикл выполняется бесконечно; проверьте, меняется ли нужная переменная и приближается ли она к остановке.
Неверно задать начальное или конечное значение счётчика. Из-за ошибки на единицу нужное число может пропуститься или появиться лишнее повторение. Это часто случается, когда не уточняют, входят ли обе границы диапазона; проверьте первый и последний проход вручную.
Перепутать условие продолжения и условие завершения. Например, программа должна работать, пока число не равно нулю, а записано условие, подходящее для остановки. Ошибку легче заметить, если проверить условие на примере обычного значения и на значении остановки и определить, какой результат проверки нужен в каждом случае.
Считать, что цикл с предусловием обязательно выполнит тело хотя бы раз. Это неверно, потому что проверка происходит до первой команды тела. Ошибку допускают, когда мысленно представляют цикл как последовательность «сначала действие, потом проверка»; проверьте исходное условие до запуска и отдельно рассмотрите случай, когда оно сразу ложно.
Для программирования циклов нужны переменные, присваивание, логические условия и ветвление: без них трудно задать счётчик, накопить результат и определить, когда остановиться. Условный оператор помогает выбирать действия внутри тела цикла, например увеличивать счётчик только при положительном числе. Поэтому понимание условий и изменения переменных помогает правильно организовать повторение.
Циклы применяют при обработке последовательностей данных, вычислении сумм и произведений, поиске элементов и моделировании процессов. В каждом случае повторяют действие над очередным значением или шагом модели, пока данные не закончатся либо не наступит нужное состояние. Умение выбрать правило остановки особенно важно при работе с неизвестным заранее количеством элементов.
Чем цикл отличается от условного оператора?
Условный оператор выбирает, какие команды выполнить, и делает такой выбор при проверке условия. Цикл повторяет команды, пока выполняется заданное правило или пока счётчик не пройдёт диапазон.
Когда лучше использовать цикл с параметром?
Он удобен, когда заранее известны границы диапазона и шаг изменения счётчика. Например, так можно вывести числа от 1 до 10 или обработать все элементы списка известной длины.
Почему цикл может выполняться бесконечно?
Так бывает, если условие цикла остаётся истинным и программа не меняет данные, от которых оно зависит. Проверь, изменяются ли счётчик или другие переменные и может ли условие в итоге стать ложным.
Может ли тело цикла с предусловием не выполниться ни разу?
Да. Условие проверяется до первого выполнения тела, поэтому при ложном условии программа сразу пропускает команды цикла.
Как выбрать между циклом с предусловием и циклом с постусловием?
Выбирай цикл с предусловием, если сначала нужно проверить, следует ли выполнять команды. Цикл с постусловием подходит, когда тело необходимо выполнить хотя бы один раз, а проверку провести после этого.
§ 21. Программирование циклов