Можно выйти?
Сакраментальный школьный вопрос Иногда нужно прервать выполнение цикла до его окончания.
Есть несколько способов досрочного завершения циклов. Например, для этого в циклы whileи repeatможно добавить флаг (переменную логического типа), который будет сигнализировать об окончании работы цикла.
Рассмотрим практически бесполезную процедуру:
procedure _cycl; var
n,i: integer; flag: boolean; begin
J
flag:= FALSE; i:=0;
while not flag do begin i:= i+1;
//if i > 5 then flag:= TRUE; flag:= i > 5; end;
frmMain.lstProtokol.Items.add(inttostr(i));
end;
Перед началом цикла мы сбрасываем флаг, и теперь оператор whileбудет выполняться до тех пор, пока значение флага не станет равным TRUE. Мы сами должны «поднять флаг» в нужный момент. Например, мы отсчитали больше 5 проходов цикла (переменная iприняла значение 6). Нам этого вполне достаточно, что мы и сообщаем оператору while, который тут же заканчивается и передаёт управление оператору, следующему за структурой while, и мы в окне списка увидим число 6.
Как видите, всё очень просто. Главное - не забыть на каждой итерации увеличивать значение переменной i, в противном случае цикл не закончится никогда! Точно так же флаг используется и в цикле repeat:
repeat i:= i + 1; flag:= i > 5;
until flag;
frmMain.lstProtokol.Items.add(inttostr(i));