Pocket Basic Kurs


Inhalt


Vorwort

Irgendwo muss man ja beginnen. Ich habe noch nie ein richtiges Lehrbuch geschrieben :) aber es gibt für alles ein erstes Mal! Dann mal los:
Wofür diesen Kurs? Nun, ich kenne ein paar Leute, die vom Programmieren echt keine Ahnung haben (gerade dass sie einen Taschenrechner zum Rechnen bedienen können) und auch erfahrene Programmierer, die einen Pocket Computer erworben haben, aber keine Ahnung haben, was der so kann und wie man den dazu bringt, alles zu geben. Sicher, ich könnte die Originalhandbücher scannen - je Buch mindestens 300 Seiten haben mich aber abgeschreckt.

Die Modi von Pocket Computern

Der PC-1360 und PC-1350 z.B. kennen nur PROGRAM MODE und RUN MODE. Andere haben noch einen CAL MODE. Den Modus wechselt man mit den [MODE]-Taste(n), je nach Modell.
Die einzelnen Modi:
Im PROGRAM MODE (= Programmiermodus) kann man Programme schreiben und bearbeiten.
Im RUN MODE kann man das nicht. Dafür kann man Programme ablaufen lassen.
In beiden Modi kann man rechnen (Vorsicht im PROGRAM MODE: Hier darf am Anfang der Rechnung keine Zahl stehen, sonst wäre es ja eine Zeile -> dazu später) und Variablen (dazu auch später) zuweisen und abfragen.
Der CAL MODE erlaubt die Benutzung des Pocket Computer wie einen normalen Taschenrechner.

Der Editor

Der Editor ist der PROGRAM MODE. Hier kann man Programme eingeben und bearbeiten. Wenn noch kein Programm drin steht, muss man zuerst eines eingeben. Ansonsten kann man mit den Pfeiltasten durch die Zeilen blättern. Pfeile auf/ab wechseln die Zeile und links/rechts wandert durch eine Zeile. Mit [DEL] kann immer das Zeichen beim Cursor gelöscht werden, [INS] fügt einen Platzhalter ein. Zeilen können kopiert werden, indem man den Cursor in die Zeilennummer bewegt und diese überschreibt. Löschen kann man mit dem DELETE Befehl: DELETE Startnummer,Endnummer (löscht alle Zeilen dazwischen inklusive Start und Ende) oder DELETE Startnummer, (löscht Startzeile bis letzte vorhandene Zeile) oder DELETE ,Endnummer (löscht von der ersten Zeile alles bis inklusive Endzeile)
Zum Löschen kann man auch nur die Nummer eintippen. Das Überschreiben funktioniert ähnlich: Man tippt die neue Zeile mit einer Nummer, die es bereits gibt, dadurch wird die schon vorhandene Zeile überschrieben. Und zum Abspeichern einer Zeile muss man IMMER [ENTER] drücken! Mehr zum Editor in der Anleitung!

Was ist ein Programm

