Иногда необходимо повторить определенные действия в программе. Повторение некоторой последовательности действий называется циклом. Саму последовательность повторяющихся действий называют телом цикла.
Если число повторений известно заранее, то используется структура, которая называется циклом с заданным (известным) числом повторений, или циклом со счетчиком. Этот вид цикла является частным случаем цикла с условием. Мы начинаем с этого вида цикла в силу его простоты и наглядности.
Оператор цикла for
На языке Паскаль повторение некоторой последовательности действий известное число раз выполняет оператор for. Подсчет количества выполняемых действий осуществляется при помощи специальной переменной — счетчика. Поэтому цикл for называют иногда циклом со счетчиком. Цикл for на Паскале может быть представлен в двух формах.
Первая форма последовательно наращивает счетчик: for<переменная порядкового типа>:=<начальное значение> to <конечное значение> do <оператор>
Вторая форма последовательно уменьшает счетчик: for<переменная порядковоготипа>:=<начальное значение> downto <конечное значение> do <оператор>
Оператор for с последовательным увеличением счетчика
Пример 6.1. Вывод на экран квадратов чисел от 1 до 10
Program Test1; var N: integer; begin for N:=l to 10 do { Переменная N будет меняться от 1 до 10 с шагом 1 } writeln(sqr(N)); { Эта строка - тело цикла. Оно выполняется 10 раз } readln end.
Поясним пример 6.1. Переменная N является счетчиком цикла. Счетчик цикла всегда должен иметь порядковый тип (то есть он не может иметь тип real). В операторе for указаны его начальное и конечное значения. Начальное значение не обязательно равно 1! При первом выполнении тела цикла N = 1, при втором — N = 2, и т. д. При последнем выполнении тела цикла N = 10. Каждый раз перед выполнением тела цикла текущее значение N сравнивается с конечным. После каждого выполнения тела цикла переменная N увеличивается на 1.
Рис. 6.1. Блок-схема организации цикла в примере 6.1
Как только N превысит конечное значение, выполнение цикла прекращается. Считается, что после окончания цикла переменная цикла не определена (то есть в разных реализациях языка Паскаль она может принимать разные значения). Иными словами, неправильно считать, что после окончания цикла переменная-счетчик цикла имеет какое-то определенное значение. Крайне не рекомендуется внутри цикла самостоятельно менять счетчик цикла, особенно в сторону уменьшения. Это может привести к «зацикливанию» программы (бесконечному повторению тела цикла).
Оператор for с последовательным уменьшением счетчика
Счетчик может изменяться с шагом -1. Это вторая форма оператора for (for... downto ... do).
Пример 6.2. Вывод на экран кубов чисел от 11 до 5
Program Test2; var N: integer; begin forN:=11downto 5do { Счетчик N изменяется с шагом -1 } write(N*N*N:5); { Эта строка - тело цикла; оно выполняется 8 раз, так как N изменяется от 11 до 5 с шагом -1 } writeln; { Этот оператор нужен, чтобы закончить вывод чисел в одну строку } readln end.