Fußgesteuerte Schleife | Kopfgesteuerte Schleife |
Loop
Anweisungen If logische Bedingung Exit EndLoop |
Loop
If logische Bedingung Exit Anweisungen EndLoop |
Hier werden die Anweisungen innerhalb der Schleife mindestens einmal ausgeführt. | Hier wird die Schleife nur ausgeführt, wenn die logische Bedingung wahr ist. |
Solltest du dennoch einmal eine ungewollte Endlosschleife progammiert haben, kannst du das Programm jederzeit mit der -Taste beenden. |
Bei einer Loop-Schleife existiert
keine Laufvariable, also müssen wir eine Zählervariable einführen,
die bei jedem Schleifendurchlauf um zwei erhöht wird. Da der Wert
dieser Zählervariablen im Falle eines Schleifenabbruchs wegen prim
= false den kleinsten echten Teiler enthält, geben wir der Variablen
den Namen teiler.
Loop-Schleifen kommen vor allem dann
zum Einsatz, wenn die Anzahl der notwendigen Schleifendurchläufe nicht
von vornherein feststeht, wie im folgenden Beispiel.
Bereits die Babylonier haben zur Berechnung der Quadratwurzel aus der Zahl n folgendes rekursives Näherungsverfahren verwendet: |
|
wurzel
()
Prgm Local r, w, hlp ClrIO Request "Radikand", r expr(r) ® r EndPrgm |
Um den TI-92 zu einer vernünftigen Anzeige des Ergebnisses zu bewegen, muss der Modus "Exact/Approx" auf "APPROXIMATE" eingestellt werden. Dies geschieht mit Hilfe des Befehls
setMode("Exact/Approx","APPROXIMATE").
Will man nach der Programmausführung die alten Einstellungen wieder herstellen, müssen diese am Programmanfang mit dem Befehl
getMode("ALL") ® Var
in der Variablen Var gespeichert werden. Die alten Einstellungen lassen sich am Programmende mit dem Befehl
setMode(Var)
wieder herstellen.
Auch alle anderen Einstellungen können mit diesen Befehlen geändert werden. Eine genaue Beschreibung der Befehle findest du im Anhang A des Handbuches. |
|
wurzel
()
Prgm Local r, w, hlp, sm getMode("ALL") ® sm setMode("Exact/Approx","APPROXIMATE") ClrIO Request "Radikand", r expr(r) ® r setMode(sm)
|
Je näher der Startwert (= das
xalt beim ersten Schleifendurchlauf) bei dem tatsächlichen
Ergebnis liegt, desto schneller liefert das Programm das Ergebnis. Das
Näherungsverfahren führt jedoch auch bei einem sehr schlecht
gewählten Startwert, z.B.: xalt= r, verblüffend
rasch zum gewünschten Ergebnis:
|
...
expr(r) ® r r ® w Startwertfestlegen Loop w ® hlp xneu auf xalt speichern (hlp + r / hlp) / 2 ® w If abs(w - hlp) < 1.E-10 Exit EndLoop Disp "Ö("&string(r)&") = "&string(w) setMode(sm) EndPrgm |
||
|
[Hilfestellung; Lösungsvorschlag]
Dabei wird die eingegebene Zahl so lange ganzzahlig durch 2 dividiert, bis der Quotient Null ist. Die dabei auftretenden Reste (gelb unterlegt) ergeben von unten nach oben gelesen die gewünschte Dualzahl. |
Loop
Anweisungen Loop Anweisungen EndLoop Anweisungen EndLoop |
Das Programm "Wurzelberechnungen" soll so erweitert werden, dass es so lange wiederholt wird, bis der Benutzer die -Taste betätigt. |
|
wurzel
()
Prgm Local r, w, hlp, taste ... Loop ClrIO ... Disp "nochmal ... bel. Taste; Ende = ESC" Loop getKey() ® taste If Taste ¹ 0 Then Exit EndIf EndLoop If Taste = 264 Then Exit EndIf EndLoop setMode(sm) EndPrgm |
|