Статья: Операторы цикла
END.
оказывается зацикленной.
Третий тип цикла - REPEAT - записывается в виде:
REPEAT операторы UNTIL логическое выражение;
Если тело цикла REPEAT содержит больше одного оператора, нет необходимости использовать блок, поскольку сами ключевые слова REPEAT и UNTIL являются в данном случае логическими скобками. Перед UNTIL можно не ставить ";". Цикл REPEAT выполняется так : сначала выполняется тело цикла, затем вычисляется логическое выражение, и если оно истинно, цикл заканчивается. Таким образом, цикл REPEAT всегда выполняется хотя бы один раз и так же, как и WHILE, подвержен зацикливанию. Запишемнашипримерыциклом REPEAT :
CONST i : Word = 1; Real = 0; N = 22;
BEGIN REPEAT s:=s+SQR(i); INC(i) UNTIL i>N;
WRITELN('сумма=',s);
END.
VAR c : Char;
BEGIN c:=Pred(' ');
REPEAT c:=Succ(c); WRITE(c) UNTIL c=#255;
WRITELN;
END.
Из приведенных примеров очевидно, что любой циклический алгоритм можно записать любым видом цикла, все они взаимозаменяемы и выбираются программистом в соответствии с его вкусами, однако можно порекомендовать в тех случаях, когда количество шагов цикла известно заранее, использовать цикл FOR.
В последней версии языка Паскаль появились процедуры BREAK и CONTINUE, аналогичные операторам break и continue языка С. Процедура BREAK приводит к немедленному окончанию цикла, в котором она вызвана. Вызов процедуры CONTINUE приводит к немедленному переходу к следующему шагу цикла. Запишемнашипримеры, используя BREAK :
CONST i : Word = 1; s : Real = 0; N = 22;
BEGIN WHILE TRUE DO BEGIN
s:=s+SQR(i); INC(i); IF i>N THEN BREAK; END;
WRITELN('сумма=',s);
END.
VAR c : Char;
BEGIN c:=Pred(' ');
REPEAT c:=Succ(c); WRITE(c); IF c=#255 THEN BREAK UNTIL FALSE;
WRITELN;
END.
Чтобы привести осмысленный пример использования процедуры CONTINUE, изменим условие второй задачи следующим образом: вывести на экран все символы с 32-го по 255-й, не являющиеся русскими буквами.
VAR c : Char;
BEGIN FOR c:=' ' TO #255 DO BEGIN