![]() |
![]() |
Bevor wir zu den Benutzereingaben kommen, müssen wir noch über die Notbremse sprechen. Es kann ja immer mal sein, dass wir ein Programm so schreiben, dass es gar nicht mehr enden will. Was machen wir dann? Wir ziehen die Notbremse!
Ganz links auf ihrer Tastatur befindet sich über der Hochstell-(Shift-)Taste eine Taste mit einem Pfeil nach unten. Das ist die Feststell (Capslock-)Taste. Wenn wir während eines Programmlaufs Hochstell- und Feststelltaste gleichzeitig drücken, dann bricht das Programm ab, egal an welcher Stelle es gerade war.
Bis jetzt hat uns unser abgespeicherte Zweizeiler ja noch nicht soviel genutzt. Es ist zwar nett, mit "GOTO 1" auf einen Schlag zwei Ergebnisse zu bekommen, aber das Eintippen von "LET A=10, GOTO 1, LET A=20, GOTO 1, LET A=30, GOTO 1" ist immer noch ziemlich umständlich.
Etwas besser wird es, wenn wir die LET-Anweisungen mit ins Programm integrieren. Denn wir können auch andere Anweisungen, nicht nur die PRINT-Anweisungen abspeichern. Das sähe dann so aus:
1 LET A=10 2 LET B=10 3 PRINT SQR(A^2+B^2) 4 PRINT SQR((A+10)^2+B^2)
Zur Veränderung eines Werts müssen wir allerdings erst "LIST" eingeben, dann zur Stelle gehen, den Wert überschreiben, in die nächste Leerzeile gehen und dann GOTO eingeben - auch nicht gerade einfach.
Für die Aufgabe, aus einem Programm Werte vom Benutzer entgegenzunehmen, gibt es den INPUT-Befehl. Will man, dass das Programm den Benutzer zur Eingabe eines Werts der Variablen A auffordert, schreibt man "INPUT A". Wenn Sie noch nicht ganz verstanden haben, was das soll: Hier ein kleines Beispielprogramm, das zwei Werte vom Benutzer entgegennimmt und deren Summe berechnet - nicht sehr nützlich, aber verständlich.
10 INPUT A 20 INPUT B 30 PRINT A+B
Wenn Sie das ausprobieren, sehen Sie, dass das Programm an der Stelle des Inputs einfach anhält und ein Fragezeichen zeigt. Der Benutzer muss das Programm schon kennen, um zu wissen, dass er jetzt eine Zahl eingeben muss - und welche Zahl er eingeben muss. Aber auch da gibt's Verbesserungsmöglichkeiten. Die kommen später.
Ergänzen wir also unser Pythagoras-Programm, indem wir die LET-Zeilen durch Input-Zeilen ersetzen:
1 INPUT A 2 INPUT B 3 PRINT SQR(A^2+B^2) 4 PRINT SQR((A+10)^2+B^2)
Probieren Sie es aus. Sie werden feststellen: Jetzt geht's wirklich schneller. Einfach die beiden Eingangszahlen eingeben und schon hat man die Ergebnisse für die nächsten beiden Tabellenzeilen.
Wir müssen ja für die Tabelle verschiedene Längen in sehr regelmässigen Abständen eingeben. Das Ganze läuft also ungefähr so: GOTO 1, 10 eingeben, 10 eingeben, Ablesen. GOTO 1, 30 eingeben, 10 eingeben, Ablesen. GOTO 1, 50 eingeben, 10 eingeben, Ablesen... Ginge das nicht praktischer? Könnte der Rechner nicht selbst das Einkommen immer um 10 oder 20 erhöhen? Rechnen kann er ja...
Die Erhöhung ist kein Problem. Aber wie bringen wir ihn dazu, quasi sich selbst immer wieder neu zu starten? Mit dem GOTO-Befehl. Mit GOTO sagen wir dem Rechner, er soll von dieser Zeile aus in eine ganz andere Zeile springen. Z.B. ganz an den Anfang. Der GOTO-Befehl kann mit ins Programm.
Bevor wir ihn mit reinnehmen, sollten wir jedoch noch etwas anderes verändern: Die Zeilennummern. Es ist einfach unpraktisch, dass wir jedes Mal das ganze Programm umnumerieren müssen, wenn wir nur eine Zeile einfügen. Es ist sehr viel praktischer, zwischen den Zeilen Platz zu lassen, also immer im 10-er-Abstand zu numerieren:
10 INPUT A 20 INPUT B 30 PRINT SQR(A^2+B^2) 40 PRINT SQR((A+10)^2+B^2)
Dann kann man auch mal eine Zeile dazwischen einschieben, ohne gleich alle neu numerieren zu müssen.
Zunächst wollen wir auf Zeile 40 verzichten. Wir müssen keinen zweiten Wert mehr als eigene PRINT-Anweisung haben, wenn wir sowieso vorhaben, Zeile 30 mehrmals zu benutzen.
Nach Zeile 30 soll A um 10 erhöht werden. Schreiben Sie eine entsprechende Anweisung!
Nun, wie sieht sie aus? Vielleicht so:
LET C=A+10 LET A=C
Wir speichern in einem Zwischenspeicher, C, den um 10 erhöhten Wert. Dann speichern wir wieder in A den Wert von C. Das ist logisch. Aber es geht noch einfacher:
LET A=A+10
Das klingt sinnlos. Aber wir dürften nicht vergessen: Das "=" ist kein Gleichheitszeiten im mathematischen Sinne. Es ist eine Zuweisung. Es sagt: "Das ist der Wert, den du in A speichern sollst." Die ganze Zeile sagt also: "Nimm das, was rechts vom Gleichheitszeichen ist, werte es aus und speichere es im Speicher A." Das ist machbar. Und funktioniert. Damit lautet also unser Gesamtprogramm nun:
10 INPUT A 20 INPUT B 30 PRINT SQR(A^2+B^2) 40 LET A=A+10
Wenn wir nach Ausführung des Programms ein "? A" eingeben, sehen wir, dass es funktioniert hat.
Nun kommt aber das Entscheidende: Die Einführung des GOTO-Befehls. Er sorgt dafür, dass der Rechner bei der automatischen Ausführung an eine ganz bestimmte Stelle des Programms springt. Wo soll er hinspringen? Nun, nachdem die neuen Werte von A und B feststehen, soll er wieder rechnen. Also in Zeile 30, wo gerechnet wird:
10 INPUT A 20 INPUT B 30 PRINT SQR(A^2+B^2) 40 LET A=A+10 50 GOTO 30
Vorsicht! Dieses Programm läuft unendlich! Mit der ESC-Taste (Taste ganz links oben in der Ecke) können Sie es anhalten.
OK, nun kann's losgehen:
Wuff! Auf einen Schlag haben wir zehn, zwanzig, dreissig Ergebnisse! Jetzt sehen wir, was die Macht des Programmierens ausmacht: Der Computer berechnet in Sekunden das, wozu wir mit Handtippen Minuten und Stunden gebraucht hätten.
Einen Speicher wie A und B nennen wir im Programmieren "Variable". Wir können so einer Variablen auch einen anderen Namen geben, z.B. KUH oder ZINS oder GUTHAB. LET GUTHAB=200 geht also genauso wie LET A=10. Allerdings muss man beim C16 höllisch aufpassen: Nur die ersten beiden Buchstaben sind für den verwendeten Speicher charakteristisch. Alle anderen "sieht" der C16 nicht. Folge: GUTHAB1 und GUTHAB2 bezeichnen genau denselben Speicher! Da sie beide mit "GU" anfangen! Daran muss man immer denken und prüfen, ob es vielleicht schon einen anderen Speicher mit diesen beiden Anfangsbuchstaben gibt.
Natürlich reisst es einen nicht vom Hocker, Seitenlängen von Dreiecken zu berechnen. Schreiben Sie nun einmal ein ganz eigenes Programm: