Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kamchatgtu246.pdf
Скачиваний:
50
Добавлен:
23.02.2016
Размер:
1.2 Mб
Скачать

1.Если < Условие > равно False, то вход в цикл не выполняется, управление передается оператору, следующему непосредственно за операторами тела цикла. Так что при определенной ситуации цикл может ни разу не выполниться.

2.Если же < Условие > равно True, то происходит вход в цикл и однократное выполнение операторов его тела. Как только достигнем конца тела цикла, управление снова передается на его заголовок, где снова вычисляется

<Условие >.

3.Если значение < Условия > все еще равно True (что зависит от изменения значений переменных во время предыдущего выполнения операторов цикла), то тело цикла выполняется еще один раз, и так далее. Как только очередное вычисление < Условия > цикла достигнет значения False, работа цикла завершается.

Рассмотрим работу цикла while в задачах 1–2.

Задача 1

При вводе осуществить проверку длины вводимой последовательности. Program Lab5_1;

Var

N: integer; BEGIN {1} ReadLn (N);

While N < = 0 Do Begin {2}

WriteLn ('Bведите длину последовательности N = '); ReadLn (N);

End; {2}

WriteLn ('Длина последовательности N = ', N); END. {1}

Пояснения к задаче 1

До первого входа в цикл переменной N уже должно быть присвоено начальное значение соответственно условию решаемой задачи.

N – длина последовательности, что влечет за собой необходимость выполнения логического условия N > 0 (длина не может быть отрицательной). До тех пор пока мы будем вводить отрицательное или равное нулю число, цикл будет работать и требовать «Bведите длину последовательности N = ».

Так как в цикле имеем два оператора, необходимо ставить операторные скобки Begin – End. В фигурных скобках {2} стоит номер операторных скобок. Напоминаем, что в фигурных скобках ставится комментарий, служащий для пояснения работы программы. Комментарий не вызывает никаких действий в программе, и его можно убрать без последствий для работы программы.

Задача 2

Рассмотрим программу с использованием оператора цикла с предусловием, когда в качестве логического < Условия > стоит выражение 2*A < = 3*N +1.

60

Program Lab5_2;

Var

N, А: integer;

Begin {1}

A: = 1;

N: = 2;

While 2 * A < = 3 * N + 1 Dо

Begin {2}

A: = A + 2;

N: = N + 1;

End; {2}

WriteLn (‘A = ‘, A =, ‘B = ‘,B =);

End. {1}

Пояснения к задаче 2

Пока условие 2 * A < = 3 * N + 1 является истинным (т. е. 2 * A оказывается меньше или равно 3 * N + 1), выполняются операторы циклической части: значение А увеличивается на 2 и результат вновь присваивается переменной А; значение N увеличивается на 1 и результат снова помещается в переменную N. Начальные значения переменных присвоены до начала опера-

тора цикла (N: = 1; A: = 1).

Переменные А и N, а также логическое выражение 2 * A < = 3 * N + 1 в процессевыполненияпрограммыпринимаютзначения, которыемывидимвтабл. 11.

 

 

 

 

Таблица 11

 

 

 

 

 

Идентификаторы

 

Проходы цикла

 

и выражение

Первый

Второй

Третий

Четвертый

A

1

3

5

7

N

1

2

3

4

2 * A < = 3 * N + 1

2 < = 4

6 < = 7

10 < = 10

14 < = 13

Условие True

True

True

True

False

или False

Истинно

Истинно

Истинно

Ложно

Всего цикл проработает четыре раза. При А = 7 и N = 4 логическое выражение 2 * A < = 3 * N + 1 становится ложным (False) и управление передается за пределы цикла (за End {2}).

3. Оператор цикла REPEAT ... UNTIL

Этот оператор организует так называемый цикл «ДО», или цикл с постусловием, так как проверка логического < Условия > завершения цикла осуществляется после каждого выполнения тела цикла (количество повторений

цикла неизвестно). Вид цикла:

 

REPEAT

(Повторять)

< тело цикла >

 

UNTIL

(До тех пор)

< условие >;

 

61

Оператор цикла с постусловием состоит из ключевого слова repeat, за которым следуют операторы тела цикла, и замыкающего ключевого слова until, после которого указывается < Условие > окончания цикла.

Логическое < Условие > выполнения цикла должно быть False, и как только < Условие > станет True (истинным), цикл прерывается.

Блок-схема цикла repeat приведена на рис. 22. Упрощенно общую структуру оператора repeat можно представить так:

REPEAT

Оператор; Оператор;

………….

Логическое

условие

Рис. 22. Цикл «До» с постусловием

Оператор;

UNTIL < Условие >;

Оператор repeat не требует использования операторных скобок Begin – End, когда в его теле необходимо записать более одного оператора. Кроме того, оператор repeat является не столь универсальным, как оператор while, поскольку его логическое < Условие > располагается в конце тела цикла и операторы его тела будут всегда выполняться как минимум один раз. Выражение, используемое в качестве логического < Условия > окончания цикла, должно давать результат булевского типа.

Общий принцип работы цикла с постусловием repeat такой же, как у цикла с предусловием while. Но логическое < Условие > проверяется не перед выполнением тела цикла, а после него, и управление циклом repeat прямо противоположно управлению циклом while. To есть цикл repeat продолжается, пока логическое < Условие > ложно (False), и заканчивается, когда логическое < Условие > становится истинным (True). В задаче 3 рассмотрим, как выглядит проверка длины вводимой последовательности при использовании оператора repeat (задача уже была рассмотренанами при использовании оператора while).

Задача 3

При вводе осуществить проверку длины вводимой последовательности. Program Lab5_3;

Var

N: integer; BEGIN {1}

Repeat

WriteLn ('Bведите длину последовательности N = '); ReadLn (N);

Until N > 0;

WriteLn ('Длина последовательности N = ' , N); END. {1}

62

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