Операторы цикла заставляют выполняться входящие в их состав внутренние операторы несколько раз. В языке Паскаль существует три вида операторов цикла.
Если число повторений цикла известно перед его началом, то используют наиболее наглядный, но все же имеющий ограниченную область применения оператор FOR:
For <параметр цикла>:= <начальное значение> To | DownTo <конечное значение> Do <внутренний оператор – тело цикла>
Внутренний оператор будет выполняться один раз для каждого значения параметра цикла из указанного диапазона. Если используется служебное слово То, то при каждом новом выполнении берется следующее значение, при DownTo – предыдущее (используются функции Succ и Pred), то есть тип параметра цикла должен быть дискретным.
При использовании оператора FOR необходимо соблюдать следующие правила:
1. Начальное и конечное значение являются выражениями (константа – вырожденное выражение), а параметр цикла – имя переменной (может быть и структурированной, например, элемент массива).
|
|
2. Параметр цикла, начальное и конечное значение должны быть одного и того же дискретного типа (не допускается использование типа Real) и не должны изменяться внутри оператора FOR.
3. Если используется служебное слово То, а начальное значение больше конечного (или меньше в случае DownTo), то внутренний оператор не выполнится ни разу.
Пример на вычисление суммы с оператором FOR приводился ранее. Если количество повторений заранее известно, но параметр цикла – вещественный, то в явном виде этот оператор использовать нельзя. Ограничение на дискретный тип можно обойти, если ввести дополнительную целую переменную. Например, необходимо вычислить таблицу синуса для значений аргумента от 0.5 до 0.7 с шагом 0.01. Введем дополнительную переменную i, изменяющуюся от 0 до 20 (всего надо вычислить 21 точку). Если учесть, что внутри цикла надо использовать не только оператор вычисления синуса, но и оператор вывода, то в операторе цикла используем операторные скобки.
Программа будет выглядеть следующим образом:
Program Tabl;
Var
i:integer;
x:real;
Begin
WriteLn (' Таблица синуса');
For i:=0 To 20 Do
Begin
x:= i/100+0.5;
WriteLn ('x=', x:4:1,'sin(x)=', sin(x):8:5);
end
end.
Если же количество повторений заранее неизвестно, как, например, при вычислении кубического корня, то используют другие операторы цикла.