Хелпикс

Главная

Контакты

Случайная статья





Псевдографика.. Анализ для операторов FOR.. Оператор REPEAT.



17.2.3. Псевдографика.

 

17.2.4. Анализ для операторов FOR.

17.3. Оператор REPEAT.

 

Операторы REPEAT управляют итерациями с проверкой в конце тела цикла, эта проверка прекращает итерации, когда условие равно TRUE.

 

Оператор REPEAT обеспечивает повторяющееся выполнение списка операторов до тех пор, пока логическое выражение, управляющее выполнением равно FALSE. Форма оператора следующая.

REPEAT

{операторы тела}

UNTIL {управляющее выражение}

Оператор REPEAT:

REPEAT S UNTIL B

Имеет тот же эффект, что и оператор WHILE c обратным условием и предварительно выполненным телом.

BEGIN S END; WHILE NOT B DO BEGIN S END

Эквивалентность можно наблюдать, рассматривая варианты.

Во-первых, тело оператора REPEAT выполняется ровно один раз, если условие B равно TRUE после выполнения S. S выполняется однажды и оператор WHILE предохраняет от дальнейшего выполнения, потому что NOT B равно FALSE. Таким образом, оба фрагмента программы эквивалентны в этом случае.

Во вторых, предположим, что оператор REPEAT выполняет тело ровно дважды. Тогда B равно FLASE после первого выполнения, но какой-то из операторов в S устанавливает B в TRUE при втором выполнении S, прекращая цикл. В последовательности с WHILE наблюдается точно такое же поведение. Выполняется S; NOT B равно TRUE, поэтому копия S внутри WHILE также выполняется, устанавливая B в TRUE., после чего NOT B становится равным FALSE, что завершает цикл. Оставшиеся варианты, в которых оператор REPEAT выполняется более чем дважды, аналогичны: копия S, предшествующая оператору WHILE делает первое выполнение, а повторяющиеся S добирают остаток.

Значение оператора REPEEAT может быть получено из значения оператора WHILE.

Рассмотрим

REPEAT S1, S2, ..., Sn UNTIL B

где B – логическое выражение и каждый из Si, 1 < i < n – операторы.

Пусть S будет эквивалентно следующему оператору BEGIN

BEGIN S1, S2, ..., Sn END

рассмотрим оператор REPEAT R:

REPEAT S UNTIL B

Для любого начального состояния s, R будет иметь либо k ≥ 1 итераций, либо будет выполнено с ошибкой. В случае ошибки s не принадлежит domain(R) и поэтому не рассматривается. Если R завершается, B должно принимать значение FALSE после k-1 выполнения S и TRUE после k-го выполнения.

Функция для R может следовательно определена как

 

R = {<s, t>: существует целое k, k ≥ 1, такое что для любого целого i,

1 ≤ i <k, Si◦B(s) = FALSE, Sk◦B(s) = TRUE, Sk(s) = t}

 

Правило верификации похоже на правило для оператора WHILE может быть получено для оператора REPEAT. Однако, поскольку каждый оператор REPEAT имеет эквивалентную последовательность операторов с оператором WHILE, первое может быть проанализировано с помощью второго как в разделе 8.2.3.

 

17.4. Заключение.

 

Оператор CASE является удобной заменой вложенным IF когда выражение должно быть сравнено с несколькими константными значениями



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.