Операторы цикла.
В языке Паскаль имеются
три различных оператора, с помощью которых можно запрограммировать
повторяющиеся фрагменты алгоритмов.
Оператор
цикла с параметром имеет такую структуру:
For
<имя переменной>
:= <выражение1> To <выражение2>
Do
<оператор> ;
<имя переменной>
-
параметр цикла
<выражение1> - начальное значение параметра цикла
<выражение2> - конечное значение параметра цикла
Все три указанных выше объекта должны быть одного порядкового типа.
<оператор> - тело цикла.
Этот оператор цикла
выполняется следующим образом:
1. Вычисляются значения
выражения 1 и выражения 2.
2. Параметру цикла присваивается начальное значение.
3. Параметр цикла сравнивается с конечным значением. Если параметр цикла
меньше или равен конечному значению, то перейти к п.4, иначе - конец
цикла (переход на следующий оператор после оператора цикла).
4. Выполнить тело цикла. Параметр цикла принимает следующее значение,
полученное с помощью функции Succ.
Перейти к п.3.
Есть еще один вариант этого оператора цикла, когда параметр цикла после
каждого выполнения тела цикла принимает следующее значение, полученное с
помощью функции Pred.
В этом случае служебное слово To
заменяется на Dowto
и цикл идет до тех пор, пока параметр цикла не станет строго меньше
конечного значения.
Пример.
Вычислить и напечатать первые 10 чисел Фибоначчи.
Решение:
Program Fib;
Сonst
n=10; {количество чисел}
Var
i,f1,f2,f3:Integer;
Begin
f1
:= 1; f2 := 1; {первые два числа Фибоначчи}
For i := 3 To n Do
Begin
f3 := f1 + f2; {следующее число}
Writeln(f3);
f1 := f2; f2 := f3
End
End.
Оператор цикла с
предусловием.
While <логическое
выражение> Do <оператор>
;
Здесь, тело цикла
выполняется до тех пор, пока логическое выражение возвращает значение
True.
Оператор цикла с
постусловием.
Repeat
<операторы>
Until <логическое
выражение> ;
Здесь, тело цикла
выполняется до тех пор, пока логическое выражение возвращает значение
False.
Если в теле цикла операторов For
и While
более одного оператора, то необходимо использовать составной оператор.
Пример.
Напечатать таблицу значений функций sin x и cos x
на отрезке [0,1] с шагом 0.1 в следующем виде:
x sin(x) cos(x)
---------------------------------
0.0000 0.0000 1.0000
0.1000 0.0998 0.9950
. . . . . . . . . . . . . . . . . . . . . . .
. .
1.0000 0.8415 0.5403
Решение:
Program Table;
Const a=0;
b=1; h=0.1; { границы и шаг табулирования}
Var x:
Real;
Begin
x:=a;
Writeln(‘x sin(x) сos(x)‘); { заголовок таблицы}
Writeln(‘---------------------------------‘);
While x<=b Do
Begin
Writeln(x:7:4,sin(x):7:4,cos(x):7:4);
{вывод значений аргумента и функций}
x:=x+h {увеличение аргумента на шаг}
End; Writeln(‘---------------------------------‘)
End.
Пример.
Найти приближенное
значение суммы ряда ,
учитывающее все слагаемые, от начала ряда до первого, величина которого
меньше e
= 0,0001 .
Решение:
Program SumRow;
Сonst
e=1E-4; {точность вычислений}
Var
U,S,F:Real; {очередное слагаемое и сумма ряда}
n:Integer;
Begin
n:=1; S:=1; U:=1; F:=1;
Repeat
n:=n+1;
F:=F*n;{вычисление факториала}
U:=U/F; {вычисление очередного слагаемого}
S:=S+U; {вычисление суммы ряда}
Until Abs(S)<e;
Writeln(‘Сумма ряда S=‘, S:7:4);
End.
|