Für manche ist es bestimmt interessant, was ein Pocket Computer Programm eigentlich ist. Hier die Erklärung: Ein Pocket Computer Programm besteht aus Zeilen. Jede Zeile ist in etwa so aufgebaut:
10 "A" PRINT "Texteingabe": INPUT I$
Am Anfang muss eine Zeilennummer (1 bis 65279) stehen. Danach kann man ein Label einfügen ("A"), muss man aber nicht (dazu später). Bis zum Schluss der Zeile kommen Anweisungen (PRINT... : INPUT...). Diese führen bestimmte Aktionen aus (auch mehr dazu später). Wenn man mehrere Anweisungen in eine Zeile schreiben will, muss man einen Doppelpunkt dazwischentippen. Man kann auch nur eine Anweisung schreiben, dann darf man keinen Doppelpunkt setzen, also: 10 PRINT "Texteingabe" Bei diesem Beispiel darf man sogar noch das " am Schluss weglassen, da das Ende der Zeile auch das Ende des Textes "Texteingabe" bedeutet. Je nach Anweisung ist es nötig, weitere Angaben zu machen, wie bei INPUT: INPUT I$. Es gibt auch Anweisungen mit Klammern: GCURSOR (120,10). Die einzelnen Anweisungen werden in meinem Handbuch extra erklärt, also gleich mal daneben öffnen! Statt einer Anweisung kann man auch Zuweisungen tippen, wie A=10*5+B. Zuweisungen darf man, wenn mehrere hintereinander kommen auch mit Kommas trennen. Ein Programm wird solange ausgeführt, bis es auf eine END Anweisung trifft oder die letzte Zeile fertig ist. Bei Pocket Computern gibt es eigentlich keine Programmdateien, alle Zeilen stehen in einer Liste hintereinander. Auf Diskette kann man aber mit Dateien arbeiten, allerdings muss man eine Programmdatei immer erst laden, bevor man sie ausführen kann!
Ein Programm kann man mit GOTO Zeile oder RUN Zeile oder mit [DEF]-Taste (wenn ein Label wie "A"gesetzt wurde) starten. RUN löscht allerdings alle Variablen, dafür muss man die Zeile nicht angeben. RUN[ENTER] startet bei der ersten Zeile.

Was sind Variablen

Variablen sind veränderbare Daten. Es gibt Text und Zahlen bei Pocket Computern. Variablen erkennt man am Namen: Pocket Computer unterscheiden nur die ersten beiden Buchstaben, so lautet eine Variable z.B. A oder EG. Ein $-Zeichen zeigt an, dass es sich um eine Textvariable handelt. I$ ist also eine Textvariable. Text ist für Computer nichts anderes als eine Reihe von Zahlen, denen bestimmte Zeichen zugeordnet sind (ASCII-Code). A hat z.B. den Code 65. Es darf keine Variable wie eine Anweisung heißen, also nicht IF! Wie kann man etwas in einer Variable speichern? Ganz einfach mit dem = - Zeichen: X=10.5 oder I$="Hallo!"
Text muss immer in " stehen! Es gibt auch Variablenlisten, sog. Felder: Mit dem DIM-Befehl kann man solche erstellen: DIM X(5) erstellt 6 (!) Variablen X(0) bis X(5). Zähl nach! Auch DIM Y(3,4) ist möglich. Dadurch erhält man 4 mal 5 Variablen Y(0,0), Y(0,1) bis Y(3,3), Y(3,4). Bei der Erzeugung von Textvariablen gibt man noch die Länge des Textes pro Variable an: DIM I$(2)*60 erstellt 3 Variablen mit je 60 Buchstaben maximaler Länge. Bei Überschreitung der Länge wird der Überschuss einfach abgeschnitten!
Speicherverbrauch: Da auf einem Pocket Computer meist der Speicher knapp wird, muss man doch etwas haushalten: Einfache Variablen A..Z, A$..Z$ benötigen keinen extra Speicherplatz, da sie fest eingebaut sind. Variablen mit Namen mit zwei Buchstaben brauchen je 20 Bytes und Felder 7 Bytes + Anzahl der Variablen mal 8 (Zahlen) oder Textlänge.

Eingabemöglichkeiten

Wie kann ein Programm Daten abfragen? Nun, es gibt ein paar nützliche Befehle dafür (gleich mal Handbuch öffnen!)
INPUT: Eingabe von einer oder mehreren Variablen (mit Komma getrennt)
INKEY: Abfrage von Tastendruck
POINT: Abfrage von Pixel auf dem Display
Aber auch im Programm können Daten stehen:
DATA: Stellt Daten bereit
READ: Liest diese Dateien einzeln aus
RESTORE: Fängt wieder von vorne oder bei einer bestimmten Zeile an
Manchmal ist es besser, Daten direkt oder als Variablen in ein Programm einzubauen. Das hängt vom Programm ab.

1. Aufgabe:

Schreibe ein Programm, das drei Zahlen abfragt und in den Variablen A, B und C ablegt!

Verarbeitung von Daten

