Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#6

AW: Unterschied While-Schleife <-> RepeatUntil-Schleife

  Alt 26. Sep 2012, 16:02
Also repeat-until nimmt man, wenn die Schleife mindestens ein Mal ausgeführt werden soll. Hier ein kleines Beispiel:

Delphi-Quellcode:
var
  Eingabe: string;
begin
  repeat
    Eingabe := InputBox('Eingabe', 'Geben sie einen Namen ein', '');
  until Trim(Eingabe) <> '';

  ShowMessage('Der Name lautet: ' + Eingabe);
end;
Die repeat-until Schleife achtet hier drauf, dass ein Name eingegeben wird. Zuerst wird über InputBox nach einem Namen gefragt. Wird ein leeres Feld zurückgegeben (das wird in until geprüft) geht es zurück zu repeat und die Frage wird wiederholt. Das Ganze wird wiederholt bis die Eingabe nicht leere ist.

Ein weiteres Beispiel. Gesucht sind Zufallszahlen 2, 5 oder 7. In der Schleife wird einfach eine Zufallszahl zwischen 0 und 9 erzeugt, aber so lange wiederholt bis die Zufallszahl entweder 2, 5, oder 7 ist.

Delphi-Quellcode:
var
  k: Integer;
begin
  Randomize;
  repeat
    k := Random(10);
  until (k = 2) or (k = 5) or (k = 7);

  ShowMessage('Die Zufallszahl aus 2, 5 oder 7 lautet: ' + IntToStr(k));
end;
-----------------

Bei while wird zuerst geprüft ob die Schleife überhaupt nötig ist. Ein schönes Beispiel findet man zu Pos Funktion:

Delphi-Quellcode:
var
  S: string;
begin
  S := ' 123.5';
  { Leerzeichen in Nullen konvertieren }
  while Pos(' ', S) > 0 do
    S[Pos(' ', S)] := '0';
end;
In S ist eine Zahl die vorne paar Leerzeichen enthält. In der while Zeile wird zuerst geprüft ob sich in S noch ein Leerzeichen befindet, wenn ja dann wird es in der Schleife durch ein 0 Zeichen ersetzt.

Vereinfacht könnte man sagen, dass es bei while bereits ein Ergebnis gibt, das lediglich mit Hilfe von while-Schleife irgendwie noch bearbeitet oder überprüft wird. Bei repeat wird in der Schleife erst das Ergebnis erzeugt und dann unter until überprüft. Wie gesagt, vereinfacht dargestellt.
  Mit Zitat antworten Zitat