Die Do-Until-Schleife in Matlab
In dieser Lektion werde ich Ihnen die Anwendung der Do-Until-Schleife in Octave näherbringen.
Was versteht man unter einer Do-Until-Schleife? Dies ist eine Schleifenkonstruktion, die es ermöglicht, einen Codeblock mehrfach auszuführen, vorausgesetzt, eine bestimmte Bedingung ist erfüllt oder nicht erfüllt. Sie ähnelt der While-Schleife, wobei der entscheidende Unterschied darin liegt, dass die Bedingungsprüfung am Ende jeder Durchlaufphase stattfindet.
Wie funktioniert sie also genau?
Die Do-Until-Struktur gewährleistet, dass der Codeblock zumindest einmal durchlaufen wird.
In Matlab existiert keine spezielle Anweisung für die Implementierung der Do-Until-Schleife. Allerdings lässt sie sich mit der While-Anweisung problemlos umsetzen.
Ein anschauliches Beispiel hierfür ist:
cond=true;
x=1;
while cond
disp(x);
x=x+1;
if (x>9)
cond=false;
end
end
In diesem Skript wird der Variablen cond der Wert true und der Variablen x der Wert 1 zugewiesen.
Anschließend wird der Befehlsblock innerhalb der While-Schleife ausgeführt, der den Wert von x ausgibt und um eins erhöht.
Nach Abschluss des Codeblocks prüfen wir, ob die Bedingung x>9 erfüllt ist.
- Ist dies nicht der Fall, erfolgt eine weitere Iteration.
- Trifft die Bedingung jedoch zu, wird der Variablen cond der Wert false zugewiesen, was zur Beendigung der Schleife führt.
Die Ausgabe dieses Skripts sieht folgendermaßen aus:
1
2
3
4
5
6
7
8
9
Das Skript gibt die Zahlen von 1 bis 9 aus. Die Schleife endet, sobald die Variable x den Wert 10 erreicht, da die Bedingung x > 9 erfüllt ist.
Hinweis. In diesem Beispiel wurde die Do-Until-Struktur genutzt, um eine deterministische Schleife zu implementieren, bei der die Gesamtzahl der Durchläufe von Anfang an bekannt war. Die Do-Until-Struktur kann ebenfalls für nicht-deterministische Schleifen eingesetzt werden, wobei hier das Risiko von Endlosschleifen zu bedenken ist.
Das Risiko einer Endlosschleife tritt auf, wenn die Do-Until-Schleife für eine Schleife mit unbestimmter Laufzeit verwendet wird.
Betrachten wir als Beispiel das folgende Skript, in dem der Nutzer aufgefordert wird, eine zufällige Zahl zu erraten:
cond=true
while (cond)
nummer=randi(100);
x = input("Geben Sie eine Zahl zwischen 1 und 100 ein")
if not( x==nummer)
disp("Leider nicht richtig geraten")
end
if (x==nummer)
disp("Richtig geraten!")
cond=false;
end
end
Diese Schleife könnte theoretisch unendlich oft durchlaufen werden, sollte der Nutzer die Zufallszahl nicht erraten.
Um das Risiko einer solchen Endlosschleife zu minimieren, kann eine erzwungene Ausstiegsbedingung in die Schleife integriert werden.
c=0;
cond=true;
while (cond)
nummer=randi(100);
x = input("Geben Sie eine Zahl zwischen 1 und 100 ein")
if not( x==nummer)
disp("Leider nicht richtig geraten")
end
if (x==nummer)
disp("Glückwunsch, Sie haben es erraten!")
cond=false;
end
c=c+1;
if (c==10)
disp("Zu viele Versuche, das Spiel ist vorbei.");
break;
end
end
In dieser abgewandelten Version des Skripts erhöhen wir nach jeder Iteration der Schleife den Zähler (c).
Beendet der Nutzer das Raten nicht innerhalb von 10 Versuchen, so wird die Schleife automatisch abgebrochen, selbst wenn die Zufallszahl noch nicht erraten wurde. Auf diese Weise wird das Risiko einer Endlosschleife wirksam vermieden.