Оператор цикла с параметром или цикла со счетчиком for имеет такую структуру:
for<параметр_цикла> := <нач_знач> to <кон_знач> do <оператор>;
где <параметр_цикла> – переменная типа Integer (точнее, любого по-, рядкового типа);
<нач_знач> – начальное значение - выражение того же типа;
<кон_знач> – конечное значение - выражение того же типа;
<оператор> – произвольный оператор Object Pascal, в том числе и составной. Исполняемый в цикле оператор часто называют телом цикла.
При выполнении оператора for вначале вычисляется выражение <нач_знач> и осуществляется присваивание <параметр цикла>:= <нач_знач>.
После этого циклически повторяется:
1. проверка условия <параметр_цикла> <= <кон_знач>; если условие не выполнено, оператор for завершает свою работу;
2. выполнение оператора <оператор>;
3. наращивание переменной <параметр_цикла> на единицу;
4. переход к шагу 1 .
Следует заметить, что условие, управляющее работой оператора for, проверяется перед выполнением оператора <оператор>. Это значит, что если условие не выполняется в самом начале работы оператора for, исполняемый оператор не будет выполнен ни разу.
Шаг наращивания параметра цикла строго постоянен и равен +1 (это цикл с возрастающим параметром или счетчиком).
а) цикл с возрастающим параметром б) цикл с убывающим параметром
Рис. 3.5.Алгоритм оператора цикла for
Однако на практике нередко возникает необходимость воспользоваться циклом с убывающим параметром. В таких ситуациях пользуются другой формой оператора for:
for<параметр_цикла> := <нач_знач> downto <кон_знач> do <оператор>;
Замена зарезервированного слова toна downto означает, что шаг наращивания параметра цикла равен (-1), а управляющее условие приобретает вид <параметр_цикла> >= <кон_знач>.
Алгоритм, соответствующий оператору цикла с параметромfor, представлен на рис. 3.5.
Переменную-счетчик (<параметр_цикла>) можно использовать внутри тела цикла (но ни в коем случае не изменять).
Далее рассмотрим примеры применения циклов с возрастающим и убывающим параметром.
Как видно, листинги программ отличаются только организацией циклов: в первом случае от 1 до n с шагом +1, во втором варианте от n до 1 с шагом -1.
Предложенные программы можно оптимизировать, уменьшив количество повторений циклов на 1 раз: циклы сделать соответственно от 2 до n и от n до 2.
Пример программы расчета факториала вводимого числа с использованием цикла с возрастающим параметром:
Var
n, f, i :integer;
{n – число, факториал которого следует найти; f- найденное значение факториала , i – счетчик цикла}
Begin
write(’Введите n (больше 1):’);
readln(n);
if(n>1)then
begin{введено правильное число}
f:=1;
for i:=1 to n do{цикл расчета факториала}
f:=f*i;
writeln(’Факториал числа ’,n,’ равен:’,f);
End
Else
writeln(’Введено неверное n! Факториал не рассчитан!’);
End.
Пример той же программы расчета факториала вводимого числа с использованием цикла с убывающим параметром:
Var
n, f, i :integer;
{n – число, факториал которого следует найти; f- найденное значение факториала , i – счетчик цикла}
Begin
write(’Введите n (больше 1):’);
readln(n);
if(n>1)then
begin{введено правильное число}
f:=1;
for i:=n downto 1 do{цикл расчета факториала}
f:=f*i;
writeln(’Факториал числа ’,n,’ равен:’,f);
End
Else
writeln(’Введено неверное n! Факториал не рассчитан!’);