logo search
2012_METODICh_POSOBIE_PASCAL

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

Оператор цикла REPEAT, известный как оператор цикла с постусловием, имеет такой вид:

repeat S until P;

Работа оператора определяется следующей схемой:

При выполнении этого оператора сначала выполняется тело цикла (S), затем вычисляется некоторое логическое вы­ражение P (условие), принадлежащее типу Boolean, в случае ложности которого вновь выполняется тело цикла. Затем выполнение тела цикла, вычисление условия P и его про­верка повторяются до тех пор, пока выражение P не стано­вится равным TRUE. После этого управление передаётся следующему (за REPEAT) оператору в программе.

Оператор REPEAT отличается от оператора WHILE, во-первых, тем, что здесь условие проверяется после выпол­нения тела цикла. Иными словами, гарантируется хотя бы однократное его выполнение. Во-вторых, оператор REPEAT выполняется до тех пор, пока условие равно FALSE, и управление передается следующему (за REPEAT) оператору, когда условие становится равным TRUE (для оператора WHILE имеет место обратная зависимость).

Даже если условие р равно TRUE с самого начала, тело цикла выполнится хотя бы раз. Если условие р тождественно FALSE (repeat s until false), цикл будет бесконечным.

Для того чтобы понять разницу между операторами цикла WHILE и REPEAT, рассмотрим соответствующие фрагменты программ, вычисляющих степени числа 3 в диапазоне между 1 и 300.

Цикл WHILE Цикл REPEAT

a:=3: a:=3;

while a<300 do repeat

begin WritteLn (a);

WritteLn (a); a:=a*3

a:=a*3 until a>=300;

end;

Прежде всего бросается в глаза, что условия повторения цикла для двух случаев противоположны. Это объясняется тем, что в операторе WHILE цикл выполняется, пока условие не примет значение FALSE, а в операторе REPEAT – пока условие не примет значение TRUE.

Так же следует обратить внимание на то, что тело цикла REPEAT не требуется заключать в операторные скобки BEGIN… END. Если в операторе WHILE после ключевого слова DO выполняется единственный оператор (и если требуется циклически выполнять несколько действий, приходится несколько операторов объединять в составной оператор), то в операторе REPEAT между ключевыми словами REPEAT и UNTIL можно ввести любое количество операторов, без необходимости заключать их в операторные скобки.

Наконец в операторе REPEAT после последнего оператора в теле цикла нет точки с запятой. Это ещё одна особенность оператора REPEAT—перед ключевым словом UNTIL точка с запятой необязательна.