Interne
Unterprogramme
Manchmal
haben verschiedene Teile eines Programms ganz ähnliche Aufgaben
zu bewältigen. Normalerweise müßte man dann dieselben
Zeilen zweimal oder noch öfter eingeben. Das ist aber nicht notwendig.
Die Zeilen können einmal in einer sogenannten Subroutine (oder
auch Unterprogramm) eingegeben werden und dann überall im Programm
verwendet werden, ohne daß sie ein zweites Mal getippt werden
müssen.
Dazu benutzt man z.B. die Anweisungen GOSUB (GO
to SUB routine = gehe zum Unterprogramm) und RETURN.
Das folgende Beispiel besteht aus einem Hauptprogramm und einem Unterprogramm,
das vom Hauptprogramm aus mehrmals aufgerufen wird. Wichtig ist der
END-Befehl, der das Hauptprogramm beendet und verhindert, daß
der Computer ohne GOSUB-Aufruf das Unterprogramm ausführt. Beachte,
daß der Name des Unterprogramms (Linie) mit einem Doppelpunkt
endet. Tippe das Programm ein und speichere unter sub1.bas
REM Sub1
Hauptprogramm:
CLS
zaehler=0
PRINT "Drei Chinesen mit dem Kontrabaß,"
GOSUB Linie
PRINT "saßen auf der Straße und erzählten
sich was,"
GOSUB Linie
PRINT "da kam die Polizei, na was ist denn dass?,"
GOSUB Linie
PRINT "Drei Chinesen mit dem Kontrabaß."
GOSUB Linie
PRINT "Das Unterprogramm wurde ";zaehler;"-mal
aufgerufen"
END
Linie:
zaehler=zaehler+1
PRINT "--------------------"; zaehler
RETURN
Das
folgende Programm gibt nach Eingabe von Namen und Noten ein Minizeugnis
aus. Die Eingabe erfolgt im Hauptprogramm, die Zuordnung der Schriftnoten
im Unterprogramm noten. Probiere das Programm aus und speichere
unter zeugnis1.bas
REM
Zeugnis schreiben
CLS
INPUT "Name des Schülers: ", schueler$
INPUT "Deutschnote? ", deu
INPUT "Englischnote? ", eng
INPUT "Mathenote? " , math
CLS
PRINT TAB(15); "Zeugnis"
PRINT
PRINT "Name des Schülers: "; schueler$
PRINT
PRINT "Deutsch ";
zens = deu
GOSUB noten
PRINT "Englisch ";
zens = eng
GOSUB noten
PRINT "Mathe ";
zens = math
GOSUB noten
END
noten:
IF zens = 1 THEN PRINT TAB(20); "sehr gut"
IF zens = 2 THEN PRINT TAB(20); "gut"
IF zens = 3 THEN PRINT TAB(20); "befriedigend"
IF zens = 4 THEN PRINT TAB(20); "ausreichend"
IF zens = 5 THEN PRINT TAB(20); "mangelhaft"
IF zens = 6 THEN PRINT TAB(20); "ungenügend"
RETURN
Externe
Unterprogramme (Sub und Function)
In
QBASIC gibt es noch eine weitere Möglichkeit, Unterprogramme
zu verwenden. Man unterscheidet zwischen Subs und Functions. Subs
und Functions erscheinen nicht im eigentlichen Programmlisting, für
beide wird ein eigenes Fenster erzeugt. Das Anlegen einer Sub oder
einer Function erfolgt über das Menü Bearbeiten - Neue Sub
... oder Bearbeiten - Neue Function ...
Daraufhin öffnet sich eine Dialogbox, in der der Name der Sub
bzw. Function gewählt werden kann. Schließlich wird zum
Sub- bzw. Function-Fenster umgeschaltet. Der Rahmen für eine
neue Sub
SUB Name_der_Sub
END SUB
analog
für eine neue Function
FUNCTION
Name_der_Function
END FUNCTION
wird
vorgegeben. Zwischen SUB und END SUB bzw. FUNCTION und END FUNCTION
wird dann der Programmcode eingegeben. Es ist auch möglich, innerhalb
von Subs und Functions weitere Subs zu schreiben. Zwischen den Subs,
Functions und dem Hauptmodul des Programms kann mit Ansicht - SUBs
... oder der F2-Taste umgeschaltet werden.
Das Beispiel ggT1 berechnet mit einer Function den größten
gemeinsamen Teiler (ggT) zweier Zahlen. Außerdem werden mittels
der Sub Tausche zwei Variablen der Größe nach sortiert.
Wähle zuerst Datei - Neu, um ein neues Programm zu beginnen.
Gib dann das Hauptmodul des Programmes ein.
REM ggT1
CLS
PRINT "ggT"
PRINT "--------------------"
INPUT "Zahl 1: ",z1
INPUT "Zahl 2: ",z2
PRINT "--------------------"
IF z1>z2 THEN Tausche z1,z2
PRINT "ggT("; z1; ","; z2 ; ")=";
PRINT ggt(z1,z2)
PRINT
END
Speichere
das Programm an dieser Stelle unter dem Namen ggt1.bas
in deinem Datenverzeichnis ab.
Wird das Programm an dieser Stelle mit <Shift> F5 gestartet,
so meldet das Programm einen Fehler, weil sowohl die Sub als auch
die Function noch nicht definiert sind. Für QBASIC sind "Tausche"
und "ggT" (noch) unbekannte Befehle oder Variablen.
Wähle
im Menü Bearbeiten den Punkt Neue Sub .... In der folgenden Dialogbox
trägst du bei Name den Text "Tausche" ein. Das Programm
schaltet um zum Modul Tausche.
Gib dann den folgenden Programmcode ein:
SUB Tausche
(x,y)
merke=x
x=y
y=merke
END SUB
Wähle
im Menü Bearbeiten den Punkt Neue Function .... In der folgenden
Dialogbox trägst du bei Name den Text "ggT" ein. Das
Programm schaltet um zum Modul ggT.
Gib dann den folgenden Programmcode ein:
FUNCTION
ggT (x,y)
DO
rest = INT(y / x)
w = rest * x
rest = y - w
result = x
IF rest < 1 THEN EXIT DO
y = x
x = rest
LOOP
ggT=result
END FUNCTION
Speichere
das Programm an dieser Stelle unter dem Namen ggt2.bas
in deinem Datenverzeichnis ab. Das Programm kann jetzt gestartet werden.
Weiter
gehts mit Lektion 4!