Basic Pascal Tutorial/Chapter 3/REPEAT..UNTIL/bg

From Lazarus wiki
(Redirected from REPEAT..UNTIL/bg)
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

български (bg) English (en) français (fr) 日本語 (ja) 中文(中国大陆)‎ (zh_CN)

 ◄   ▲   ► 

REPEAT...UNTIL

Конструкцията repeat .. until се нарича цикъл с постусловие защото контролното условие се проверява на края на изпълнението на цикъла.

Има следния синтаксис:

repeat
  statement1;
  // statement2;
  // further statements...
until BooleanExpression;

Цикълът repeat-until затваря операторите в тялото си, което означава, че няма нужда да се използва допълнителен блок begin ... end. Отбележете, че цикъла repeat продължава да се изпълнява докато условието му стане True; за разлика от цикъла while-do, който продължава докато условието му стане False.

Например, тялото на следния цикъл repeat ще се изпълни поне веднъж:

repeat
  WriteLn(Node.Text);
  Node := GetNextNode;
until not Assigned(Node);

Тук се предполага, че в самото начало променливата Node не е равна на Nil. Ако това на е така програмата ще се издъни.

Цикълът while-do е по-безопасен, понеже проверката се прави преди да се започне с изпълняване на операторите в тялото:

while Assigned(Node) do
  begin
    WriteLn(Node.Text);
    Node := GetNextNode;
  end;

Използвайте цикъл repeat-until когато операторите в тялото трябва да се изпълнят поне веднъж, независимо от началната стойност на контролното логическо условие.

Не е трудно по невнимание да се напише условие, контролиращо цикъл repeat-until, което никога не става True. Това поражда безкраен цикъл и кара програмата да увисне.

Един начин за програмиране е умишлено да се създаде безкраен цикъл и да се вмъкне оператор Break или Exit, контролиран от някакво условие по средата на цикъла, и по този начин да се излезе от иначе безкрайното повторение:

repeat
  statement1;
  if Condition then // Задължително трябва да стане True!
    Break;
  statement_that_might_affect_the_Condition;
until False;

Успешното използване на този подход зависи от условието, което в даден момент задължително трябва да стане вярно, без изключение. В противен случай сте вградили гарантирано безкраен цикъл.

 ◄   ▲   ►