"Информатика. Учебное пособие для учреждений общего среднего образования с русским языком обучения", В. М. Котов, А. И. Лапо и Ю.А. Быкадоров, Е.Н. Войтехович
Оператор цикла с параметром помогает повторить команды для значений, которые перебираются в заданных границах. Он особенно удобен, когда заранее известен диапазон чисел или количество повторений. В цикле for специальная переменная автоматически меняется на единицу: направление to увеличивает её, а downto уменьшает. Границы перебора обычно включаются, а если выбранное направление им не подходит, тело цикла не выполняется.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Оператор цикла с параметром — команда, которая многократно выполняет тело цикла, изменяя специальную переменную от начального значения к конечному. В Pascal для него используют слово for. Такой оператор нужен, чтобы не записывать одинаковые команды много раз и точно задать порядок перебора.
Параметр цикла — переменная целого или другого порядкового типа, которая автоматически принимает очередные значения при выполнении цикла. Например, в записи for i := 1 to 5 do параметром является i. По нему программа понимает, какое значение обрабатывается сейчас, поэтому его не нужно обновлять отдельной командой.
Начальное и конечное значения — границы изменения параметра, определяющие первое и последнее возможное выполнение тела цикла. В примере for i := 1 to 5 do это числа 1 и 5. Они помогают задать диапазон, а при подходящем направлении обе границы включаются в перебор.
Тело цикла — один оператор или составной оператор, выполняемый для каждого значения параметра. Например, телом может быть команда вывода значения i. Если нужно выполнить несколько команд, их объединяют словами begin и end, чтобы цикл повторял их вместе.
Оператор for выбирают, когда заранее известны число повторений или диапазон значений параметра. Тогда границы можно указать прямо в заголовке цикла, и программе не требуется каждый раз проверять отдельное условие завершения. Это делает перебор наглядным: сразу видно, с какого значения он начинается и где должен закончиться. Для задач, где повторение зависит от меняющегося условия, чаще подходят while или repeat.
При направлении to параметр сначала получает начальное значение, после чего выполняется тело цикла. Затем параметр увеличивается на единицу и сравнивается с конечным значением; если он ещё не прошёл эту границу, начинается следующая итерация. Например, for i := 2 to 4 do перебирает 2, 3 и 4. Конечное значение обрабатывается, а затем цикл завершается.
Направление downto используют для перебора от большего значения к меньшему. Параметр получает начальное значение, тело выполняется, а после каждой итерации параметр уменьшается на единицу. В цикле for i := 4 downto 2 do значения будут идти в порядке 4, 3, 2. Такой способ удобен, например, если нужно просмотреть элементы массива с конца.
Направление должно соответствовать расположению границ, иначе начальное значение уже находится за конечной границей в сторону перебора. При to параметр движется вверх, поэтому если начало больше конца, выполнить тело нечему. При downto движение идёт вниз, и тело не выполнится, если начало меньше конца. Это позволяет избежать бессмысленного перебора, но при ошибке в границах программа может не сделать то, что ожидалось.
Если в теле нужна одна команда, её записывают после do. Несколько команд объединяют составным оператором: ставят begin перед первой командой и end после последней, чтобы все они повторялись на каждой итерации. Параметр цикла вручную не изменяют: его шаг и направление уже задаёт for. Иначе можно нарушить последовательность значений, пропустить часть перебора или получить непредсказуемую работу программы.
| Характеристика | Направление to | Направление downto |
|---|---|---|
| Общий вид записи | for i := a to b do оператор | for i := a downto b do оператор |
| Изменение параметра после итерации | Увеличивается на 1 | Уменьшается на 1 |
| Условие выполнения цикла | Начальное значение не больше конечного | Начальное значение не меньше конечного |
| Пример диапазона значений параметра | 2, 3, 4, 5 | 5, 4, 3, 2 |
| Ситуация, когда тело не выполняется | Начальное значение больше конечного | Начальное значение меньше конечного |
Сначала выберите столбец по направлению перебора: вверх или вниз. Затем проверьте, согласованы ли с ним начальное и конечное значения. В таблице также можно сверить, как изменяется параметр и в каком случае тело не запустится.
Нужно показать десять последовательных значений в возрастающем порядке. Границы известны, поэтому подходит for с направлением to. Параметр i будет по очереди принимать значения от 1 до 10, а тело цикла — выводить текущее значение.
Получится запись: for i := 1 to 10 do writeln(i). При каждом значении параметра на экран выводится отдельное число, включая обе границы. Ответ: программа выводит числа от 1 до 10 по возрастанию.
Сумму удобно накапливать в отдельной переменной s, добавляя к ней подходящие числа. Для перебора можно взять все числа от 2 до n, а затем проверить, является ли очередное число чётным. Остаток от деления на 2 равен нулю у чётного числа, поэтому условие проверки — i mod 2 = 0.
Начальный ноль важен: он позволяет начать накопление без добавления постороннего числа. Если n меньше 2, перебор в направлении to не выполнится, а сумма останется равной нулю. Ответ программы — сумма всех чётных чисел от 2 до n; например, при n = 8 она равна 20.
Пусть в массиве a находятся n элементов с индексами от 1 до n. Чтобы начать с последнего, первый индекс перебора должен быть n, а последний — 1. Поскольку индексы уменьшаются, выбираем направление downto и обращаемся к элементу по текущему значению i.
Если элементы массива равны 10, 20, 30, а n = 3, параметр примет значения 3, 2, 1. Поэтому программа выведет a[3], затем a[2] и a[1]. Ответ: элементы будут показаны от последнего к первому.
Используют to при движении от большего значения к меньшему и ожидают, что цикл начнётся. Так бывает, если направление выбирают по привычке, не проверяя границы. При to начальное значение должно быть не больше конечного; проверьте порядок значений или замените направление на downto.
Пытаются изменить параметр цикла внутри тела, например прибавить к нему ещё единицу. Это кажется способом ускорить перебор, но значения параметра уже автоматически меняются оператором for. Не задавайте параметру новые значения в теле и проверьте, что шаг перебора соответствует задаче.
Забывают begin и end, когда в теле нужны несколько команд. Тогда после do циклом повторяется только первый оператор, а остальные выполняются один раз или оказываются не там, где ожидалось. Проверьте, что все команды, которые должны повторяться, находятся между begin и end.
Считают, что конечное значение не входит в цикл, или ошибаются в самой границе. В обычном for последняя граница включается, если направление подходит, поэтому результат может содержать лишний или пропущенный элемент при неверном подсчёте. Сверьте первое и последнее значения вручную и проверьте, что конечная граница соответствует условию задачи.
Чтобы использовать цикл с параметром, нужны знания о переменных и присваивании: параметр получает начальное значение, а накопитель суммы обновляется командой присваивания. Составной оператор begin и end позволяет объединить несколько команд в теле, а условный оператор — отбирать значения, например только чётные. Циклы while и repeat помогают сравнить перебор с заранее заданными границами и повторение, которое зависит от условия.
for особенно полезен при обработке массивов: значение параметра можно использовать как индекс элемента. С его помощью также строят таблицы значений, подсчитывают суммы и организуют вложенные циклы, когда один цикл выполняется внутри другого. Понимание направления и границ помогает избежать выхода за нужный диапазон.
Когда удобнее использовать for, а когда while или repeat?
for удобен, когда заранее известны границы перебора или число повторений. while и repeat чаще используют, если продолжение цикла зависит от условия, которое может измениться во время работы программы.
Входит ли конечное значение в цикл?
Да, при подходящем направлении конечное значение включается в перебор. Например, в цикле for i := 1 to 3 значение 3 тоже будет обработано.
Что произойдёт, если начальное значение больше конечного при направлении to?
Тело цикла не выполнится ни разу, потому что направление to увеличивает параметр, а начальное значение уже выше конечного. Для перебора в обратную сторону используют downto.
Можно ли изменить параметр цикла внутри его тела?
Нет, параметр цикла не следует изменять вручную. Его значения автоматически задаются оператором for, а попытка вмешаться может нарушить порядок перебора.
Как записать в теле цикла несколько команд?
Несколько команд заключают в составной оператор begin и end. Тогда при каждом значении параметра выполняются все команды между ними.
17.2. Оператор цикла с параметром