Step 13 - repeat-until

Spendenaufruf des DRK Ortsvereins Spielberg e.V.

16. April 2023

 

Hallo liebe Besucherin, hallo lieber Besucher!

In einem ganz anderen Kontext möchte ich hier nun bewerben:
Der Verein, für den ich auch einstehe, benötigt Spenden:


Bitte bei der Überweisung den Verwendungszweck beachten!

Der neuste Stand gibt es hier zu sehen!

Wenn du denkst, du bist zu klein, um etwas zu bewirken, dann versuche, in einem Bett zu schlafen. (Dalai Lama)

 

 

Programmsteuerung 5: Die "repeat-until"-Schleife

Bei der repeat-until-Schleife werden die Anweisungen immer mindestens einmal ausgeführt, weshalb man hier von einer "nicht abweisenden Schleife" spricht. Hinzu kommt, dass es dann nicht mehr wiederholt wird, wenn die Bedingung wahr ist.
Die Struktur sieht wie folgt aus:
repeat
  // alle Anweisungen
until Bedingung;
// Ausgesprochen: Wiederhole ... Solange bis Bedingung wahr ist!
 
Als einfaches Beispiel, könnten wir hier ein kleines scherzhaftes Spiel ausdenken. Dieses nutzt die "MessageBox"-funktion, die wir bereits bei S09 - if im Einsatz hatten.
Quizfrage: Was passiert beim folgenden Beispiel?
var
  id : Integer;
begin
  repeat
     id := Application.MessageBox( 'Wollen Sie diesen Monat Ihr Gehalt Ihrem Chef spenden?',
                                   'Frage:',
                                   MB_YESNO+MB_ICONQUESTION);
  until id = ID_YES;
  ShowMessage('Eine Sehr gute Wahl!');
end;          
 
Lasst uns hier einmal repeat...until mit while vergleichen:
repeat ... until while
Die Abfrage steht am Ende Die Abfrage steht am Anfang
"nicht abweisende Schleife" "abweisende Schleife"
Braucht nie begin und end um mehrere Anweisungen auszuführen. Bei einer Anweisung braucht man kein begin und end, ab zwei Anweisungen aber schon.
Die Anweisungen werden mindestens einmal ausgeführt Wenn die Bedingung beim ersten Durchlauf false ist, werden die Anweisungen nicht weiter ausgeführt
Die repeat-until-Schleife läuft solange weiter, bis die Bedingung true ist. Die while-Schleife läuft solange weiter, bis die Bedingung false ist.
Achtung: Der unterste Punkt ist besonders bemerkenswert! Hier können die meisten Fehler in der Logik passieren, was zu Programm-Abstürzen führen kann. Die Anweisungen zwischen repeat und until werden solange wiederholt, bis die Bedingung wahr geworden ist.
 
Lasst uns noch mehr vergleichen:

i := 10;                    
repeat                            

  dec(i);
                                  
until i = 0;              

i := 10;
while i > 0 do
begin
    dec(i);
end;

// oder:

i := 10;
while i > 0 do
    dec(i);    
 
Auch hierfür kann der Source-Code komplett unter GitHub aufgerufen werden.
Viel Spaß ;)