Magic Disk 64

home to index to text: MD8909-KURSE-BASIC_KURS_TEIL_8-4.txt

Hier hätten wir das 3 . Datenelement des 523 . Hauptelements von A$ ausgedruckt, dies kann man in beliebig vielen Dimensionen weiterführen, soweit diese sinnvoll sind. Eines sollte ich jedoch noch sagen: bei einer Dimensionierung von Variablen reserviert der C64 für jede einzelne Variable einen bestimmten Speicherbereich. Bei FLOAT-Variablen ist dies besonders Speicherintensiv. Pro Variable gehen nämlich 5 Bytes flöten, die nicht mehr für andere Variablen benutzt werden können. Hierbei ist es übrigens egal, ob diese Variable nun einen Inhalt hat oder nicht. Man muß sich also immer ausrechnen, wieviel Speicherplatz so ein Feld einnimmt, um nicht in Speichermangel zu kommen, denn dann bricht der 64 er unweigerlich mit einem " ? OUT OF MEMORY ERROR" ab. Wollten Sie beispiel ein 6- dimensionales Feld mit jeweils 4 Datenelementen dimensionieren, so könnten Sie mit dem Speicherplatz knapp werden:

DIM A(3,3,3,3,3,3)                      

Wenn Sie sich wundern, warum hier immer 3 anstatt 4 steht, wie ich ja eben sagte, so denken Sie bitte daran, daß das 0 . Datenelement ebenfalls mitzählt, also 0,1,2,3= vier Elemente. Oben bei A$ hätte ich auch schreiben sollen, daß wir dort anstatt 1000 sogar 1001 Elemente, mit 11 anstatt 10 Unterelementen dimensioniert haben, doch habe ich dies zum besseren Verständnis zu jenem Zeitpunkt weggelassen.
Wir hätten hier also 4*4*4*4*4*4=4↑6 Variablen dimensioniert, für die alle 5 Bytes Speicherplatz reserviert werden, also 4↑6*5 Bytes oder 4096*5 Bytes =20480 Bytes, das entspricht etwa 2/3 des gesamten Basicspeichers (38911 Bytes) .
Es ist also keineswegs egal, wieviele Elemente Sie dimensionieren. Suchen Sie ein Optimum heraus. Bei Stringund Integervariablen ist der Speicherplatzverbrauch etwas geringer.
Probieren Sie doch einfach einmal aus, wie viel Platz Sie haben.
Kommen wir nun noch zu drei weiteren kleinen Befehlen, die ich ihnen noch erklären muß. Da wäre zunächst einmal der DEF FN-Befehl. Dies ist eigentlich nichts weiter als eine kleine Programmierhilfe, die man zwar nicht unbedingt braucht, die jedoch ganz nützlich sein kann, wenn man strukturiert programmieren möchte. FN ist quasi ein Variablenkürzel für eine vorher definierte Funktion. Sie müssen an dieses Kürzel nur noch einen FLOAT-Variablennamen anhängen ( also einen Variablennamen OHNE "%" oder "$") . Auf diese Weise können Sie häufig benutzte Funktionen, zum Beispiel komplexere Rechenformeln vordefinieren, die Sie dann durch einen simplen und kurzen Aufruf komplett durchrechenen können. Dies ist rechenzeitund speicherplatzsparend.
Doch hier die Praxis. Zunächst wollen wir erst einmal eine Funktion vordefinieren, hierzu benutzt man das DEF-Statement:

DEF FNAX(X)=(10/X)*SIN(X)+201           

