ЦИКЛЫ В ЯЗЫКЕ PASCAL
Если при решении задачи возникает необходимость повторить одни и те же действия несколько или множество раз, то это достигается с помощью специальных конструкций – циклов .
FOR
цикл с параметром
В языке Pascal различают три вида операторов цикла:
REPEAT
WHILE
цикл с постусловием - условие проверяется после выполнения тела цикла
цикл с предусловием - условие проверяется до выполнения тела цикла
Если число повторений оператора заранее неизвестно , а задано лишь условие его повторения (или окончания), используются операторы
- REPEAT WHILE
- REPEAT
- WHILE
если число повторений известно заранее, используется
Выражение, управляющее повторениями, должно иметь булевский тип
Процедуры управления работой циклическими операторами
Счётчик цикла
Условие выхода или условие окончания цикла
Тело цикла
Break – реализует немедленный выход из цикла, управление передается оператору, стоящему сразу после тела цикла;
переменная, хранящая текущий номер итерации.
выражение определяющее, будет в очередной раз выполняться итерация, или цикл завершится, в зависимости от того, как интерпретируется его истинность – как признак необходимости завершения или продолжения цикла.
последовательность инструкций, предназначенная для многократного исполнения.
Continue – обеспечивает досрочное прохождение цикла, эквивалентна передаче управления в конец циклического оператора.
Исполнение любого цикла включает первоначальную инициализацию переменных цикла, проверку условия выхода, исполнение тела цикла и обновление переменной цикла на каждой итерации
Итерация – однократное выполнение тела цикла
Цикл с параметром for
Основная ветка
СЧЕТЧИК
For i:=1 to n do
Тело цикла
Основная ветка
прямой вид цикла:
FOR := S1 TO S2 DO ;
обратный вид цикла:
FOR := S2 DOWNTO S1 DO ;
S1 и S2 – выражения, определяющие соответственно начальное и конечное значения параметра цикла
:=S1; Далее: 1. Проверяется условие :2. Если условие выполнено, то выполняется оператор в теле цикла, если условие :3. Значение управляющей переменной изменяется на +1 ( TO ) или -1 ( DOWNTO ) и далее с п. 1. Шаг изменения управляющей переменной – единица " width="640"
При первом обращении к оператору FOR вычисляются выражения S1, S2 осуществляется присваивание «параметр цикла:=S1; Далее:
1. Проверяется условие :
2. Если условие выполнено, то выполняется оператор в теле цикла, если условие :
3. Значение управляющей переменной изменяется на +1 ( TO ) или -1 ( DOWNTO ) и далее с п. 1. Шаг изменения управляющей переменной – единица
На использование управляющей переменной (параметра цикла) в цикле FOR накладываются следующие ограничения .
1. В качестве параметра должна использоваться простая переменная, описанная в текущем блоке.
2. Управляющая переменная должна иметь дискретный тип.
3. Начальные и конечные значения диапазона должны иметь тип, совместимый с типом управляющей переменной. При этом допустим любой скалярный тип, кроме вещественного.
4. В теле цикла запрещается явное изменение значения управляющей переменной (например, при помощи оператора присваивания).
5. После завершения оператора значение управляющей переменной становится неопределенным, если только выполнение оператора не было прервано оператором перехода.
6 . Цикл может не выполняться ни разу, если шаг цикла будет изменять значение счетчика от нижней границы в направлении, противоположной верхней границе.
Программы вывода 50 первых членов последовательности Фибоначчи: 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
VAR Ph,Ph1,Ph2,I: INTEGER;
BEGIN
Ph:=1;
Ph1:=1;
WRITE ('1, 1') ;
FOR I:=3 TO 20 DO
BEGIN
Ph2:=Ph+Ph1 ;
WRITE (', ', Ph2 ) ;
Ph := Ph1 ;
Ph1 := Ph2 ;
END;
Readln;
END .
Цикл с предусловием WHILE
Основная ветка
Логическое выражение
false
true
Тело цикла
Основная ветка
WHILE DO
;
Условие – булевское выражение,
тело цикла – простой или составной оператор.
При первом обращении к оператору While обнуляются значения счетчика введенных чисел. Перед каждым выполнением тела цикла вычисляется значение выражения условия.
Если результат равен True , то тело цикла выполняется, и снова вычисляется выражение условия.
Если результат равен False , происходят выход из цикла и переход к первому после while оператору.
Нахождение чисел кратных А и оканчивающихся на B
program sum;
uses crt;
var a,summ: i nteger ;
begin
writeln (‘Введите произвольные целые числа, признак окончания ввода: "0" ') ;
read (a);
summ := 0 ;
while a0 do begin
if (a mod 7=0) and (a mod 10 =4) then
summ := summ+a ;
Readln (a);
end ;
writeln (‘Сумма чисел равна ' , summ ) ;
readln;
end.
Цикл с постусловием REPEAT
Основная ветка
Тело цикла
Логическое выражение
false
true
Основная ветка
REPEAT
;
;
UNTIL ;
При программировании операторов тела цикла следует обеспечить влияние по крайней мере одного из операторов тела цикла на значение условия, иначе цикл будет выполняться бесконечно.
условие проверяется после очередного выполнения операторов тела цикла (очередной итерации) и таким образом гарантируется хотя бы однократное выполнение цикла
Оператор повтора repeat аналогичен оператору while
отличия
критерием прекращения цикла является равенство выражения константе True .
За это цикл repeat часто называют циклом с постусловием, или циклом «ДО», так как он прекращает выполняться, как только значение выражения условия, записанного после слова until , становится равным True (истина).
Операторы, заключенные между словами repeat и until , являются телом цикла . Вначале выполняется тело цикла, затем проверяется условие выхода из цикла.
Если результат булевского выражения равен False , то тело цикла активизируется еще раз
Если результат равен True , то происходит выход из цикла
Program factorial; {ВЫЧИСЛЕНИЕ ФАКТОРИАЛА}
VAR n, i : INTEGER; p : LONGINT;
BEGIN
WRITE (‘введите число n: ‘ ) ;
READLN (n) ; {ВВОД ПОЛОЖИТЕЛЬНОГО ЦЕЛОГО ЧИСЛА}
p:=1;
REPEAT
p:=p*n; n:=n-1
UNTIL n=0 ;
WRITELN (‘n! = ’, p) ;
END .