Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_6_Informatika.pdf
Скачиваний:
9
Добавлен:
29.03.2015
Размер:
361.3 Кб
Скачать

6

2) Поскольку значение выражения 11<=5 равно false, на этом выполнение оператора while завершается. Управление передается на следующий за ним оператор. Это пример того случая, когда последовательность операторов в цикле while не выполнилась ни разу.

Пример 6.2.

while (t>0) and (w<>1) do

begin

t:=t-2;

w:=w+3;

z:=sqrt(abs(t))+sin(6*w);

end

В данном примере тело цикла содержит три оператора, размещенные между словами begin и end. Тело цикла будет выполняться, пока логическое выражение (t>0) and (w<>1) принимает значение true.

Цикл с постусловием repeat

Оператор repeat, как и оператор while, используется в программе в том случае, если необходимо выполнить повторные вычисления

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

е. определяется ходом вычислений.

В общем виде оператор repeat записывается следующим образом:

repeat

последовательность операторов

until условие

Условие в данном случае - это выражение логического типа,

определяющее, условие завершения цикла.

Тело цикла с постусловием заключено между служебными словами repeat и until, поэтому заключать его в блок (т.е. между ключевыми словами begin и end) не требуется.

7

Оператор repeat выполняется следующим образом:

1) Сначала выполняются находящиеся между repeat и until

операторы тела цикла.

2)Затем вычисляется значение выражения условие.

3)Если условие ложно (значение выражения условие равно false), то операторы тела цикла выполняются еще раз.

4)Если условие истинно (значение выражения условие равно true), то выполнение цикла прекращается.

Таким образом, в отличие от цикла while, операторы цикла,

находящиеся между ключевыми словами repeat и unti1, выполняются до тех пор, пока условие ложно (т.е. значение выражения условие равно false).

Алгоритм, соответствующий оператору repeat, представлен на рис.

2.

Рис. 2. Алгоритм, соответствующий оператору repeat

Операторы тела цикла, находящиеся между repeat и until,

выполняются как минимум один раз. Для того чтобы цикл завершился,

8

необходимо, чтобы операторы тела цикла, располагающиеся между repeat

и until, изменяли значения переменных, входящих в выражение условие.

Этот вид цикла применяется в тех случаях, когда тело цикла необходимо обязательно выполнить хотя бы один раз: например, если в цикле вводятся данные и выполняется их проверка.

Разберем примеры оператора repeat.

Пример 6.3.

repeat x:=x+1; y:=y-1;

until (x>=2) and (y<4);

Рассмотрим особенности выполнения данного оператора для случая,

если перед выполнением оператора переменной x типа integer было присвоено значение x=0, а переменной y типа integer было присвоено значение y=5.

1) Сначала выполняются операторы тела цикла:

x:=x+1;

y:=y-1;

Т.е. значение переменной x становится равным x=1, а значение переменной y становится равным y=4.

2) Затем вычисляется значение логического выражения:

(x>=2) and (y<4).

3) Т.к. значение выражения (1>=2) and (4<4) равно false, то заново выполняются операторы тела цикла:

x:=x+1;

y:=y-1;

Т.е. значение переменной x становится равным x=2, а значение переменной y становится равным y=3.

4) Снова вычисляется значение логического выражения:

9

(x>=2) and (y<4).

5) Т.к. значение выражения (2>=2) and (3<4) равно true, то выполнение цикла завершается и начинает выполняться некоторый оператор, следующий за оператором repeat.

Теперь рассмотрим особенности выполнения данного оператора для случая, если перед выполнением оператора переменной x типа integer

было присвоено значение x=6, а переменной y типа integer было присвоено значение y=2.

1) Сначала выполняются операторы тела цикла:

x:=x+1;

y:=y-1;

Т.е. значение переменной x становится равным x=7, а значение переменной y становится равным y=1.

2) Затем вычисляется значение логического выражения:

(x>=2) and (y<4).

3) Т.к. значение выражения (7>=2) and (1<4) равно true, то выполнение цикла завершается и начинает выполняться некоторый оператор, следующий за оператором repeat. Этот пример наглядно демонстрирует, что тело цикла repeat всегда выполняется хотя бы один раз.

Цикл с параметром for

Оператор for используется в том случае, если некоторую последовательность действий (операторов программы) нужно выполнить несколько раз, причем число повторений заранее известно. В качестве параметра в данном операторе используются переменные порядкового типа,

причем, как правило, целого типа. Рассмотрим особенности оператора for

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

10

В общем виде оператор for записывается следующим образом:

for счетчик := нач_знач to кон_знач do

begin

последовательность операторов

end

В данной записи оператора for были использованы следующие

обозначения:

1)счетчик — переменная целого типа, представляющая собой число повторений операторов тела цикла;

2)нач_знач — выражение целого типа, определяющее начальное значение параметра цикла;

3)кон_знач — выражение целого типа, определяющее конечное значение параметра цикла.

Количество повторений операторов тела цикла можно вычислить по

формуле:

кон_знач - нач_знач + l.

Если в теле цикла находится только один оператор, то ключевые слова

begin и end можно не писать.

Алгоритм, соответствующий оператору for, представлен на рис. 3.

11

Рис. 3. Алгоритм оператора for (при использовании ключевого слова to)

Согласно рис. 3, выполнение оператора for происходит следующим

образом:

1)Вычисляются выражения, определяющие начальное и конечное значения счетчика. Эти выражения вычисляются только один раз, при входе

вцикл.

2)Счетчику цикла присваивается значение выражения нач_знач.