Daten verarbeitet man mit Zuweisungen: X=A*B-10 ist eine solche. X hat danach den Wert, den A*B-10 ergibt. Links vom = kann immer nur eine Variable stehen! Felder werden entsprechend mit Name(Index) bearbeitet.
Text kann man auch verarbeiten: I$=A$+B$. Danach steht in I$ der Inhalt von A$ und B$ hintereinander. Allerdings braucht man für weitere Verarbeitungen Befehle.
Einige davon sind für Zahlen:
EXP: e hoch angegebene Zahl
SIN: Sinus
COS: Cosinus
TAN: Tangens
Und für Text:
MID$(Name$,Startzeichen,Länge): Schneidet einen Ausschnitt aus dem Text
CHR$: Zeigt das Zeichen mit dem angegebenen ASCII-Code an
Man rechnet mit Operatoren (+, -, *, /, ^, AND, OR, NOT) oder Funktionen (SIN, COS, EXP...). Man kann Variablen und Zahlen damit beliebig verknüpfen und auch Klammern setzen. Der Computer beachtet auch Punkt vor Strich, etc. (Mehr zu der Rangfolge in der Anleitung.)
Vergleiche machen: 1=0 liefert auch ein Ergebnis zurück, nämlich 0. Es handelt sich hierbei um KEINE ZUWEISUNG! Dagegen liefert A=A als Ergebnis eine 1 zurück.

2. Aufgabe:

Erweitere das Programm aus Aufgabe 1, so dass es quadratische Gleichungen nach der Formel löst! Tipp: Das +/- nacheinander rechnen, erst mit + dann mit -!

Entscheidungen treffen

Während man Vergleiche nur in Zuweisungen zum Rechnen gebrauchen kann, gibt es noch die Möglichkeit, den Vergleich zum Steuern des Programms zu verwenden: Dazu dient der IF-Befehl. IF überspringt den Rest der Zeile, wenn das Ergebnis des Ausdrucks hinter IF 0 ergibt. So einfach ist das! Aber man kann viel damit anstellen:
10 INPUT "Gib A ein: ";A: IF A=1 PRINT "A ist eins!": END
20 PRINT "A ist nicht eins!
Auch etwas wie IF A PRINT "A ist nicht null!" ist erlaubt! Aber Vorsicht: Wenn nach dem Ausdruck nach IF eine Zuweisung steht (also etwas wie IF A=1 A=0 ist nicht ok) dann muss ein LET dazwischen sein (IF A=1 LET A=0 ist ok).

Den Programmablauf lenken

Man kann im Programm plötzlich zu anderen Zeilen springen. Normalerweise werden Zeilen eine nach der anderen abgearbeitet. Aber es gibt zwei Befehle, die eine andere Zeile zur Fortsetzung angeben lassen: GOTO und GOSUB. Man kann die neue Zeile mit ihrer Nummer angeben: GOTO 90 wird also bei der Zeile 90 weitermachen. Hier machen sich Labels nützlich:
10 GOTO "Weiter"
20 CLS : PRINT "Ohne mich!
30 "Weiter" PRINT "Hier gehts lang!
("Weiter" ist hier das Label)
Auch GOTO X ist möglich, X muss allerdings eine gültige Zeilennummer enthalten! Der Unterschied von GOSUB ist, dass man nach einer Folge von Anweisungen irgendwann ein RETURN benutzen muss.
10 GOSUB 30: PRINT "Und hier kommt man wieder zurueck!
20 CLS : END
30 PRINT "Hier gehts lang!
40 CLS : RETURN
Das RETURN springt also wieder dahin zurück, wo das GOSUB steht und macht mit dem nächsten Befehl weiter.
ON ... GOTO und ON ... GOSUB sind spezielle Anwendungen von GOTO und GOSUB: Bei "..." steht ein Ausdruck, der eine Zahl liefert, wie VAL I$ nach einer Tastenabfrage:
10 I$=INKEY$ : IF I$="" GOTO 10
20 ON VAL I$ GOTO 40,50
30 CLS : END
40 PRINT "Du hast 1 gedrueckt!": END
50 PRINT "Du hast 2 gedrueckt!": END
ON springt dabei zur ersten angegebenen Zeile, wenn die Zahl 1 ist, zur zweiten bei 2, zur dritten bei 3, etc. Existiert keine Angabe (also drücke ich 0 oder 3 im obigen Beispiel) macht ON bei der nächsten Anweisung weiter (CLS : END im Beispiel). IF ist auch begehrt bei der Steuerung des Programablaufs.

