1. Тело цикла – всегда один оператор. Если нужно, чтобы тело цикла состояло из нескольких операторов, то их объединяют в один составной оператор с помощью операторных скобок begin, end.
For i:=l to n do
Begin
S:=S+sin(x)/cos(x);
x=x+0.01;
writeln('S=',S)
end.
Операторы, взятые в операторные скобки begin – end, считаются одним составным оператором.
2. Начальное и конечное значения параметра цикла в общем случае являются выражениями. Тип этих выражений и тип параметра цикла должны совпадать. Здесь допускается применение любых типов, которые упорядочены с каким-либо фиксированным шагом (порядковые типы), это может быть любой скалярный тип, кроме вещественного, т.е. байтовый, целый, символьный, перечисляемый, интервальный, булевский. На практике чаще всего применяют целочисленный тип.
3. В теле цикла параметр цикла не должен изменяться.
4. Нельзя с помощью оператора перехода goto войти в тело цикла, минуя заголовок.
5. Выйти из тела цикла в программу можно по if..goto, не дожидаясь полного перебора параметров цикла.
Оператор Repeat
Repeat – оператор цикла с постусловием.
Общий вид. В отличие от for, оператор repeat (а также while) применяют тогда, когда неизвестно точно, сколько раз будет выполняться тело цикла. Общий вид оператора:
Repeat
оператор1;
оператор2;
– – – – – – – –
until <булевское выражение>;
Работа оператора. Сначала выполняются операторы, составляющие тело цикла, затем выполняется булевское выражение, и если оно ложно, вновь выполняется тело цикла. Выход из цикла происходит, когда булевское выражение станет истинным.
Явного перебора параметров в Repeat не предусмотрено, поэтому изменение параметров осуществляется в теле цикла. Здесь же необходимо позаботиться, чтобы рано или поздно булевское выражение стало истиной.
Замечания:
1. Тело оператора repeat выполняется по меньшей мере один раз. Оператор repeat еще называют циклом с постусловием.
2. Перед until ';' не ставится.
Пример: найти сумму четных чисел в интервале от 0 до 100.
Program Prim;
Var i,s:integer;
BEGIN i:=0; s:=0;
Repeat
i:=i+2; s:=s+i
until i>100;
writeln('s=',s);
END.