На этом шаге мы рассмотрим цикл while.
Оператор while вместе с оператором case являются самыми универсальными управляющими конструкциями. С помощью операторов case можно записать условие разветвления произвольной сложности, а с помощью оператора while можно записать любое циклическое действие.
Упрощенно общую структуру оператора цикла с предусловием можно изобразить одним из двух следующих способов.
Если тело цикла состоит из одного оператора:
while <Условие> do <Оператор>;
Если тело цикла включает более одного оператора:
while <Условие> do begin <Оператор1>; <Оператор2>; . . . . <ОператорN>; end;
Оператор while позволяет многократно выполнять одни и те же ействия в зависимости от некоторого Условия, которое записывается между ключевыми словами while и do и должно быть выражением булевского типа, то есть принимать только значения True или False.
Опишем работу цикла while более подробно. Сначала, при входе в цикл, вычисляется Условие. Если оно равно False, то вход в цикл не выполняется и управление передается оператору, следующему непосредственно за Операторами тела цикла. Если же Условие равно True, то происходит вход в цикл и однократное выполнение Операторов его тела. Как только достигнут конец тела цикла, управление снова передается на его заголовок, где снова вычисляется Условие. Если значение Условия еще равно True (что зависит от изменения значений переменных во время предыдущего выполнения Операторов цикла), то тело цикла выполняется еще один раз, и так далее. Как только очередное вычисление Условия цикла дает значение False, работа цикла завершается.
С целью сравнения свойств операторов цикла while, repeat и for, при описании работы каждого из них, рассмотрим как с их помощью записывается один и тот же фрагмент программы, вычисляющий сумму элементов массива размерностью в n элементов.
const n = 20; begin . . . . Summa := 0 ; i := 1; { Должны быть начальные установки } { переменных, стоящих в условии цикла. } while i <= n do begin Summa := Summa + A[i]; i := i + 1; { Как минимум в одном операторе тела } { цикла должно быть изменение пере- } { менных условия цикла, приводящее } { в итоге к ложности условия. } end; . . . . end.
На следующем шаге мы рассмотрим цикл repeat.