"Информатика. Учебное пособие для учреждений общего среднего образования с русским языком обучения", В.М. Котов, А.И. Лапо, Е.Н. Войтехович
Цикл с предусловием позволяет повторять команды, пока заданное логическое условие истинно. Перед каждым проходом алгоритм проверяет условие, поэтому тело цикла может выполниться много раз или не выполниться вовсе. Такой цикл удобен, когда заранее неизвестно, сколько повторений понадобится: например, при вводе чисел до появления нуля. Чтобы цикл завершился, в его теле обычно изменяют данные, от которых зависит условие.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Цикл с предусловием — команда, в которой условие проверяется до выполнения тела, поэтому тело может не выполниться ни разу. Иными словами, алгоритм сначала решает, нужно ли начинать очередной проход, и лишь затем выполняет команды. Это позволяет использовать цикл, даже если число повторений заранее неизвестно или может оказаться равным нулю.
Условие цикла — логическое выражение, по результату проверки которого определяется, выполнять ли очередной проход цикла. Оно может сравнивать числа, например n > 0, и принимает значение «истина» или «ложь». Условие нужно, чтобы алгоритм мог выбрать между продолжением повторений и выходом из цикла.
Тело цикла — команды, повторяемые, пока условие цикла истинно. В теле могут находиться вычисления, ввод данных или изменение счётчика. Оно нужно для выполнения той работы, которую алгоритму требуется повторить.
Итерация — одно выполнение тела цикла. Например, если тело выполнилось четыре раза, цикл сделал четыре итерации. Это понятие помогает считать проходы и проверять, сколько раз повторились команды.
Цикл нужен, когда одну и ту же последовательность команд требуется выполнить несколько раз, а точное число повторений заранее может быть неизвестно. Если заранее написать команды для каждого возможного повторения, алгоритм станет длинным, а для неизвестного числа повторов это вообще неудобно. Цикл заменяет множество одинаковых фрагментов одной командой с телом. Число проходов определяется ходом выполнения алгоритма.
Сначала проверяется условие: если оно истинно, выполняется тело цикла; затем управление возвращается к проверке. Так происходит потому, что после очередного набора команд ситуация может измениться, и алгоритм должен заново решить, продолжать ли работу. Например, если n уменьшается на единицу, условие n > 0 проверяют снова уже для нового значения n. Проверка перед каждым проходом не позволяет выполнять тело, когда продолжение больше не нужно.
Когда условие становится ложным, повторение прекращается и выполняется команда, следующая за циклом. Ложное значение означает, что требование для очередного прохода больше не выполнено. Поэтому алгоритм не возвращается в тело, а продолжает работу после цикла. Эта команда может использовать результат, накопленный за время повторений.
Если условие ложно уже при первой проверке, тело не выполняется; поэтому цикл с предусловием подходит для ситуаций с нулём или большим числом повторений. Это удобно, например, если нужно обрабатывать числа, пока ввод не закончился специальным значением: оно может встретиться сразу. При другом наборе исходных данных тело выполнится несколько раз. Число повторов зависит от начального состояния и дальнейших изменений данных.
Чтобы цикл завершился, его тело обычно должно изменять данные, от которых зависит условие; иначе возможно бесконечное повторение. Если проверяется n > 0, а n в теле не меняется, результат проверки останется прежним. Алгоритм будет снова и снова выполнять те же команды. Поэтому при составлении цикла нужно заранее определить, какое изменение постепенно приведёт условие к ложному значению.
| Этап | Что происходит |
|---|---|
| Проверка условия до входа в тело | Алгоритм вычисляет условие перед первым проходом. |
| Условие истинно — выполнить тело | Команды тела выполняются один раз, это одна итерация. |
| После тела — вернуться к проверке | Алгоритм снова вычисляет условие для изменённых данных. |
| Условие ложно — выйти из цикла | Повторение прекращается, выполняется следующая команда. |
| Тело не выполнено ни разу, если условие изначально ложно | Алгоритм сразу переходит к команде после цикла. |
Читайте таблицу сверху вниз: сначала происходит проверка, а не выполнение тела. Если условие истинно, после тела алгоритм возвращается к проверке; если ложно — покидает цикл. Последняя строка показывает особый случай, когда проверка не разрешает ни одного прохода.
Задача 1. Дано натуральное число n. Уменьшать его на 1, пока оно больше 0, и определить, сколько раз выполнено уменьшение. Нужно считать каждое уменьшение, поэтому заведём отдельный счётчик. Условие проверяется до изменения числа, а при каждой итерации меняются и n, и счётчик.
Например, при n = 3 тело выполнится при значениях 3, 2 и 1. После третьего уменьшения n станет равным 0, а счётчик — 3. Ответ: выполнено n исходных уменьшений; для числа 3 — три уменьшения.
Задача 2. Вводить числа, пока не введён ноль, и найти сумму введённых ненулевых чисел. Завершающее значение нужно проверить до добавления: ноль сообщает, что ввод пора остановить, но сам в сумму не входит. Для цикла удобно сначала получить очередное число, а затем повторять обработку, пока оно не равно нулю.
Например, для последовательности 4, −2, 5, 0 к сумме добавятся только 4, −2 и 5. Ноль завершает ввод, но не изменяет результат. Ответ: сумма равна 7.
Задача 3. Найти наименьшее натуральное k, при котором сумма 1 + 2 + … + k станет больше заданного числа A. Сумму будем накапливать по одному слагаемому, а k — считать количество уже добавленных чисел. Продолжать нужно именно пока сумма не больше A: как только она превысит A, требуемое значение найдено.
Проверка предыдущего значения нужна, чтобы убедиться в минимальности: если бы сумма для меньшего k уже превышала A, следовало бы остановиться раньше. Например, при A = 6 после добавления 1, 2 и 3 сумма равна 6, поэтому цикл продолжится; после добавления 4 она станет 10. Ответ: при A = 6 наименьшее k равно 4.
Ожидать, что тело обязательно выполнится хотя бы раз. Так думают, если представляют цикл как команды, которые сначала запускаются, а потом проверяются. Но при предусловии проверка стоит перед телом, поэтому ложное условие сразу приводит к выходу. Проверьте начальные данные и вычислите условие до первой итерации.
Менять условие после выполнения тела, а не до его повторной проверки. Если проверку фактически откладывают, тело может выполниться ещё раз после того, как нужное значение уже достигнуто. Обычно это происходит из-за неверного порядка команд или запоздалого изменения переменной. Проследите вручную один проход: изменение должно произойти до новой проверки условия.
Не менять данные, от которых зависит условие. Если значение переменной остаётся прежним, проверка может каждый раз давать один и тот же результат, и цикл никогда не остановится. Такую ошибку легко допустить, если условие записано отдельно от команд тела. Сравните переменные в условии с переменными, которые изменяются в теле, и проверьте, может ли условие стать ложным.
Неверно задавать условие остановки или путать его с условием выхода. В цикле повторение обычно продолжается, пока проверяемое условие истинно; значит, ложь означает выход. Путаница между этими формулировками приводит к преждевременному завершению или лишним проходам. Проверьте условие на двух примерах: когда продолжать нужно и когда уже пора остановиться.
Для работы с циклом нужно уметь составлять логические выражения и сравнивать значения: именно проверка определяет, продолжится ли выполнение. Значения «истина» и «ложь» помогают понять результат этой проверки. Порядок команд тоже важен: алгоритм последовательно выполняет тело, а затем возвращается к условию.
Цикл опирается на алгоритмы с ветвлением, потому что после проверки выбирается один из двух путей: выполнить тело или выйти. Он пригодится при обработке последовательностей неизвестной длины, например при вводе данных до сигнала остановки. Позже эта идея поможет изучать другие циклические конструкции и сравнивать способы организации повторений.
Чем цикл с предусловием отличается от цикла с постусловием?
В цикле с предусловием условие проверяют до выполнения тела, а в цикле с постусловием — после него. Поэтому цикл с постусловием всегда выполняет тело хотя бы один раз, а с предусловием может не выполнить ни разу.
Может ли тело цикла с предусловием не выполниться ни разу?
Да. Если условие ложно уже при первой проверке, алгоритм сразу переходит к команде после цикла. Ни одной итерации в этом случае не происходит.
Что произойдёт, если условие цикла всегда истинно?
Цикл не завершится и будет повторять тело бесконечно. Чтобы этого не произошло, тело должно менять данные, влияющие на условие, так чтобы оно однажды стало ложным.
Когда нужно проверять условие — до или после команд тела?
В цикле с предусловием условие проверяют до команд тела. Если оно истинно, выполняют очередной проход, а затем возвращаются к проверке.
Как понять, что цикл завершится?
Проследи, меняются ли в теле данные, от которых зависит условие. Если при повторениях они приближают условие к ложному значению, цикл может завершиться; если не меняются или условие всегда остаётся истинным, завершения не будет.
11.2. Цикл с предусловием