3. Aufgabe:

Erweitere das Programm von Aufgabe 2 (das liebst du bestimmt schon tief und innig :)), so dass es überprüft, ob der Term unter der Wurzel negativ ist und entsprechend die komplex konjugierte Lösung berechnet (ok, die komplexe Lösung muss nicht sein, mach einfach einen Neustart des Programms hin)!

Wiederholen von Anweisungen

Möchte man nun einen Anweisungsblock öfters als einmal ausführen, muss man entweder die Zeilen kopieren (nicht so schön) oder man macht eine sog. Schleife. Dazu eignet sich eine GOTO Anweisung sicherlich, es gibt auch die Möglichkeit mit FOR zu arbeiten:
FOR X=0 TO 149 STEP 8: GCURSOR (X,7): GPRINT "0C122121120C1008": NEXT X
Dies füllt die oberste Zeile mit einem netten Muster. (Ja und immer schön die Befehle im Handbuch nachschlagen!)
FOR benötigt eine Zählvariable, die in STEP Schritten gezählt wird, bis der Wert hinter TO über oder unterschritten wird (je nachdem STEP positiv oder negativ ist). Man kann STEP weglassen, wenn man STEP 1 schreiben wollte (das ist es dann automatisch).

Ausgabemöglichkeiten

Da gibt es
PRINT: Gibt Zeichen aus
GPRINT: Gibt Grafiken aus
CURSOR: Setzt die Position auf dem Display für PRINT
GCURSOR: Setzt die Position für GPRINT
PSET: Malt einen Punkt
PRESET: Löscht einen Punkt
LINE: Malt eine Linie
CLS: Löscht das Display

Jetzt könnte ich ja Aufgabe 4 machen: Schreibe ein Malprogramm, dessen Cursor man mit den Tasten 1 bis 9 in die entsprechende Richtung bewegen kann und mit 5 einen Pixel setzt, wenn auf dieser Stelle noch nicht gesetzt ist und löscht, wenn dieser schon gesetzt ist. Mit L soll man den Startpunkt einer Linie definieren können, mit einem weiteren Tastendruck auf L wird die Linie dann gezeichnet. Mit M soll man den Linientyp umschalten können zu Rechteck und gefülltes Rechteck und wieder zu Linie. CLS löscht das Bild und I invertiert es. Viel Spaß!

Verwaltung des Pocket Computers

Der Speicher lässt sich leicht überprüfen und warten:
MEM: Gibt den freien Platz an
SET MEM: Für mehrere RAM Karten zur Speicherverwaltung
CLEAR: Löscht alle oder die angegebenen Variablen
ERASE: Löscht angegebene Felder
NEW (nur PROGRAM MODE): Löscht alle BASIC Zeilen

Vorschau auf Maschinensprache

Die Befehle CALL, PEEK und POKE ermöglichen den direkten Zugriff auf CPU und Speicher. Mit meinem Programm PocketASM kann man in Assembler programmieren und so die Geschwindigkeit bestimmter Aufgaben steigern. Die CPU hat eine andere Programmiersprache, die in der Maschinensprachanleitung kurz erklärt wird. Mit etwas Training ist nach diesem Kurs jeder in der Lage, sich fortzubilden!


Lösungsvorschläge




Copyright © Simon Lehmayr (Teile dieser Seite sind mit Hilfe von Laurent Duveau entstanden)
Wenn diese Seite ohne Navigation angezeigt wird, hier klicken.
Impressum