Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 70040.doc
Скачиваний:
5
Добавлен:
01.05.2022
Размер:
253.95 Кб
Скачать

1.2.2. Оператор цикла repeat ... Until

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

REPEAT (Повторять)

< тело цикла >

UNTIL (До тех пор)

< условие >;

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

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

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

Например, вычислим значение функции Y = X2 при X = 8; X = 6; X = 4; X = 2.

PROGRAM 222;

Uses Crt;

Var X,Y: real;

Begin

ClrScr;

X: = 8;

WriteLn(Taбyлиpoвaниe функции');

WriteLn(' X Y');

WriteLn('--------');

Repeat

Y : = X * X;

WriteLn(X : 4 : 2, Y : 6 : 2);

X:=X-2;

Until X = 0;

ReadLn;

End.

Здесь аргумент X меняет свое значение от 8 до 2 с шагом - 2. Перемен­ные X, Y объявляем как REAL. В переменную Y заносим вычисленное зна­чение функции. Для организации цикла используем оператор цикла с постусловием repeat. До входа в цикл присваиваем начальное значение ар­гументу X, равное 8. Затем печатаем шапку таблицы (три оператора WriteLn перед оператором Repeat). Шапка таблицы используется для оформления таблицы. В теле цикла делаем вычисления по формуле, печать и изменение значе­ний аргумента на шаг, который равен -2. Окончание цикла осуществляется проверкой в операторе Until. Как только X примет значение, равное нулю, цикл прервется и далее последует оператор ReadLn.

1.2.3. Оператор цикла с параметром (со счетчиком) for... Do

Оператор цикла со счетчиком for подходит для программирования только таких цикличе­ских фрагментов, в которых до выполнения цикла известны начальное и конечное значения счетчика повторений цикла. Это обусловливает его менее широкую сферу применения, чем бо­лее универсальных операторов while и repeat. Однако в тех случаях, когда его использование возможно, оператор for благодаря своей высо­кой наглядности имеет несомненное преимуще­ство перед операторами циклов с условиями.

Упрощенно общую структуру оператора цикла for можно представить одним из следующих способов:

- Если счетчик при выполнении цикла наращивает свое значение:

FOR I: = N1 ТО N2 DO

<тело цикла >;

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

N1 - начальное значение управляющей переменной цикла;

N2 - конечное значение управляющей переменной цикла.

Шаг изменения управляющей переменной равен + 1.

Чтобы оператор выполнился хотя бы один раз, N1 (начальное значение счетчика) должно быть не больше, чем N2 (конечное значение счетчика).

- Если счетчик при выполнении цикла уменьшает свое значение, то при программировании может быть использован другой оператор цикла:

FOR I: = N2 DOWNTO N1 DO

< тело цикла >;

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

N2 - начальное значение управляющей переменной цикла;

N1 - конечное значение управляющей переменной цикла.

Шаг изменения управляющей переменной равен -1.

Чтобы оператор выполнился хотя бы один раз, нужно, чтобы N2 (начальное значение счетчика) было не меньше, чем N1 (конечное значение счетчика).

Цикл for выполняется заданное число раз. Чтобы прервать выполнение досрочно, необходимо увеличить I до конечного значения. Для оператора for, в отличие от while и repeat, установка начального значения счетчика циклов выполняется не перед заголовком цик­ла, а прямо в заголовке. Кроме того, после окончания тела цикла наращива­ние (уменьшение) значения счетчика происходит автоматически. Таким обра­зом, специального оператора для увеличения значения счетчика I:=I+1 не требуется (этот оператор приведет к неправильной работе цикла).

Оператор for имеет два существенных ограничения:

- шаг изменения счетчика циклов может быть только или + 1 (если ис­пользуется ключевое слово to), или - 1 (если используется ключевое словоdownto);

- переменная, выступающая в роли счетчика циклов, может быть толь­ко порядкового типа и должна быть локальной для того блока, в котором на­ходится оператор for.

Например, вычислить значения двух величин по формулам:

А = 2*I и В = 2*I + 1, где I меняется от 1 до 4 с шагом 1.

Program 333;

Uses Crt;

Var I, В, А : Integer;

Begin

For I : = 1 To 4 Do

Begin

A : = 2 * I;

B: = 2*I+1;

WriteLn (A : 3, В : 3);

End;

End.

I - управляющая переменная циклом (по ее значению цикл начинается и завершается) принимает значения: 1=1,1 = 2,1 = 3,1 = 4 (шаг = 1). Всего цикл проработает четыре раза. При 1 = 4 послед­ний раз идет вычисление А, В и управление передается за пределы цикла. Выполняются операторы циклической части: значения А и В вычисля­ются по формуле и принимают значения в процессе выполнения программы, представленные в табл.2.

Таблица 2

I - управляющая переменная циклом; А, В - выражения

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

Первый

Второй

Третий

Четвертый

I

1

2

3

4

А:=2*1

2

4

6

8

В:=2*1+1

3

5

7

9

Например, вычислим суммы квадратов чисел от 1 до N:

PROGRAM SUM_N;

Uses Crt;

var a, S, i, N: word;

begin

write('Введите N:'); readln(N);

S:= 0;

For i:= 1 to N do S:= S + i*i;

writeln('Cумма S=', S);

end.