Hier haben wir der FunktioN AX die Formel (10/ X)* SIN( X)+201 zugeordnet. Das " X" in Klammern der Definition muß immer mit angehängt werden. Möchten Sie nun einmal das Ergebnis der Formel ausgedruckt haben, wenn Sie für X beispielsweise den Wert 7 einsetzen, so müssen Sie dies folgendermaßen tun:
PRINT FNAX(7) Schon erhalten Sie ein Ergebnis. Die Möglichkeit eine Funktion zu definieren eignet sich gut für Kurvendiskussionsprogramme, da Sie bei einer Funktionsberechnung natürlich auch Variablen verwenden können. So zum Beispiel die Lauf- variable einer Schleife, die eine Wertetabelle ausdruckt.
Als Nächstes hätten wir da den WAIT Befehl. Mit ihm können wir den 64 er darauf warten lassen, daß eine Speicherzelle einen anderen Wert annimmt. Als Beispiel nehme ich hierzu einmal die Speicherzelle 198, aus dem oben schon genannten Speicherbereich für interne Aufgaben unseres Computers. In dieser Spicherzelle wird nämlich vom Betriebssystem zwischengespeichert, wieviele Tasten schon vom Benutzer gedrückt wurden, ohne daß das dazugehörige Zeichen ausgedruckt wurde. Wenn Sie sich im Direktmodus befinden steht hier nie mehr als der Wert 1 drin, da der 64 er die Tastendrücke schneller druckt, als Sie sie tippen können. Doch während eines laufenden Programms kann diese Zahl auch schon einmal bis zu 10 ansteigen. Deshalb wollen wir vor der Abfrage dieser Speicherzelle besser eine 0 hineinPOKEn.
Ich möchte Ihnen nämlich nun zeigen, wie man ganz einfach ein Programm zum Anhalten bringt, so, daß es auf einen Tastendruck wartet. Hier ein Beispiel:

10 POKE 198,0:WAIT 198,1:POKE 198,0     

Hier löschen wir zuerst einmal jeglichen Inhalt der eben genannten Speicherzelle, um sicherzugehen, daß hier auch wirklich nichts drinsteht. Mit dem folgenden WAIT-Befehl warten wir auf das Ereignis, daß eine Taste gedrückt wird, daß also eine 1 vom Betriebssystem in die Speicherzelle 198 geschrieben wird. Ist dies der Fall, so fährt der 64 er mit dem Programm fort, wo wir dann gleich noch einmal die Zelle 198 löschen, damit das eben eingegebene Zeichen nicht doch noch einmal irgendwann eingelesen werden kann und irgendwelche, nicht gewollte, Funktionen im Programm verursacht.
Als drittes noch kurz der SYS-Befehl.
Dieser Befehl ist für BASIC-Programmier eigentlich wenig wichtig. Mit ihm kann man den 64 er dazu veranlassen die BASIC-Ebene zu verlassen und ein Maschinenprogramm an einer bestimmten Speicheradresse auszuführen. Der Befehl " SYS 49152" zum Beispiel, startet ein Assemblerprogramm, das in Speicherzelle 49152 beginnt. Wenn Sie übrigens mehr über Assembler bzw. Maschinensprache wissen möchten, so möchte ich an dieser Stelle darauf hinweisen, daß wir, die Redaktion der MAGIC DISK 64, planen, etwa Anfang nächsten Jahres einen Assemblerkurs auf einer eigenen Diskette quasi als Sonderausgabe, herauszubringen. Wenn es soweit sein wird, werden wir Sie dann auch auf jeden Fall noch rechtzeitig informieren. Der Kurs wird übrigens ebenfalls von mir sein, falls Sie also meine Erklärungen für einsichtlich und einfach halten, so wird diese Diskette ein Muß für alle angehenden Assemblerprogrammie- rer unter Ihnen sein.
Der letzte Teil des Basickurses sollte dies sein. Aber das Basic V2 .0 beinhaltet noch ein paar weitere Befehle. Diese sind besonders bei der Programmierung der Grafik wichtig, weswegen sie eigentlich im sich anschließenden Grafikkurs abgehandelt werden sollten.
Da aber zu befürchten ist, daß die eigentliche Beschreibung und Erklärung dieser Befehle im Rahmen eines Grafikkurses zu kurz gerät, haben wir uns entschlossen, diese letzten Befehle in einem weiteren, nun aber endgültig letzten Basickursteil abzuhandeln.
Diesen neunten Teil finden Sie in der Oktoberausgabe der Magic Disk. Im November werden wir dann aber voll in die Grafikprogrammierung einsteigen.

                         Ihr Uli Basters

Valid HTML 4.0 Transitional Valid CSS!