| | | | Gliederung: | Folgende Themen werden behandelt: |
1. Allgemeines
Falls man viele Programme hat, die vom Inhalt her sehr ähnlich sind, bietet sich eine Auslagerung der doppelten Codezeilen an.
Mit den hier vorgestellten Befehlen ist es möglich, aus einem Programm heraus andere Programme zu starten.
Die Programme laufen dann nicht gleichzeitig, sondern nur das zuletzt aufgerufene. Sobald dieses beendet ist, wird zum aufrufenden Programm zurückgekehrt.
Man kann also von einer Verschachtelung sprechen. Die maximal mögliche Anzahl gleichzeitiger Unterprogramme ist 10.
Da Variablen global sind hat jedes Programm die gleichen Variablen. Variablen können daher zur Informationsübermittlung zwischen den Programmen benutzt werden.
2. Programme starten ( Prog ~ Return )
Der Prog-Befehl erwartet als Parameter den Namen des aufzurufenden Programmes (so, wie er in der Programmliste steht).
Um vom aufgerufenen Programm zurückzukehren, wenn dies noch nicht komplett abgearbeitet ist, kann man Return verwenden.
| Syntax: | Prog "<Name des auszuführenden Programmes>" Operationsbefehl Return Operationsbefehl |
| Beispiel: | Programm "EINGABE":
ClrText ? A Prog "AUSGABE" "DANKE!"
Programm "AUSGABE":
"IHRE ZAHL:":A Return |
| Dieses Programm fordert vom Benutzer eine Zahl an und startet das Ausgabeprogramm. Da Variablen global sind, hat A hier den Wert der im Eingabeprogramm zugewiesen wurde. Eigentlich wird am Ende des aufgerufenen Programmes sowieso zurückgewechselt. Wozu dann das Return? Das liegt daran, dass ohne das Disponse-Zeichen A nicht ausgegeben würde und nach jedem Operationstrenner eine weitere Operation folgen muss. |
Mit Programmaufrufen lassen sich natürlich auch Rekursionen implementieren. Von Rekursion spricht man, wenn ein Programm sich selbst aufruft.
Hierbei bereiten die globalen Variablen allerdings Ärger, da diese das Prinzip der Rekursion aushebeln. Denn eigentlich wird ein komplexes Problem ja auf ein einfaches zurückgeführt, was sich in den Variablen widerspiegelt. Durch die Globalität gehen allerdings alle Information der kleineren Rekursionstiefen verloren und müssen durch teilweise erheblichen Mehraufwand wieder hergestellt werden. Weiterhin lässt die maximale Aufruftiefe von 10 keine komplexeren Problemlösungen zu.
Daher ist die Implemetierung einer Rekursion nicht ganz so trivial wie in anderen Sprachen. Für einfache Rekursionen sollten Sie daher die eingebauten Rekursionsfunktionen des Taschenrechners benutzen.
| Beispiel: | Programm "INIT":
ClrText ? N: 0 W N<1 Or N>10 Or Frac N 0 Stop Prog "FAK" "ERGEBNIS:":W
Programm "FAK":
If N=1 Then 1 W Return Else Dsz N Prog "FAK" Isz N:NW W IfEnd |
| Diese Berechnung der Fakultät soll als Beispiel für rekursive Aufrufe dienen. Da alle Variablen immer global sind, wirkt sich die Dekrementierung von N auch auf die kleineren Rekursionstiefen aus. Daher muss N nach der Rückkehr aus einem tieferen Rekursionsaufruf wieder inkrementiert werden. N muss positiv und ganzzahlig sein. Aufgrund der maximal zulässiggen Rekurionstiefe von 10 darf N nicht größer als 10 sein. |
| SelfGTR Version 5.23 vom 04.10.2007 | © 2002 - 2007 Ronny Scholz |
|