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.
Ich habe vergangenes Jahr über fünf Monate versucht für delphi-lernen.de Spenden zu sammeln - es blieb leider bei 20 Euro von zwei Spendewilligen.
Nun hoffe ich, da es nicht um mich geht, dass sich mehr entschließen und für eine gute Sache zu spenden:

Alle Informationen - auch für die Überweisung den Verwendungszweck beachten!

Der neuste Stand, mindestens einmal im Monat hier zu sehen!

Wir machen einen Unterschied, indem wir Dinge tun, nicht indem wir darüber reden. (Nelson Mandela)

 

 

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ß ;)