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