В языке ПАСКАЛЬ имеются три конструкции операторов цикла.
Оператор цикла while
Организует цикл с предусловием, то есть условие продолжения цикла проверяется до выполнения тела цикла. Это наиболее универсальный оператор цикла. С его помощью можно описать любые циклические действия.
Общий вид:
while A do S;
где A – логическое (булевское) выражение (условие продолжения цикла);
S – любой оператор (простой или составной) языка ПАСКАЛЬ (тело цикла).
Выражение A вычисляется перед каждой попыткой выполнения оператора S. Если значение A истинно (A = True), то оператор S выполняется, и снова предпринимается попытка выполнить оператор S, то есть, управление передается на вычисление значения A; если значение A оказывается ложным (A = False), то оператор S не выполняется, цикл заканчивается и выполняется следующий за while оператор.
Если при первой же попытке выполнить оператор S значение A окажется ложным (A = False), то оператор S не будет выполнен ни разу.
Если значение выражения A никогда не принимает значения лож (False), то тело цикла будет выполняться бесконечное число раз (происходит “зацикливание”). Таким образом, если необходимо получить такой бесконечный цикл, то достаточно задать условие типа 0 = 0.Остановить такую программу можно, нажав клавиши Ctrl+Break или Ctrl+C.
Оператор цикла repeat
Организует цикл с постусловием, то есть условие продолжения цикла проверяется после выполнения тела цикла. Обычно при помощи именно этого цикла описывают диалог с пользователем.
Общий вид:
repeat
S1;
S2;
…
SN
until A;
где S1, S2, …, SN – группа выполняемых в цикле операторов (тело цикла); A – логическое (булевское) выражение (условие продолжения цикла).
Выполняется оператор repeat в следующем порядке: сначала выполняются операторы S1, S2, …, SN, затем вычисляется выражение A; если значение A оказывается ложным (A = False), то вновь выполняются операторы S1, S2, …, SN, а если значение A истинно (A = True), цикл заканчивается и выполняется следующий за repeat оператор (оператор стоящий после выражения A).
Тело цикла repeat выполняется как минимум один раз (если значение A оказывается истинно на первом же шаге).
Если значение выражения A никогда не принимает значения истина (True), то тело цикла будет выполняться бесконечное число раз (происходит “зацикливание”). Таким образом, если необходимо получить такой бесконечный цикл, то достаточно задать условие типа 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 – любой оператор (простой или составной) языка ПАСКАЛЬ (тело цикла).
Оператор цикла выполняется следующим образом:
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 I:= E1 to E2 do S можно заменить на последовательность операторов подобную:
I:= E1;
while (I <> E2) do
begin
S1;
I:= SUCC(I)
end;
а оператор for I:=E1 downto E2 do Sна:
I:= E1;
while (I <> E2) do
Begin
S;
I:= PRED(I)
End;
Задача №1
Написать программу, которая вычисляет сумму первых N членов последовательности an. Число N программа должна запрашивать у пользователя.
Для какого максимального числа N программа позволяет получить верный результат?
1) Решить задачу с использованием оператор цикла for.
2) Решить задачу с использованием оператор цикла while или repeat.
Задача №2
Написать программу которая вычисляет сумму первых N членов ряда с точностью до e (т.е. пока величина очередного вычисленного члена ряда не станет меньше e, где e >0). Число e программа должна запрашивать у пользователя.
Для какого минимального числа e программа позволяет получить верный результат?