"Информатика. Учебное пособие для учреждений общего среднего образования с русским языком обучения", В. М. Котов, А. И. Лапо и Ю.А. Быкадоров, Е.Н. Войтехович
Цикл с предусловием позволяет повторять команды, пока выполняется заданное логическое условие. Перед каждой итерацией алгоритм проверяет условие: если оно истинно, выполняется тело цикла, а если ложно — цикл заканчивается. Поэтому тело может не запуститься ни разу. Такая конструкция нужна, когда заранее неизвестно, сколько повторений потребуется, например при поиске числа или обработке данных. Чтобы цикл завершился, команды внутри него должны изменять данные, от которых зависит условие.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Цикл с предусловием — конструкция, в которой перед каждым выполнением тела проверяется условие; тело выполняется, пока условие истинно. Слово «предусловие» подсказывает порядок: проверка происходит заранее, до команд тела. Это позволяет повторять действия, не зная заранее точного количества повторений.
Условие цикла — логическое выражение, определяющее, продолжится цикл или завершится. Его результатом может быть только истина или ложь: например, n > 0 истинно при положительном n. Условие нужно, чтобы алгоритм мог принять решение — выполнять очередной повтор или перейти дальше.
Тело цикла — команда или последовательность команд, повторяемая при истинном условии. В нём могут находиться вычисления, вывод данных и изменение значений переменных. Тело нужно для действий, которые должны выполняться снова и снова по одному правилу.
Итерация цикла — одно выполнение тела цикла. Например, если тело выполнилось четыре раза, говорят, что цикл совершил четыре итерации. Это понятие помогает подсчитывать повторы и прослеживать, как меняются данные на каждом шаге.
В языке Pascal цикл с предусловием записывают так: while условие do команда. Слово while вводит проверяемое выражение, а do отделяет его от команды, которая будет повторяться. Если тело состоит из нескольких команд, их объединяют в составной оператор begin ... end, чтобы цикл повторял всю группу, а не только первую команду.
Условие расположено перед телом потому, что оно должно разрешить или запретить очередной повтор ещё до начала действий. Сначала программа вычисляет логическое выражение и получает значение «истина» или «ложь». Только истинный результат приводит к выполнению тела и началу очередной итерации; так не выполняются команды, которые уже не нужны.
Работа цикла состоит из повторяющихся шагов: проверить условие, при истинном результате выполнить тело, затем вернуться к проверке. После выполнения тела данные могут измениться, поэтому результат следующей проверки способен отличаться от предыдущего. Если условие снова истинно, начинается новая итерация; если ложно, управление переходит к команде после цикла.
Тело может не выполниться ни разу, потому что программа не обязана входить в него до первой проверки. Если условие ложно сразу, проверка завершает цикл ещё до первой итерации. Например, при n = 0 выражение n > 0 уже ложно, поэтому цикл, предназначенный для положительных n, пропустит тело.
Завершение зависит от того, станет ли условие ложным. Для этого тело обычно меняет переменную, участвующую в условии: например, уменьшает положительное n, пока оно не станет равным нулю. Если значение не меняется или меняется не в ту сторону, условие может оставаться истинным бесконечно. Поэтому при составлении алгоритма нужно заранее представить, как изменятся данные и когда проверка остановит повторения.
| Элемент или ситуация | Что происходит |
|---|---|
| Проверка условия перед первой итерацией | Программа вычисляет условие до выполнения тела. |
| Условие истинно | Выполняется тело цикла, то есть начинается итерация. |
| Условие ложно | Цикл завершается, управление переходит к следующей команде. |
| Изменение данных в теле цикла | Значения могут измениться, чтобы приблизить завершение цикла. |
| Повторная проверка | После итерации условие вычисляется снова; цикл продолжается только при истинном результате. |
Читайте таблицу сверху вниз для первой проверки, а затем возвращайтесь к строке о повторной проверке после каждого выполнения тела. Так можно проследить, почему при истинном условии программа повторяет команды, а при ложном — выходит из цикла. При разборе задачи отдельно отмечайте изменение данных: именно оно часто определяет, когда повторения закончатся.
Условие. Дано число n. Пока n больше 0, нужно выводить n и уменьшать его на 1. Требуется составить цикл. Смысл условия «пока n больше 0» — продолжать работу для положительных значений, а остановиться, когда n дойдёт до нуля.
Запишем условие продолжения: n > 0. Оно проверяется перед каждым выполнением тела.
В тело поместим две команды: вывести n и уменьшить n на 1. Уменьшение обязательно, иначе положительное значение могло бы повторяться бесконечно.
Запишем команды в составном операторе Pascal: while n > 0 do begin writeln(n); n := n - 1; end. После каждого уменьшения программа возвращается к проверке.
Ответ. Цикл выводит n, n − 1 и далее до 1, если начальное n положительно. При n = 0 условие ложно сразу, поэтому выводов не будет. После вывода единицы переменная станет равна нулю, и следующая проверка завершит цикл.
Условие. Начать с s = 0 и k = 1. Пока s меньше 100, прибавлять k к s и увеличивать k на 1. Нужно определить число выполнений тела. Проверка выполняется до сложения, поэтому для ответа нужно учитывать значение суммы перед каждой итерацией.
При первой проверке s = 0, условие 0 < 100 истинно. После тела s = 1, k = 2.
Далее к сумме последовательно прибавляются 2, 3 и так далее. После n-й итерации сумма равна 1 + 2 + ... + n = n(n + 1) / 2.
Проверяем, когда сумма впервые станет не меньше 100: при n = 13 она равна 91, поэтому цикл продолжится; при следующем сложении получаем 105. После этого условие s < 100 ложно.
Ответ. Тело выполнится 14 раз. На последней итерации к сумме 91 прибавится 14, и получится 105. Следующая проверка уже остановит цикл.
Условие. Нужно найти наименьшее натуральное n, при котором 1 + 2 + ... + n > m. Поскольку заранее неизвестно, сколько слагаемых понадобится, удобно накапливать сумму в цикле. Цикл должен продолжаться, пока текущая сумма ещё не превысила m.
Зададим начальные значения: n = 0 и s = 0. Пока s <= m, увеличиваем n на 1 и прибавляем n к s.
После каждой итерации сумма становится суммой первых n натуральных чисел. Если s всё ещё не больше m, условие остаётся истинным и алгоритм ищет следующее число.
Когда очередное слагаемое сделает s больше m, следующая проверка выражения s <= m даст ложь. Значение n при этом — наименьшее подходящее число, поскольку меньшие значения проверялись раньше.
Ответ. Алгоритм можно записать так: n := 0; s := 0; while s <= m do begin n := n + 1; s := s + n; end. После завершения n — искомое наименьшее натуральное число, а s > m. Если m меньше 1, цикл всё равно выполнится один раз и найдёт n = 1.
Ожидать хотя бы одно выполнение тела. Так ошибаются, представляя любой цикл как обязательное повторение команд. Но при ложном условии на первой проверке тело пропускается полностью. Для самопроверки подставь начальные значения в условие до того, как прослеживать команды тела.
Путать условие продолжения и условие завершения. Если записать условие остановки вместо условия продолжения, цикл может закончиться слишком рано или повторяться не в тех случаях. Причина ошибки — слова «пока» и «до тех пор» легко прочитать по-разному. Проверь условие на двух ситуациях: когда повторять нужно и когда уже пора остановиться.
Не изменять переменную, от которой зависит условие. Тогда значение логического выражения может не измениться, и цикл будет выполняться бесконечно. Иногда забывают команду изменения или меняют другую переменную. Проследи по итерациям, меняется ли нужное значение и может ли оно привести условие к ложному результату.
Изменять переменную в неверном направлении. Например, увеличивать n в цикле, который должен остановиться при n = 0, оставляя условие истинным или возвращая его к истинности. Такая ошибка возникает, если не проверить несколько последовательных шагов. Запиши значения до первой проверки и после тела, затем убедись, что путь к завершению действительно существует.
Для записи цикла нужны навыки составления алгоритмов на изучаемом языке, работы с переменными и присваиванием: тело меняет данные, а присваивание задаёт новые значения. Также необходимо уметь читать логические выражения и определять, истинны они или ложны при конкретных значениях. Цикл с предусловием особенно полезен при обработке последовательностей и поиске, когда заранее неизвестно число повторений. Например, можно продолжать вычисления, пока не найдено подходящее значение.
Чем цикл с предусловием отличается от цикла, в котором условие проверяется после тела?
В цикле с предусловием условие проверяют перед выполнением тела, поэтому тело может не запуститься. Если условие проверяют после тела, команды выполняются хотя бы один раз, и только затем решается, повторять ли их.
Может ли тело цикла с предусловием не выполниться ни разу?
Да. Если при первой проверке условие ложно, алгоритм сразу переходит к команде после цикла. Ни одной итерации не происходит.
Когда проверяется условие — до или после выполнения команд тела?
Условие проверяется до выполнения тела. После каждой итерации оно проверяется снова, чтобы решить, начинать ли следующую.
Почему цикл может выполняться бесконечно?
Это случается, если условие всё время остаётся истинным. Например, тело не меняет нужную переменную или меняет её в неверном направлении. Проверь, как изменяются данные после каждой итерации.
Как понять, что условие цикла выбрано правильно?
Определи, в каких случаях нужно продолжать повторения, и запиши именно эти случаи как истинное условие. Затем проверь начальные значения и убедись, что изменения в теле приведут к ложному результату.
17.1. Оператор цикла с предусловием