Nikolaus Heusler Archiv

Erschienen in 64'er Magazin, Ausgabe 01/1994 · Originaldatei: 01_94.TXT

Hinweis: Dies ist das an die Redaktion eingereichte Manuskript, nicht der gedruckte Endtext. Layout, Bildunterschriften, Korrekturen und Kürzungen der Redaktion können in der veröffentlichten Fassung abweichen.

Basic-Corner, 64`er 1/94

Rechnen Sie mit uns!

Diesmal widmen wir uns einem Haupteinsatzgebiet jedes Computers: Dem Rechnen. Dem C 64 fällt das Operieren mit Zahlen nicht schwer, Ihnen spätestens nach der Lektüre dieser Basic-Corner auch nicht.

von Nikolaus M. Heusler

Das Wort »Computer« leitet sich vom lateinischen »computare« ab, das bedeutet soviel wie »rechnen«. Auch wenn es in der Fachwelt als unsauber gilt, von einem Computer als »Rechner« zu sprechen (wird nur noch übertroffen von »Kiste«, »Terminal« oder gar »unsere EDV-Anlage«), kann dennoch nichts darüber hinwegtäuschen, daß jeder Computer im Prinzip nichts anderes als ein überdimensionaler Taschenrechner mit etwas mehr »Intelligenz« und einer Mehrzahl von Funktionen ist.

Natürlich kann auch der C 64 hervorragend rechnen. Aber wie macht man die Ergebnisse auf dem Bildschirm sichtbar? Nehmen wir einmal die einfache Rechnung 6 + 7. Der Computer soll uns das Ergebnis 13 errechnen. Die Eingabe

6 + 7

führt zu keiner Reaktion, der C 64 denkt nämlich, er soll eine Basic-Zeile mit der Nummer 6 und dem Inhalt »+ 7« erzeugen. Das ist aber nicht erwünscht, also sollten wir diese kleine »Mißgeburt« wieder löschen:

NEW

Wir müssen dem Interpreter mitteilen, daß er das Ergebnis der Rechnung auf dem Bildschirm ausgeben soll. Den Befehl, um etwas auf der Mattscheibe auszugeben, kennen Sie schon: Er lautet PRINT. In diesem Falle liefert

PRINT 6 + 7

(RETURN-Taste nicht vergessen) also das gewünschte Ergebnis.

Im C 64 steckt natürlich viel mehr mehr als solch eine einfache Berechnung. Neben den vier Grundrechenarten (plus, minus, mal und geteilt durch) ist auch die Potenzierung eingebaut. Der Ausdruck 4 hoch 6, ausgeschrieben lautet er 4*4*4*4*4*4, hat den Wert 4096. Das kann auch der C 64 ausrechnen: Das Symbol für die Potenzrechnung ist der Pfeil nach oben (). Die entsprechende Taste findet man links neben RESTORE. Geben Sie

PRINT 4  6

ein, und der C 64 antwortet brav mit 4096.

Wir sollten Sie bei dieser Gelegenheit noch in die Symbolik der Multiplikation (Mal-Rechnung) und Division (Teilung) einweihen. In der Mathematik ist das Multiplikationssymbol ein kleiner Punkt. Auf Computern schreibt man dafür einen Stern:

PRINT 15 * 20

Das Divisionssymbol ist der Schrägstrich (englisch »slash«). Das Ergebnis der Division von 8241 durch 67 bekommen Sie durch

PRINT 8241 / 67

errechnet. Wie Sie ja aus der Schule wissen, darf man so ohne weiteres nicht durch Null teilen. Auch unserem Computer ist das nicht unbekannt, auf

PRINT 4633 / 0

reagiert er ziemlich sauer mit einem

?DIVISION BY ZERO  ERROR

Eine weitere Fehlermeldung, die vor allem bei der Potenzrechnung auftreten kann, ist die Meldung eines Überlaufes. Das bedeutet, daß eine Zahl zu groß für den C 64 wurde. Viele Taschenrechner rechnen mit acht Stellen, bei größeren Zahlen geben Sie ein »E« aus. Unser C 64 kann sogar 38-stellige Zahlen verarbeiten, die größte Zahl lautet in mathematischer Schreibweise 170141183 * 10 hoch 38. Ergibt eine Rechnung ein größeres Ergebnis, quittiert der C 64 den Versuch mit

?OVERFLOW  ERROR

Nun wollen wir einmal berechnen, was herauskommt, wenn man das Ergebnis von 4 + 3 mit zwei multipliziert. Der C 64 kann auch mehrere Rechnungen auf einmal verarbeiten, etwa

PRINT 4 + 3 * 2

Rechnen wir das Problem zunächst im Kopf durch. Die Summe 4 + 3 ergibt sieben, das Doppelte davon ist 14. Doch nach Eingabe des obigen Kommandos errechnet der C 64 den Wert 10! Da kann doch etwas nicht stimmen. Ist unser Rechner etwa defekt?

Punkt vor Strich

Nein, ist er nicht. Es gibt in der Mathematik die Regel »Punkt vor Strich«, die über die Reihenfolge der Berechung von Termen Auskunft gibt. Multiplikationen und Divisionen müssen immer vor Additionen und Subtraktionen durchgeführt werden! Daher berechnet der C 64 den falschen Wert: 3 mal 2 ergibt sechs, plus vier macht zehn.

In unserer Beispielrechnung hätten wir dem Computer die Reihenfolge durch Klammern angeben müssen:

PRINT (4 + 3) * 2

liefert das richtige Ergebnis 14. Die Klammern bekommen Sie durch gleichzeitiges Drücken der Tasten SHIFT und <8> beziehungsweise <9>.

Wie Sie sehen, kann man durch Verwendung der (runden) Klammern Operationen verschachteln. Auch komplexe Berechnungen wie

PRINT (4 + 12 / 4) * (4 / (10 - 8))

bereiten dem Rechner keine Probleme. Sie müssen nur peinlich genau darauf achten, daß Sie stets die gleiche Zahl Klammern wieder schließen, die Sie geöffnet haben, sonst beschwert sich der C 64 mit einem

?SYNTAX  ERROR

Bisher haben wir die Rechenoperationen nur direkt hinter dem PRINT-Befehl ausprobiert. Auch hinter Variablenzuweisungen sind Berechnungen möglich. Beispiel:

A = 4 + 5
B = A * 2
C = A + B
PRINT C

Die Variable A soll den Wert 4 plus 5, also neun, annehmen. Das Ergebnis ist mit zwei zu multiplizieren (macht 18) und in B zu speichern. Die beiden Variablen A und B (Werte 9 und 18) sind zu addieren und in C zu speichern. Der Inhalt von C, 27, wird dann ausgegeben.

Gestattet sei an dieser Stelle ein kleiner Exkurs über eine Falle, eine Eigenart, die besonders Einsteiger gelegentlich verwirrt und die regelmäßig als Frage in Leserbriefen auftaucht: Die »modifizierende Zuweisung«. Betrachten Sie folgenden Befehl:

20 X = X + 4

Jedem Kenner grundlegender Mathematik läuft es zunächst kalt den Rücken hinunter: Diese Gleichung für X hat keine Lösung! Zieht man auf beiden Seiten X ab, so ergibt sich

4 = 0

Der Denkfehler ist, daß es sich hierbei nicht um eine Gleichung im mathematische Sinn handelt, sondern um ein Kommando, eine »Zuweisung«. Sie besagt: Nimm den aktuellen Wert der Variablen X, addiere vier dazu und speichere das Ergebnis wieder in X. Der alte Wert von X wird damit überschrieben. Die korrekte mathematische Schreibweise dafür wäre

X := X + 4

Tatsächlich muß man in vielen Programmiersprachen (beispielsweise MODULA-2, nicht jedoch im Basic des C 64) den Doppelpunkt schreiben.

Erraten Sie, was das folgende Programm macht?

10 X = 12
20 X = X + 4
30 PRINT X

Der Variablen X wird in Zeile 10 der konstante (unveränderliche) Wert 12 zugewiesen. In Zeile 20 lesen wir den Wert von X (wie vorher definiert ist der Wert 12). Dazu addieren wir eine 4, gibt als Ergebnis 16. Diesen Wert speichern wir wieder in X, um ihn in Zeile 30 dann zu drucken (Ausgabe: 16).

Es funktioniert!

Das nächste Thema, das wir ansprechen wollen, sind die Funktionen. Sie bestehen aus einem gewöhnlich dreistelligen Wort und einem Wert in Klammern dahinter. Aus der Mathematik kennen Sie sicher noch die Funktion Sinus, die zu Berechnungen am Kreis eingesetzt wird. Auch diese Funktion ist im C 64 eingebaut. Um den Sinus eines Winkels im Bogenmaß zu berechnen, verwenden Sie den Befehl

PRINT SIN (Winkel)

Der Sinus aus 1 rad ist 0,841, wie uns auch der C 64 mitteilen kann:

PRINT SIN (1)

liefert das gewünschte Ergebnis. Ähnlich funktioniert der Cosinus:

PRINT COS (6)

liefert den genauen Wert 0,960170286. Um übrigens einen Winkel im Gradmaß ins für den C 64 »verdauliche« Bogenmaß umzurechnen, verwenden Sie die Formel:

Grad = Bogenmaß * π / 180

Das Zeichen PI (π) bekommen Sie durch Druck gleichzeitig auf SHIFT und <>. Diese mathematische Konstante hat den Wert 3,14159... und entspricht dem Bogenmaß von 180 Grad. Den Sinus von 90 Grad berechnet man demnach wie folgt:

PRINT SIN (90 * π / 180)

oder ausführlicher

BG = 90 * ^ / 180
PRINT SIN (BG)

liefert den richtigen Wert 1.

Eine Tabelle, in der alle Funktionen des C 64 aufgeführt sind, findet sich in diesem Artikel.

Bevor wir uns nun mit dem Programm beschäftigen, kommen Sie leider auch dieses Mal um einige Fachbegriffe nicht herum. Sie sind aber ganz leicht zu verstehen. Sehen Sie sich das Bild an: Sie sehen darin einen relativ komplexen Befehl. Der Befehl, das ist die gesamte eingegebene Zeile, besteht aus dem Befehlswort (Kommando) und der eigentlichen Rechnung, man spricht vom »Term« (Ausdruck). Der Term unterteilt sich in drei Ausdrücke, die durch zwei Rechenzeichen (Plus und Minus) getrennt sind. Der erste Ausdruck ist eine Multiplikation von zwei Zahlen, der zweite Ausdruck ist eine Funktion, die die Wurzel aus 81 berechnen soll. Die Wurzel aus 81 ist neun, denn 9*9 ist 81. Die Funktion besteht aus dem Funktionsnamen (SQR), zwei Trennzeichen (Klammern) und dem Argument, in diesem Falle 81. Das Argument kann, wie es der dritte Ausdruck zeigt, ebenfalls wieder eine Rechnung, ein Term sein. Die Sinusfunktion berechnet den Sinus aus Null, denn 4-4 ist 0. Der Sinus aus 0 ist wieder 0. Insgesamt hat der Print-Befehl also die Rechnung 20 plus 9 minus 0 durchzuführen, das ergibt Null. Na, so schwer was das doch nicht!

Auch diesmal haben wir wieder ein kleines Programm (Listing) für Sie vorbereitet, daß Sie bitte mit dem Checksummer (siehe Seite ███) abtippen und vor dem ersten Start speichern.

Ihr Taschenrechner

Das Programm wandelt den C 64 in einen einfachen Taschenrechner um. Nach dem Start (RUN) erscheint ein sogenanntes »Menü«, eine Aufzählung von verschiedenen Funktionen, aus denen Sie durch Tastendruck eine wählen können. Wählen wir zum Bespiel die Multiplikation (Taste <3>). Nun sind die beiden Faktoren, die miteinander multipliziert werden sollen, einzugeben. Vergessen Sie nicht die RETURN-Taste nach jeder Eingabe. Der Computer berechnet dann das Produkt, gibt es aus und will wissen, ob Sie eine weitere Rechnung durchführen wollen. Anworten Sie hier mit der Taste N, wird das Programm mit einer freundlichen (bayerischen) Meldung beendet, sonst erscheint wieder das Menü.

Und so funktioniert der Rechner intern: Nach dem Start wird mit Print-Befehlen das Menü ausgegeben. Der seltsame Befehl in Zeile 90 dient nur dazu, vor dem folgenden GET-Befehl alle Tasten zu löschen, die sich der Computer noch gemerkt hat (siehe Basiccorner 12/93). In Zeile 100 holt sich der C 64 dann eine Taste, sieht nach, welchen numerischen Wert sie hat (VAL (A$)), vergleicht, ob der Wert im erlaubten Bereich zwischen 1 und 7 liegt, wenn nicht, wird die nächste nächste Taste geholt. Sonst tritt der ON-GOTO-Befehl in Zeile 110 in Kraft. Je nach gedrückter Taste wird in eine der aufgeführten Zeilen gesprungen.

Verfolgen wir als Beispiel die Division, deren Unterprogramm bei Zeile 4000 beginnt. Die anderen Operationen funktionieren analog.

In Zeile 4010 verzweigt das Programm in eine Unterroutine ab Zeile 200, die den Zähler und Nenner vom Benutzer erfragt (»holt«). Ist in Zeile 4020 der Nenner Null, wird eine entsprechende Fehlermeldung ausgegeben und die Division nicht durchgeführt. Sonst teilt der Computer den Zähler A durch den Nenner B, speichert das Ergebnis in C und den Typ der Operation (Division) in der Textvariablen T$. Durch Aufruf des Unterprogrammes (Routine) ab Zeile 300 wird das Ergebnis auf dem Schirm ausgegeben. Ab Zeile 400 steht dann die Anfrage, ob noch eine Rechnung durchzuführen ist. Wird als gedrückte Taste (J) registiert, startet das Programm neu (RUN in Zeile 430), sonst prüft das Programm, ob die gedrückte Taste vielleicht (N) war. Wenn nicht, gelangt der Ablauf wieder zurück zu Zeile 430, um auf die nächste Taste zu warten. Bei Druck auf (N) wird das Programm ab Zeile 7000 beendet.

(hb)

Listing 1. Ein einfaches Rechenprogramm in Basic. Beachten Sie die Hinweise auf Seite ███

Tabelle. Alle numerischen Funktionen des C 64

Funktion zur Berechnung von

ABS (X)	Betrag ohne Vorzeichen von X
ATN (X)	Arkustangens von X im Bogenmaß. Gegenfunktion zu TAN (X).
COS (X)	Cosinus des Winkels X im Bogenmaß
EXP (X)	X-te Potenz der mathematischen Konstanten e (2,7183...)
INT (X)	Vorkomma-Anteil von X (Nachkommastellen werden abgeschnitten). Negative Zahlen werden dem Betrag nach größer.
LOG (X)	natürlicher Logarithmus von X. Umkehrfunktion zu EXP (X).
PEEK (X)	Inhalt der Speicherzelle X
RND (X)	Zufallszahl. X hat keine wesentliche Bedeutung.
SGN (X)	Vorzeichen von X: 1 = positiv, -1 = negativ, 0 = Null
SIN (X)	Sinus von X (Bogenmaß)
SQR (X)	Quadratwurzel von X
TAN (X)	Tangens von X. Umkehrfunktion zu ATN (X)
FRE (X)	freier Speicherplatz (X hat keine Bedeutung). Falls Ausgabe kleiner als Null, muß zur Ausgabe der Wrt 65536 addiert werden.
POS (X)	aktuelle Cursorspalte (X hat keine Bedeutung)
USR (X)	benutzerdefinierbare Funktion. Kann nur mit Hilfe geeigneter Maschinenprogramme genutzt werden.