Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Раздел 3 Pascal, лр1-9.doc
Скачиваний:
56
Добавлен:
22.05.2015
Размер:
654.85 Кб
Скачать

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

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

Формат оператора:

repeat

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

until <выражение>;

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

При использовании оператора repeat возможно зацикливание программы. Это может произойти, если проверяемое выражение постоянно сохраняет значение False.

Пример 1

repeat

K := I mod J; {остаток от деления I на J}

I := J;

J := K;

until J = 0;

Цикл выполняется ДО тех пор, пока J (остаток) не станет равно нулю.

Пример 2

repeat

Write('Введите значение (0..9):');

Readln(I);

until (I >= 0) and (I <= 9);

Цикл выполняется ДО тех пор, пока 0<=I<=9.

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

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

Формат оператора:

while <выражение> do

<оператор>;

Поскольку проверка условия на повторение цикла производится в начале, до тела цикла, оператор цикла while может быть выполнен ни разу, если выражение проверки примет значение False. Выражение, с помощью которого осуществляется управление повторением оператора, должно иметь булевский тип. Внутренний оператор выполняется повторно до тех пор, пока выражение имеет значение Тruе. Если выражение с самого начала принимает значение False, то цикл не выполняется ни разу.

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

Пример 3 Нахождение факториала числа Х.

Fact:=1;

while X<=N do

begin

Fact:=Fact*X;

X:=X+1;

end;

Пример 4 Генерация случайного числа, не равного 10.

while I <> 10 do

I:=Random(10) {функция Random(10) генерирует случайное

число 0<=I<10}

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

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

Оператор for имеет два варианта записи:

- инкрементный (с возрастанием переменной цикла):

for <переменная цикла>:=<начало> to <конец> do

<оператор>;

- декрементный (с убыванием переменной цикла):

for <переменная цикла>:=<начало> downto <конец> do

<оператор>;

В качестве переменной цикла должна использоваться переменная порядкового типа, объявленная в том блоке, где содержится оператор for. Параметры <начало> и <конец> задаются выражениями, типы которых должны быть совместимы по присваиванию с типом переменной цикла. Когда начинает выполняться оператор for, начальное и конечное значения определяются один раз, и эти значения сохраняются на протяжении всего выполнения оператора for. Оператор, который содержится в теле цикла, выполняется один раз для каждого значения в диапазоне между начальным и конечным значением.

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

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

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

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

Если оператор, содержащийся в теле цикла for, изменяет значение управляющей переменной, то это является ошибкой. После выполнения оператора for значение управляющей переменной становится неопределенным.

Пример 5 Инкрементный вариант

Вычислить сумму первых N членов разложения в ряд экспонен-

ты ex ,где N и X – заданные числа соответственно целого и вещественного типа.

Экспонента раскладывается в ряд по формуле

Напишем следующий фрагмент программы:

Sum:=1;

Prod:=1;

Fact:=1; {Начальные значения}

for I:=1 to N-1 do

begin

Fact:=Fact*I; {Факториал I}

Prod:=Prod*X; {X в степени I}

{Сумма (I+1) члена разложения}

Sum:= Sum + Prod/Fact;

end;

Пример 6 Декрементный вариант

Обратный отсчет времени при запуске ракет:

WriteLn(‘Начинается обратный отсчет времени’);

for Seconds:=10 downto 1 do

WriteLn(‘Осталось’,Seconds,’ сек.’);

WriteLn(‘Пуск !’);

Программа выведет числа 10, 9,…, 1 и слово "Пуск".