Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л2.doc
Скачиваний:
13
Добавлен:
11.04.2015
Размер:
233.47 Кб
Скачать

2.13 Оператор цикла с предусловием

while <логическое выражение> do | заголовок цикла

<оператор> | тело цикла

Тело цикла повторяется, пока истинно предусловие.

Примеры:

{s=сумма целых чисел от 1 до n}

s:=0;i:=1;

while i<=n do

begin

s:=s+i;

i:=i+1

end

{x1=наибольший общий делитель x и y}

x1:=x;y1:=y;

while x1<>y1 do

if x1>y1 then x1:=x1-y1

else y1:=y1-x1;

{Для данного M>0 требуется найти наименьшее целое число k>=0, такое что 3^k > M}

y:=1;k:=0;

while y<=M do

begin

k:=k+1;

y:=y*3;

end;

2.14 Оператор цикла с постусловием

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

repeat {<оператор>} until <логическое выражение>

Цикл с постусловием всегда выполняется, по крайней мере, один раз!

Пример. Вычислить наименьшее n, для которого y=1+1/2+1/3+...+1/n ≥ 5.

y:=0;n:=0;

repeat

n:=n+1;

y:=y+1/n;

until y>=5;

2.15 Оператор цикла с параметром

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

Более конкретно данный вариант оператора цикла определяет:

  • диапазон изменения значений управляющей переменной и, одновременно, число повторений оператора, содержащегося в теле цикла;

  • направление изменения значения переменной (возрастание или убывание);

  • собственно действия, выполняемые на каждой итерации (оператор тела цикла).

<оператор цикла с параметром>::=

for <переменная> := <диапазон> do <оператор>

<диапазон>::=

<выражение> <направление> <выражение>

<направление>::= to | downto

На использование управляющей переменной (параметра) налагаются следующие ограничения:

  1. Управляющая переменная должна иметь дискретный тип (целый, символьный, булевский, перечислимый).

  2. Начальные и конечные значения диапазона должны иметь тот же тип, что и параметр.

  3. В теле цикла запрещается явное изменение значения управляющей переменной (например, оператором присваивания).

  4. После завершения оператора значение параметра становится неопределенным.

Семантику данного оператора цикла можно представить следующим образом. Оператор

for V := Expr1 to Expr2 do Body;

эквивалентен оператору:

begin

Temp1:=Expr1;

Temp2:=Expr2;

if Temp1 <= Temp2 then

begin

V:=Temp1;

Body;

while V <> Temp2 do

begin

V:=succ(V);

Body

end

end

end

Примеры:

{y=x^n}

y:=1;

for i:=1 to n do y:=y*x;

{печать латинского алфавита с конца}

for c:='z' downto 'a' do write(c);

2.16 Примеры бесконечных циклов

y:=0;i:=1;

while i<=n do y:=y+1/i;i:=i+1;

while true do <оператор>

{Вычислить площадь под параболой f(x)=x2 от a=0 до b=10 по формуле трапеции S=h*[f(a)/2+f(a+h)+f(a+2*h)+...+f(b-h)+f(b)/2],где h=(b-a)/n }

h:=(b-a)/n;

S:=h*(a*a+b*b)/2;

x:=a;

repeat

x:=x+h;

S:=S+x*x*h

until x=b-h; {Нужно x>=b-h, иначе равенство может и не выполниться}