Kapitel 3: Grundlagen des Programmierens in BASIC
Die nächsten Schritte
Bis jetzt haben wir uns damit begnügt, einfache Operationen auszuführen, indem wir einzelne Befehlszeilen in den Rechner eingegeben haben. Nach dem Drücken der <RETURN>-Taste wurden die in dieser Zeile enthaltenen Befehle dann vom Computer ausgeführt. Diese Art mit dem COMMODORE 64 zu rechnen nennt man den DIREKT-Modus.
Aber unser Computer kann mehr! Er kann eine große Zahl von Befehlszeilen nacheinander ausführen; d. h., er kann ein PROGRAMM abarbeiten.
Um Ihnen zu zeigen, wie einfach es ist, ein Programm für Ihren COMMODORE 64 zu schreiben, hier ein Beispiel: Löschen Sie erst den Bildschirm mit <SHIFT> <CLR/HOME>. Tippen Sie dann NEW ein und drücken die <RETURN>-Taste; damit wird der Programmspeicher Ihres Computers von allem geleert, was Sie im Verlauf Ihrer Experimente eventuell hineingeschrieben haben.
Tippen Sie nun genau den folgenden Text ab, und vergessen Sie nicht, nach Eingabe jeder Zeile <RETURN> zu drücken.
Tippen Sie nun RUN ein und drücken die <RETURN>-Taste. Was passiert? Der Bildschirm wird lebendig. Wenn Sie genug haben, unterbrechen Sie das Programm durch Drücken der <RUN/STOP>-Taste. Wir haben in diesem kurzen Beispiel schon einige Dinge benutzt, die für das Programmieren von allgemeiner Wichtigkeit sind.
Beachten Sie, daß wir vor jeden Befehl eine Zeilennummer geschrieben haben. Diese Zahlen geben dem Computer an, in welcher Reihenfolge er Ihre Befehle abarbeiten soll. Soll während des Programmablaufs zu einem bestimmten Punkt zurückgesprungen werden (das macht im vorliegenden Beispiel der Befehl GOTO 10), so dienen die Zeilennummern als Markierungspunkte, auf die man sich bezieht. Als Zeilennummern können alle ganzen Zahlen zwischen 0 und 63999 gewählt werden.
10 PRINT"COMMODORE 64"
Es entspricht guter Programmierpraxis, die Zeilen in Zehnerabständen zu numerieren – das vereinfacht das nachträgliche Einfügen von Programmzeilen. Neben PRINT kam in unserem Programm noch ein anderer BASIC-Befehl vor, nämlich GOTO. Damit geben Sie dem Computer die Anweisung, in die hinter GOTO angegebene Zeile zu springen und dort mit der Programmausführung fortzufahren.
Unser Programm läuft also folgendermaßen ab: In Zeile 10 wird Befehl zum Ausdrucken des Textes auf dem Bildschirm gegeben; das Programm geht dann in die Zeile 20 und erhält dort den Befehl, in die Zeile10 zurückzugehen. Damit fängt das Spiel von vorne an, und Ihr COMMODORE 64 wird nicht aufhören, seinen Namen auf den Bildschirm zu drucken, bis Sie ihn mit der <RUN/STOP>-Taste unterbrechen.
Tippen Sie nach der Programmunterbrechung LIST ein und drücken die <RETURN>-Taste. Sie sehen, ihr Programm befindet sich noch unverändert im Speicher des Computers. Beachten Sie, daß er das „?“ in ein „PRINT“ übersetzt hat. Das Programm kann nun geändert, abgespeichert oder wieder gestartet werden.
Beim Direkt-Modus (ohne Zeilennummern) ist das anders: wenn die Befehlszeile nicht mehr auf dem Bildschirm steht, ist sie verloren, und kann auch nicht mehr mit LIST zurückgeholt werden.
Tips zum Editieren eines Programms
Wenn Sie in einer Programmzeile einen Fehler machen, gibt es einige Methoden, diesen zu korrigieren.
- Sie können die Zeile noch einmal schreiben; die alte Zeile wird dann automatisch durch die neue, fehlerfreie ersetzt.
- Wenn Sie nur die Nummer der fehlerhaften Zeile eintippen und <RETURN> drücken, so wird diese gelöscht.
- Sie können die Zeile unter Benutzung der Cursor-Steuertasten und der Editiertasten beliebig verändern.Nach dem Drücken der <RETURN>-Taste wird dann die korrigierte Zeile übernommen.
Nehmen wir einmal an, Sie hätten sich in einer Programmzeile vertippt. Bewegen Sie nun den Cursor mit Hilfe der <⬆️CRSR⬇️>-Taste und der <SHIFT>-Taste in die fehlerhafte Zeile. Bringen Sie nun den Cursor unter Benutzung der <⬅️CRSR➡️>-Taste und der <SHIFT>-Taste an die Stelle, wo das fehlerhafte Zeichen steht. Tippen Sie nun das richtige Zeichen ein, und drücken die <RETURN>-Taste; damit wird die richtige Zeile in den Programmspeicher übernommen, wovon Sie sich durch das Auslisten des Programms überzeugen können.
Müssen Sie ein Zeichen an einer Stelle einflicken, so fahren Sie wieder mit den Cursor-Steuertasten an die Stelle, wo Sie Platz für das zusätzliche Zeichen brauchen und tippen Sie <SHIFT> <INST/DEL> ein. Dadurch erzeugen Sie die benötigte Leerstelle. Nach dem Drücken der <INST/DEL>-Taste allein wird das vor dem Cursor stehende Zeichen gelöscht, ohne daß eine Lücke zurückbleibt.
Sie können die Zeilen in beliebiger Reihenfolge ändern; an den Zeilennummern erkennt Ihr Computer, wo er die korrigierten Zeilen einzuordnen hat.
Ändern Sie nun die Zeile 10 Ihres Programms so ab, daß sie der nachstehenden Zeile entspricht. Beachten Sie, daß am Ende der Zeile ein Semikolon (;) steht.
Starten Sie nun das Programm; nach dem Unterbrechen des Programms mit der <RUN/STOP>-Taste muß der Bildschirm etwa so aussehen, wie die folgende Abbildung wiedergibt.
Variable
Einer der wichtigsten Begriffe in allen Programmiersprachen ist der der Variablen. Er ist deshalb wichtig, ihre Eigenschaften und Möglichkeiten kennenzulernen.
Stellen Sie sich vor, daß Ihr Computer eine Reihe von Schachteln enthält, die Zahlen oder Worte enthalten. Diese Schachteln tragen Namen, die Sie frei wählen können. Diese Namen nennen wir Variable; sie repräsentieren die Information, die zu einem bestimmten Zeitpunkt in der betreffenden Schachtel enthalten ist.
Nehmen wir folgendes Beispiel:
Der Computer ordnet die Variablen dann wie folgt zu:
Eine Variable steht für einen Speicherplatz, der jedoch während eines Programmablaufs seinen Inhalt verändern kann. Wie Sie sehen kann man einer Variablen eine ganze Zahl, einen Dezimalbruch oder auch einen Satz zuordnen.
Steht hinter dem Namen der Variablen ein %, so handelt es sich um einen Variablentyp, der nur ganze Zahlen repräsentieren kann (auch Integer-Variable genannt). Zulässige Integer-Variablennamen sind etwa die folgenden:
A%
X%
A1%
NM%
Steht hinter einem Variablennamen ein $, so handelt es sich um eine sogenannte „Stringvariable“. Eine solche Variable kann für eine beliebige Aneinanderreihung von Zeichen (auch „Strings“ genannt) stehen. Diese Strings können Buchstaben, Zahlen und auch Sonderzeichen enthalten. Beispiele gültiger Variablennamen für Strings sind z. B.
A$
X$
MI$
Dezimalbrüche (auch Fließkommazahlen oder „Floating-Point-Variablen“ genannt), werden z. B. durch folgende Variablennamen repräsentiert:
A1
XY
MI
Beachten Sie, daß eine Variable aus mehr als zwei Zeichen bestehen kann; der Computer identifiziert die Variable jedoch anhand der ersten beiden Zeichen. Er kann also die beiden Variablen KOLLEGE und KONZERT nicht unterscheiden. Das erste Zeichen muß alphanumerisch (d. h., ein Buchstabe zwischen A und Z) und das zweite Zeichen ein Buchstabe oder eine Ziffer sein. Das letzte Zeichen kann dazu dienen, die Variable (wie oben beschrieben) näher zu charakterisieren (% = ganze Zahl; $ = String).
Weiterhin dürfen Variablennamen keine Worte enthalten, die im Basic feste Bedeutungen haben. So ist z. B. der Variablenname ROTOR nicht erlaubt, weil er den Basic-Begriff TO enthält. Eine Übersicht über diese reservierten Begriffe wird im Anhang D gegeben. Tippen Sie nun das untenstehende Programm ein und starten Sie es mit RUN. (Vergessen Sie nicht, nach jeder Programmzeile <RETURN> zu drücken.)
Wenn Sie alles richtig gemacht haben, so sollte nach Beendigung des Programms folgendes auf dem Bildschirm stehen:
In den Zeilen 10 und 20 haben wir der Variablen X% die (ganze) Zahl 15 und der Variablen X den Dezimalbruch 23.5 zugeordnet. Der String X$ wurde in Zeile 30 definiert. In Zeile 40 haben wir verschiedene Formen der PRINT-Anweisung kombiniert, um die Namen und Werte der Variablen X und X% auszudrucken. Die Zeile 50 bewirkt, daß der String X$ und die Summe von X und X% auf den Bildschirm ausgegeben werden. Obwohl X Bestandteil aller verwendeten Variablennamen ist, kann der Computer auf Grund der Zusatzzeichen % und $ alle drei Variablen unterscheiden und sie mit verschiedenen Inhalten versehen. Aber Sie können mit Variablen noch mehr anfangen; wenn Sie sie ändern, so wird der alte Inhalt der Variablen-„Schachtel“ gegen den neuen ausgetauscht. Auf diese Weise können Sie Zuweisungen der folgenden Art benutzen:
Als normaler algebraischer Ausdruck wäre diese „Gleichung“ sinnlos, sie wird jedoch in Programmen außerordentlich häufig benutzt. Die Wirkung läßt sich so beschreiben: Nimm den Inhalt der Schachtel X, erhöhe den Inhalt um 1 und lege den neuen Inhalt wieder in die Schachtel mit der Aufschrift X.
IF … THEN
Nachdem Sie nun wissen, wie man mit Variablen umgeht, wollen wir diese neuen Erkenntnisse gleich im nächsten Programm anwenden:
Wie Sie sehen, hat unser neuer Befehl IF … THEN dazu geführt, daß nur noch eine begrenzte Anzahl von Zeilen ausgedruckt wird. Stößt der Computer während der Programmausführung auf einen solchen Befehl, so prüft er, ob die hinter IF stehende Bedingung wahr ist. Wenn dies zutrifft, so wird der hinter THEN stehende Befehl ausgeführt. Sollte die hinter IF stehende Bedingung nicht mehr wahr sein, so führt der COMMODORE 64 den Befehl in der nächsten Zeile aus. Eine ganze Reihe von Bedingungen können im Zusammenhang mit IF … THEN verwendet werden:
SYMBOL | BEDEUTUNG |
---|---|
< | kleiner als |
> | größer als |
= | gleich |
<> | ungleich |
>= | größer oder gleich |
<= | kleiner oder gleich |
Sie können mit Hilfe dieser Bedingungen auf einfache aber wirkungsvolle Weise den Programmablauf kontrollieren.
Wir haben in unserem Beispielprogramm eine sogenannte „Schleife“ konstruiert, die jedoch nur so lange durchlaufen wird, wie die Bedingung, die zwischen IF und THEN steht, erfüllt ist.
In Zeile 10 wird ZR (Zähler) 0 gesetzt. Zeile 20 druckt unseren Text aus. In Zeile 30 wird der Wert von ZR bei jedem Durchlauf der Schleife um 1 erhöht. Der aktuelle Wert von ZR gibt also an, wie oft die Schleife abgearbeitet wurde.
In der Zeile 40 findet die Kontrolle statt. Wenn ZR kleiner als 5 ist, d. h., unser Text wurde bis dahin weniger als 5 mal ausgedruckt, dann geht das Programm zurück in die Zeile 20 und führt den PRINT-Befehl noch einmal aus. Nach dem 5. Durchlauf ist die Bedingung nicht mehr erfüllt, und das Programm geht weiter zur Zeile 50, wo der END-Befehl steht (der im vorliegenden Fall auch weggelassen werden könnte). Durch Änderung der oberen Grenze von ZR in der Zeile 40 können Sie jede beliebige Anzahl von Textzeilen erzeugen.
Wie wir noch sehen werden, hat der IF … THEN-Befehl eine sehr große Zahl von Anwendungen.
FOR … NEXT Schleifen
Der Effekt, den wir im vorigen Kapitel mit dem IF … THEN Befehl erzielt haben, läßt sich auf leichtere Art mit der FOR … NEXT Schleife realisieren. Tippen Sie bitte folgendes Programm ein und starten es mit RUN:
Sie erhalten den gleichen Bildschirmausdruck wie im letzten Kapitel, aber das Programm ist kürzer geworden.
In Zeile 10 wird ZR = 1 gesetzt. Zeile 20 bewirkt wieder das Ausdrucken unseres Textes, und in Zeile 30 wird der Wert von ZR um 1 erhöht. Der Ausdruck „NEXT“ in Zeile 30 führt dazu, daß das Programm in die Zeile springt, wo das zugehörige „FOR“ steht, nämlich in die Zeile 10. Die FOR … NEXT Schleife wird so oft durchlaufen, bis der in Zeile 10 hinter TO stehende Wert erreicht ist.
Wenn Sie Ihrem Computer nichts anderes angeben, addiert er bei jedem Durchlauf den Wert 1; sie können jedoch auch jede andere Schrittweite (auch Inkrement genannt) wählen. Tippen Sie dazu folgendes Beispiel ein:
Durch die Angabe STEP .5 (die 0 im Dezimalbruch 0.5 kann weggelassen werden) wird bei jedem Durchlauf der Wert von NB um 0.5 erhöht, so daß die Zahlen 1, 1.5, 2, 2.5 etc. auf dem Bildschirm ausgegeben werden. Sie können die Zahl hinter dem Ausdruck „STEP“ sogar negativ wählen. Probieren Sie doch einmal aus, was passiert, wenn Sie die Zeile 10 wie folgt ändern: