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