While-Schleifen in MATLAB
In dieser Lektion möchte ich Ihnen die Implementierung von While-Schleifen in Matlab näherbringen.
Was versteht man unter einer While-Schleife? Es handelt sich um eine wiederholbare Struktur, auch "Schleife" genannt, die das mehrmalige Ausführen eines Anweisungsblocks ermöglicht, solange eine bestimmte Bedingung erfüllt ist. Jedes Mal, wenn der Anweisungsblock komplett durchlaufen wird, spricht man von einer Iteration.
Die While-Schleife prüft zuerst eine logische Bedingung, bevor der Anweisungsblock zur Ausführung kommt.
while Bedingung
Anweisungsblock
end
Abhängig vom Ergebnis der Bedingungsprüfung kann die Schleife zwei unterschiedliche Verhaltensweisen annehmen:
- Ist die Anfangsbedingung nicht erfüllt, wird die Schleife nicht einmal eine vollständige Iteration durchlaufen.
- Bei Erfüllung der Anfangsbedingung wird der Anweisungsblock ausgeführt. Nach Abschluss startet die Schleife erneut. Sie endet, sobald die Anfangsbedingung nicht mehr zutrifft.
Hinweis: Die While-Schleife gilt als unbestimmte Schleife, da die Anzahl ihrer Durchläufe im Voraus nicht feststeht. Sie könnte gar nicht, nur wenige Male, oder unendlich oft durchlaufen werden.
Lassen Sie uns das an einem praktischen Beispiel veranschaulichen.
In diesem Codebeispiel werden die Quadrate von Zahlen von 1 bis 9 mithilfe einer While-Schleife berechnet.
x=1;
while x<10
disp(x^2);
x=x+1;
end
Die Schleife durchläuft neun "Runden" oder Iterationen.
In jeder dieser Iterationen wird das Quadrat der Variablen x berechnet und anschließend um eins erhöht.
Die Ausgabe sieht folgendermaßen aus:
1
4
9
16
25
36
49
64
81
In diesem Beispiel handelt es sich um eine bestimmte Schleife, da die Anzahl der Iterationen von vornherein feststeht.
Doch dies ist nicht immer der Fall. Eine While-Schleife kann auch eine unbestimmte Anzahl von Durchläufen haben.
Es kann sogar passieren, dass die Anfangsbedingung stets erfüllt bleibt, was zu einer unendlichen Schleife führt.
Wie verhindert man eine unendliche Schleife?
Um das Risiko einer endlosen Schleife zu minimieren, empfehle ich, eine erzwungene Ausstiegsbedingung nach einer maximalen Anzahl von Iterationen einzuführen.
Zum Beispiel erzeugt dieses Skript eine Zufallszahl zwischen 1 und 100 und fordert den Nutzer auf, diese zu erraten.
number=randi(100);
x=0;
while x~=number
x = input("Welche Zahl habe ich gezogen? ")
if (x~=number)
disp("Falsch!")
else
disp("Richtig geraten!")
break;
end
end
Das ist ein Beispiel für eine unbestimmte Schleife, da die Anzahl der Versuche des Nutzers, die Zahl zu erraten, unbekannt ist.
Die Schleife endet erst, wenn der Nutzer die Zahl richtig errät.
Hinweis: Ein rationaler Nutzer würde höchstens 100 Versuche unternehmen. Sollte der Nutzer jedoch ständig dieselbe Zahl eingeben, würde die Schleife nie enden.
Um das Problem einer endlosen Schleife zu vermeiden, sollte man eine maximale Anzahl von Durchläufen in die While-Schleife integrieren.
Man könnte beispielsweise eine Zählvariable t hinzufügen, die nach jedem Versuch um eins erhöht wird, also t = t + 1.
Wenn die Variable t den Wert 10 erreicht, endet die Schleife, selbst wenn der Nutzer die Zahl noch nicht erraten hat.
number=randi(100);
x=0;
t=0;
while x~=number
x = input("Welche Zahl habe ich gezogen?")
if (x~=number)
disp("Falsch!")
else
disp("Richtig geraten!")
break;
end
t=t+1
if (t==10)
disp("Zu viele Versuche!");
break;
end
end
So wird dem Nutzer ermöglicht, maximal zehn Versuche zu unternehmen. Es ist ein einfacher, aber effektiver Weg, um zu verhindern, dass die While-Schleife endlos läuft.