Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Типы данных и операторы языка Delphi и Pascal.doc
Скачиваний:
2
Добавлен:
20.12.2018
Размер:
211.46 Кб
Скачать

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

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

repeat

<операторы>

until <условие>;

В операторе цикла с постусловием выражение, которое управляет повторным выполнением последовательности операторов, содержится внутри оператора repeat.

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

Примеры оператора цикла с постусловием:

repeat

K := I mod J;

I := J;

J := K;

until J = 0;

repeat

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

Readln(I);

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

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

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

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

for <счетчик>:=<нач. значение> to <кон.значение>

do <оператор>;

for <счетчик>:=<нач. значение> downto <кон. значение>

do <оператор>;

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

<начальное значение> и <конечное значение> являются выражениями, совместимыми по типу с управляющей переменной.

Если <начальное значение> = <конечное значение>, то тело цикла выполнится один раз. Если в форме to <начальное значение> > <конечное значение> или в форме downto <начальное значение> < <конечное значение>, то тело цикла не выполнится ни разу. Внутри цикла значение счетчика цикла может использоваться в выражениях. После окончания выполнения структуры for значение управляющей переменной не определено, если только выполнение оператора for не было прервано с помощью оператора перехода.

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

Примеры оператора цикла с параметром:

for I := 1 to 10 do

for J := 1 to 10 do begin

X := 0;

for K := 1 to 10 do

X := X + Mat1[I,K]*Mat2[K,J];

Mat[I,J] := X;

end;

for C := red to blue do Check(C);

for I := 2 to 63 do

if Data[I] > Max then Max := Data[I];