3)Значение счетчика цикла сравнивается со значением выражения

кон_знач. Если счетчик цикла меньше или равен этому значению, то выполняется тело цикла, в противном случае выполнение цикла заканчивается.

4) Значение счетчика цикла автоматически увеличивается на 1.

Происходит возврат к пункту 3.

Таким образом, если начальное значение счетчика меньше или равно конечному, то последовательность операторов между begin и end будет выполнена хотя бы один раз. Если же начальное значение счетчика больше

12

конечного значения, то последовательность операторов между begin и end

не будет выполнена ни разу.

Переменную-счетчик можно использовать внутри цикла, но ни в коем случае не изменять. После нормального завершения цикла значение счетчика не определено. Фактически оно равно первому значению, для которого выполняется условие выхода из цикла, но использовать это в программах не рекомендуется.

Если в операторе for вместо ключевого слова to записать downto,

то после очередного выполнения операторов тела цикла значение счетчика будет не увеличиваться, а уменьшаться на 1, и, следовательно, тело цикла выполнится хотя бы один раз только в случае, если конечное значение счетчика меньше или равно начальному (рис. 4).

Рис. 4. Алгоритм оператора for (при использовании ключевого слова downto)

Разберем примеры оператора for.

Пример 6.4.

13

for i:=2 to 5 do

begin

x:=x+sqr(y);

y:=y-1;

end;

В данном примере переменные i, x, y имеют тип integer.

Число повторений данного цикла равно 4, в соответствии с формулой,

рассмотренной выше:

кон_знач - нач_знач + l = 5 – 2 + 1 = 4.

Таким образом, операторы тела цикла будут выполнены 4 раза.

Рассмотрим особенности выполнения этого цикла более детально.

Пусть до начала выполнения цикла переменные x и y приняли соответственно значения x=1 и y=3.

1)В первую очередь переменная-счетчик i принимает начальное значение, равное i=2.

2)Далее вычисляется значение логического выражения i>5, т.е.

значение счетчика сравнивается с конечным значением. Т.к. выражение 2>5

равно false, то выполняются операторы тела цикла:

x:=x+sqr(y);

y:=y-1;

Таким образом, значения переменных x и y становятся равными x=10 и y=2 соответственно.

3)Значение счетчика увеличивается на 1, т.е. переменная i становится равной i=3.

4)Снова вычисляется значение логического выражения i>5. Т.к.

выражение 3>5 равно false, то выполняются операторы тела цикла. Таким образом, значения переменных x и y становятся равными x=14 и y=1.

5) Значение счетчика увеличивается на 1, т.е. переменная i становится равной i=4.

14

6) Снова вычисляется значение логического выражения i>5. Т.к.

выражение 4>5 равно false, то выполняются операторы тела цикла. Таким

образом, значения переменных x и y становятся равными x=15 и y=0.

7)Значение счетчика увеличивается на 1, т.е. переменная i становится равной i=5.

8)Заново вычисляется значение логического выражения i>5. Т.к.

выражение 5>5 равно false, то выполняются операторы тела цикла. Таким

образом, значения переменных x и y становятся равными x=15 и y=-1.

9)Значение счетчика увеличивается на 1, т.е. переменная i становится равной i=6.

10)Вычисляется значение логического выражения i>5. Т.к.

выражение 6>5 равно true, то выполнение цикла завершается.

Пример 6.5.

for j:=4 to 3 do

z:=abs(x+y);

В данном примере переменные j, x, y, z имеют тип integer.

Поскольку в данном случае начальное значение счетчика больше конечного значения, то оператор тела цикла не будет выполнен ни разу.

Рассмотрим особенности выполнения этого цикла более детально, в

соответствии с блок-схемой на рис. 3:

1)В первую очередь переменная-счетчик j принимает начальное значение, равное j=4.

2)Далее вычисляется значение логического выражения j>3, т.е.

значение счетчика сравнивается с конечным значением. Т.к. выражение 4>3

равно true, то выполнение цикла завершается. Таким образом, операторы тела цикла не выполнились ни разу.

Пример 6.6.

for i:=3 downto 1 do

x:=x+sqr(i);

15

В данном примере переменные i и x имеют тип integer.

Рассмотрим особенности выполнения этого цикла более детально.

Пусть до начала выполнения цикла переменная x приняла значение x=100.

1)В первую очередь переменная-счетчик i принимает начальное значение, равное i=3.

2)Далее вычисляется значение логического выражения i<1, т.е.

значение счетчика сравнивается с конечным значением. Т.к. выражение 3<1

равно false, то выполняется оператор тела цикла:

x:=x+sqr(i);

Т.е. переменная x становится равной 109.

3)Значение счетчика уменьшается на 1 (а не увеличивается, как было

вслучае с ключевым словом to), т.е. переменная i становится равной i=2.

4)Снова вычисляется значение логического выражения i<1. Т.к.

выражение 2<1 равно false, то выполняется оператор тела цикла. Т.е.

переменная x становится равной 113.

5)Значение счетчика уменьшается на 1, т.е. переменная i становится равной i=1.

6)Снова вычисляется значение логического выражения i<1. Т.к.

выражение 1<1 равно false, то выполняются операторы тела цикла. Т.е.

переменная x становится равной 114.

7)Значение счетчика уменьшается на 1, т.е. переменная i становится равной i=0.

8)Заново вычисляется значение логического выражения i<1. Т.к.

выражение 0<1 равно true, то выполнение цикла завершается.

Пример 6.7.

for i:=1 downto 10 do begin

a:=(b+c)/2;

d:=sqrt(a);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]