Оператор цикла с пост-условием применяется если во время написания программы количество повторений неизвестно. Общий вид этого оператора таков:
repeat <операторы>;until <условие>;
Исполнение цикла повторяется до того момента, когда <условие> станет истинным.
Изображение оператора цикла на блок-схеме приведено на рисунке.
Зарезервированные слова repeat и until по действию похожи на операторные скобки, вследствие этого между словами repeat и until можно поместить несколько операторов, отделяя их друг от друга точкой с запятой. Т.е. нет необходимости вставлять составной оператор.
Примечание При записи оператора слово until обычно выравнивается на слово repeat, к которому оно относится, а внутренние операторы цикла несколько сдвигаются вправо.
При составлении цикла с пост-условием необходимо принимать во внимание следующие моменты:
§ тело цикла выполняется как минимум один раз;
§ операторы внутри цикла должны иметь правильную последовательность, причем должен присутствовать хотя бы один оператор, влияющий на условие окончания (иначе цикл будет продолжаться бесконечно – вечный цикл).
§ условие окончания должно, в конце концов, быть удовлетворено;
Пример (ввод отрицательного числа):
var X : integer;begin repeat write('Введите отрицательное число: '); readln(X); if X>=0 then writeln('Bbi неправильно ввели число! Повторите ввод.'); until X<0;end.
Другой способ организации повторного выполнения оператора связан с использованием цикла с пред-условием. Этот оператор похож на оператор цикла с пост-условием (repeat), однако условие вычисляется и проверяется в начале цикла повторения, а не в конце. Оператор цикла с пред-условием имеет вид:
while <условие> do <оператор>;
Изображение оператора цикла на блок-схеме приведено на рисунке.
Тело цикла может состоять только из одного оператора. Если необходимо выполнить более одного оператора, то нужно использовать составной оператор.
Исполнение цикла повторяется до тех пор, пока <условие> истинно.
Существенным является тот факт, что один из операторов, находящихся внутри цикла, должен в конечном счете влиять на значение условия, поскольку иначе цикл будет повторяться бесконечно. Кроме того, нужно наложить дополнительное требование на условие, которое заключается в том, что это условие должно иметь определенное значение перед началом выполнения оператора.
Примечание При практическом программировании оператор цикла с пред-условием оказывается гораздо полезнее оператора цикла с пост-условием. Это связано с тем фактом, что во многих случая необходимо вначале установить, не следует ли пропустить цикл целиком. Если возникают сомнения при выборе операторов цикла с пред-условием и пост-условием, рекомендуется сначала использовать оператор цикла с пред-условием.
Пример (xk/k < a {поиск к}):
var к : integer; x,a,p : real;begin write('Введите A, X: '); readln(a,x); к := 1; p := x; while p/k>=a do begin p :=p*x; inc(k); end; writeln('Значение к равно ',к); end.