Оператор repeatuntil весьма схож со своим предшественником - циклом whiledo.
repeat <оператор> until <условие - логическое выражение>;
Основные отличия цикла repeatuntil от whiledo заключаются в следующем. Во-первых, оператор цикла repeat..until вне зависимости от логического выражения будет выполнен хотя бы один раз. Это объясняется местонахождением логического выражения: проверка условия происходит после того, как выполнилось тело цикла. Во-вторых, в отличие от цикла while..do, выход из цикла с постусловием осуществляется при истинности логического выражения. Другими словами, цикл repeat.. until будет выполняться до тех пор, пока логическое выражение не соблюдается.
X :=0;
repeat
MyArray[X]:=0; X:=X+1;
until X>=100; //выполнять, пока значение X меньше 100
Вложенные циклы
Один из приемов работы с циклами - использование вложенных циклов. В этом случае в теле одного цикла выполняется другой. Следующий пример предлагает способ обнуления всех элементов двумерного массива A. Обращение к ячейкам массива производится в рамках двойного цикла for..do.
var A : Array[0..9, 0..9] of Integer;
x, y : byte; begin
for x:=0 to 9 do
for y:=0 to 9 do A[x, y]:=0;
end;
Процедуры break и continue
Изучение циклов было бы логически незавершенным без рассмотрения процедур прерывания текущей итерации цикла (break) и внеочередного начала следующей итерации (continue).
procedure break; procedure continue;
Рассмотрим такой пример:
var Accept : boolean;
Counter : Integer; begin
Accept:=true; Counter:=0; while Accept=true do begin
Counter:=Counter+1; Accept:=<выражение>; if Counter>10 then break; end;
end;
Цикл будет прерван, когда значение переменной-счетчика (counter) превысит 10.
Другой пример. Необходимо подсчитать сумму четных чисел, входящих в диапазон от 0 до 10. Для этого воспользуемся процедурой Continue() и функцией Odd(), определяющей четное или нечетное число.
function Odd(X: Longint): Boolean; //X нечетное - результат true, иначе - false
var Counter, Sum : Integer;
begin
Sum:=0;
for Counter:=0 to 10 do begin
if Odd(Counter)=true then Continue; Sum:=Sum+Counter;
end;
Write(Sum);
ReadLn;
end;
Если переменная counter принимает четное значение, выполняется выражение sum := sum + counter, в противном случае метод Continue() принуждает цикл начать новую итерацию (досрочно увеличивает счетчик counter на 1).