nextupprevious
 

Next:4.1.4 Операторы цикла с параметрами
Up:4.1 Средства для организации циклических вычислений
Previous:4.1.2 Свойства оператора цикла


4.1.3 Оператор цикла с условием на окончание

Другая форма управления повторением оператора, близкая к предыдущей, задается оператором цикла с условием на окончание, который также состоит из оператора и условия (логического выражения), однако (рис. 4.4) это условие проверяется на истинность после каждого выполнения тела цикла (а не перед ним!).
Рис. 4.4. Блок-схема оператора цикла с условием на окончание

 
 

                                             RepeatStatement = repeat StatementSequence until Expression.

                                             Рис. 4.5. Синтаксис оператора цикла с условием на окончание
 

Оператор цикла с условием на окончание задается синтаксической правилом рис. 4.5. Он, выполнив операторы тела один раз, предписывает повторные их выполнения до тех пор, пока логическое выражение (условие) не станет истинным. Таким образом, если в операторе цикла с условием на продолжение тело цикла может не выполниться ни разу, то в операторе цикла с условием на окончание оно выполняется всегда, по крайне мере, один раз. Действие оператора

repeat$S$until$B$

можно переписать в виде

вegin$S$; while ~$B$do$S$end end.

Рассмотрим задачу подсчета длины входной последовательности литер, изображающей вопросительное предложение.

Программа: Число литер
Вход$\alpha$
где$\alpha = \beta A$$A ='?'$ и $\beta \in (Char \setminus \{'?'\})^*$
Выход$N$
где$N = \mid \alpha \mid$

В соответствии со спецификацией можно предложить следующее программное решение задачи:

module ЧислоЛитер;
    var Символ: Char; N: Integer;
begin
    N:= 0; (*$\{N = \mid Input1\mid = 0,\mid Input2 \mid > 0 \}$*)
    repeat (* {Ограничивающее выражение:$ \mid Input2 \mid \}$*)
        (*$\{N = \mid Input1\mid, \mid Input2 \mid >0\}$*)
        read(Символ); N:= N+1
        (* {Символ = Последний(Input1)$N = \mid Input1\mid, \mid Input2 \mid \geq 0 \}$*)
     until Символ = '?';
     (* $\{N= \mid Input\mid \}$ *)
     write (N)
end ЧислоЛитер.

Здесь и в дальнейшем нами используется функция "Последний", которая определена для любой непустой последовательности и в качестве своего результата выдает ее последний элемент.
 

Next:4.1.4 Операторы цикла с параметрами
Up:4.1 Средства для организации циклических вычислений
Previous:4.1.2 Свойства оператора цикла



© В.Н. Касьянов, Е.В.Касьянова, 2004