Лабораторная работа № 4
Циклические алгоритмы
Цель работы
Ознакомиться с конструкциями операторов цикла и научиться описывать на языке ПАСКАЛЬ циклические действия.
Краткие теоретические сведения
В языке ПАСКАЛЬ имеются три конструкции операторов цикла.
Оператор цикла while
Организует «цикл с предусловием», то есть условие продолжения цикла проверяется до выполнения тела цикла. Это наиболее универсаль-
ный оператор цикла. С его помощью можно описать любые циклические Нет действия.
Общий вид: while A do S ;
где A – логическое (булевское) выражение (условие продолжения цикла);
S – любой оператор (простой или составной) языка ПАСКАЛЬ (тело цикла).
Оператор работает так (см. Рис. 1): выражение A вычисляется перед каждой попыткой выполнения оператора S. Если значение A истинно (A = True), то оператор S выполняется, и снова предпринимается попытка выполнить оператор S, то есть, управление передается на вычисление значения A; если значение A оказывается ложным (A = False), то оператор S не выполняется, цикл заканчивается и выполняется следующий за while оператор.
Если при первой же попытке выполнить оператор S значение A окажется ложным (A = False), то оператор S не будет выполнен ни разу.
Если значение выражения A никогда не принимает значения лож (False), то тело цикла будет выполняться бесконечное число раз (происходит “зацикливание”). Таким образом, получают «бесконечный цикл» (цикл типа «петля»): достаточно задать условие, которое всегда дает значение true, напри-
мер, 0 = 0.Остановить такую программу можно, нажав клавиши Ctrl+Break S1
или Ctrl+C.
Оператор цикла repeat
Организует цикл с постусловием, то есть условие продолжения цикла проверяется после выполнения тела цикла. Обычно при помощи именно этого цикла описывают диалог с пользователем.
Общий вид: repeat
S1;
S2;
…
SN
until A;
где S1, S2, …, SN – группа выполняемых в цикле операторов (тело цикла); A – логическое (булевское) выражение (условие продолжения цикла).
…
SN
Нет
A
Да
Рис. 2. Цикл REPEAT.
Алгоритм работы.
Выполняется оператор repeat в следующем порядке (см. Рис. торы S1, S2, …, SN, затем вычисляется выражение A; если значение A оказывается ложным (A = False), то вновь выполняются операторы S1, S2, …, SN, а если значение A истинно (A = True), цикл заканчивается и выполняется следующий за repeat оператор (оператор стоящий после выражения A).
Тело цикла repeat выполняется как минимум один раз (если значение A оказывается истинно на первом же шаге).
Если значение выражения A никогда не принимает значения истина (True), то тело цикла будет выполняться бесконечное число раз (происходит “зацикливание”). Таким образом, получают «бесконечный цикл» (цикл типа «петля»): достаточно задать условие, которое всегда дает значение false, например, 0 = 1.Остановить такую программу можно, нажав клавиши Ctrl+Break или Ctrl+C.
Оператор цикла for
Оператор «цикла с параметром (счетчиком)». Используют в тех случаях, когда количество выполнений тела цикла можно вычислить. Обычно это операции с массивами.
Общий вид:
for I := E1 to E2 do S ;
или
for I := E1 downto E2 do S ;
где I – параметр цикла, часто называемый счетчиком цикла или цикловой переменной, это переменная любого скалярного типа, кроме типа real;
E1 – начальное значение параметра цикла, выражение того же типа, что и переменная I; E2 – конечное значение параметра цикла, выражение того же типа, что и переменная I; S – любой оператор (простой или составной) языка ПАСКАЛЬ (тело цикла).
Оператор цикла выполняется следующим образом (см. Рис. 3):
1) на первом шаге вычисляются значения выражений
E1 и E2, переменной I присваивается результат вычисления выражения E1
2) выполняется оператор S (тело цикла);
3) затем переменной I присваивается следующее значение, вычисляется значение выражения E2 и результат вычислений сравнивают с новым значением переменной I. Если результат сравнения – истинна (True), то действия повторяются; если результат сравнения оказывается ложным (False), то оператор S не выполняется, цикл заканчивается и выполняется следующий за for оператор.
Следующее значение параметра цикла вычисляется в операторе с ключевым словом to следующим образом: как I := SUCC( I ) (при I целого типа I := I + 1 ), а в операторе с
ключевым словом downto как I := PRED( I ) (при I целого типа I := I - 1 ).
Выражения E1 и E2 вычисляются только один раз, в начале цикла!
Категорически запрещается в теле цикла for (в операторе S) изменять значение параметра цикла (переменной I)!
После завершения цикла значение параметра цикла ( переменной I) не определено, «портится». Пользоваться этим значением после завершения цикла запрещено! Перед использованием, переменной необходимо присвоить новое значение, поэтому, как правило, ее используют в другом цикле for.