Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика

..pdf
Скачиваний:
9
Добавлен:
15.11.2022
Размер:
1.24 Mб
Скачать

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

Цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение как текущей итерации, так и цикла в целом. Для этого служат операторы break, continue и goto. Передавать управление извне внутрь цикла не рекомендуется, потому что при этом могут не выполниться начальные установки.

2.2. Цикл с предусловием while

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

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

while условие do

begin

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

end

Условие в данном случае – это выражение логического типа, определяющее условие выполнения последовательности операторов тела цикла. Если тело цикла содержит только один оператор, то ключевые слова begin и end можно не использовать.

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

1.Сначала вычисляется значение выражения «условие».

2.Если значение выражения «условие» равно false (т.е. условие не выполняется), то на этом выполнение оператора while завершается. После окончания цикла управление передается на следующий за ним оператор.

3.Если значение выражения «условие» равно true (т.е. условие выполняется), то выполняются расположенные после ключевого слова do между begin и end операторы тела цикла. После это-

111

го снова проверяется выполнение условия. Если условие выполняется, то операторы тела цикла выполняются еще раз. И так до тех пор, покаусловиенестанет ложным (т.е. равнымfalse).

Блок-схема алгоритма, соответствующего выполнению оператора while, представлена на рис. 1.

Рис. 1. Алгоритм выполнения оператора while

Для того чтобы операторы тела цикла, которые находятся между begin и end, были выполнены хотя бы один раз, необходимо, чтобы в начале выполнения оператора while значение выражения «условие» было истинно.

Для того чтобы цикл завершился, нужно, чтобы последовательность операторов между begin и end влияла на значение выражения «условие» (изменяла значения переменных, входящих в выражение «условие»).

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

Пример 1.

while x<=5 do x:=x+2;

Рассмотрим особенности выполнения данного оператора для случая, если перед выполнением оператора переменной x типа integer было присвоено значение x=3:

112

1. Сначала вычисляется значение логического выражения x<=5.

2.Поскольку значение выражения 3<=5 равно true, выполняется оператор x:=x+2, т.е. значение переменной x становится равным x=5.

3.Снова вычисляется значение логического выражения

x<=5.

4.Поскольку значение выражения 5<=5 также равно true, выполняется оператор x:=x+2, т.е. значение переменной x становится равным x=7.

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

x<=5.

6. Поскольку значение выражения 7<=5 равно false, выполнение цикла завершается и начинает выполняться некоторый оператор, следующий за оператором while.

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

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

x<=5.

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

Пример 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. Тело цикла будет вы-

113

полняться, пока логическое выражение (t>0) and (w<>1) принимает значение true.

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

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

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

repeat

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

Условие в данном случае – это выражение логического типа, определяющее условие завершения цикла.

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

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

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

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

3.Если условие ложно (значение выражения «условие» рав-

но false), то операторы тела цикла выполняются еще раз.

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

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

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

114

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

Операторы тела цикла, находящиеся между repeat и until, выполняются как минимум один раз. Для того чтобы цикл завершился, необходимо, чтобы операторы тела цикла, располагающиеся между repeat и until, изменяли значения переменных, входящих в выражение «условие».

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

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

Пример 3. repeat

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

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

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

115

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. Снова вычисляется значение логического выражения:

(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 всегда выполняется хотя бы один раз.

116

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

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

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

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

begin

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

end

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

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

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

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

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

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

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

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

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

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

117

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

нач_знач.

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

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

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

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

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

118

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

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

Рис. 4. Алгоритм оператора for

(при использовании ключевого слова downto)

119

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

Пример 4.

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.

120