I. Конструкция циклов “WHILE ... DO” и “REPEAT ... UNTIL”

Цикл - это последовательность операторов, которая может выполняться более одного раза. В языке PASCAL имеется несколько механизмов для конструирования циклов.

II. Конструкция циклов WHILE ... DO.

Простейший из них - оператор WHILE. При выполнении оператора WHILE повторяется определения группа операторов до тех пор, пока определенное в операторе WHILE условие истинно. Многократно повторяемые действия могут быть заданы оператором цикла
WHILE <условие> do <оператор>

Выполняется данный оператор цикла так: проверяется условие, и если оно удовлетворено, то выполняется оператор, а затем вновь проверяется условие и т.д. Как только на очередном шаге окажется, что условие не удовлетворяется, то выполнение оператора цикла прекратится.

Пример: Если x>0, то выполнение цикла
                     WHILE x<=0 DO x:= x+1
прекратится после первой же проверки условия x<=0, и значение x не изменится.

Если же значение x не положительно, то к этому значению будет добавляться по единице до тех пор, пока значение не станет положительным.

Задача 1.
При помощи цикла напечатать на экране: Начало счета 3 5 7 9 Конец счета

1. Program su1;
2.   Var f: integer;
3. Begin
4.   Write(’Начало счета’);
5.   f:=3;
6.   While f<=9 do Begin
7.                Write (f,’ ’);
8.                f:=f+2;
9.              End;
10.  Write(’Конец счета’)
11.End.

III. Оператор REPEAT ... UNTIL. REPEAT < список операторов > UNTIL < условие >

Повторяй выполнение операторов, стоящих между словами repeat и until до тех пор, пока не станет истинным условие.

Предыдущую задачу можно решить с помощью оператора REPEAT … UNTIL

Задача 1.2.

1. Program su2;
2.   Var f: integer;
3. Begin
4.   Write(’Начало счета’);
5.   f:=3;
6.   Repeat
7.     Write (f,’ ’);
8.     f:=f+2;
9.   until f>9;
10.  Write(’Конец счета’)
11.End.

Подсказка.

Отличия операторов REPEAT и WHILE:
* компьютер выходит из цикла оператора repeat тогда, когда условие истинно, а из цикла оператора while – когда условие ложно;
* while может ни разу не выполнить оператор, стоящий после do;
* repeat же хотя бы раз операторы, стоящие между repeat и until, выполнит.

Например:
K:=8; repeat k:=1 until 3>2; writeln(k) напечатает 1.
K:=8; while 2>3 do k:=1; writeln(k) напечатает 8.
* при компиляции оператор while дает несколько более эффективную программу, чем оператор repeat.

Проверьте себя:
Определите значение S после выполнения следующих операторов:
1. s:=0; i:=0; WHILE i<5 DO i:=i+1; s:=s+1/i;
2. s:=0; i:=1; WHILE i>1 DO BEGIN s:=s+1/i; i:=i-1 END;