Оператор цикла с предварительным условием или с предусловием while имеет такую структуру:
while<условие> do <оператор>;
где <условие> – выражение логического типа, при значении которого равном True выполняется <оператор>.
<оператор> – произвольный оператор Object Pascal, в том числе и составной. Исполняемый в цикле оператор также как в цикле forназывают телом цикла.
Оператор while выполняется следующим образом:
1. Вычисляется значение выражения <условие>.
2. Если значение выражения <условие> равно False (условие не выполняется), то на этом выполнение цикла while завершается.
3. Если значение выражения <условие> равно True (условие выполняется), то выполняется оператор тела цикла <оператор>.
4. Переход на шаг 1.
Цикл продолжает выполняться до тех пор, пока условие не станет ложным (False).
Цикл while используется в том случае, если некоторую последовательность действий (операторов программы) надо выполнить несколько раз, причем необходимое число повторений во время разработки программы неизвестно и может быть определено только во время работы программы. Более того, цикл whileнередко предоставляет бо́льшую гибкость, нежели оператор цикла с параметром, например, можно использовать дробный шаг.
Типичными примерами использования цикла while являются поиск в массиве или в файле.
Алгоритм, соответствующий оператору while, представлен на рис. 3.6.
Рис. 3.6.Алгоритм оператора цикла while
Для того чтобы <оператор> в тела цикла выполнился хотя бы один раз, необходимо, чтобы перед выполнением оператора while значение выражения <условие> было истинно (True).
Следует отметить, что для того, чтобы цикл while завершился, необходимо, чтобы операторы в теле цикла влияли на значение выражения <условие> (изменяли значения переменных, входящих в выражение <условие>).
Пример программы, которая запрашивает число и выводит его квадрат, до тех пор, пока не будет введено число 0:
Var
n:integer;
{n – число, квадрат которого рассчитывает программа}
Begin
n:=1; {инициализация n, чтобы попасть в цикл while}