Magic Disk 64

home to index to html: MD8909-KURSE-BASIC_KURS_TEIL_8-4.html
 Hier hätten wir das 3. Datenelement des
523.  Hauptelements  von A$ ausgedruckt,
dies kann man in beliebig vielen  Dimen-
sionen  weiterführen, soweit diese sinn-
voll sind. Eines sollte ich jedoch  noch
sagen:  bei  einer  Dimensionierung  von
Variablen reserviert der  C64  für  jede
einzelne Variable einen bestimmten Spei-
cherbereich.  Bei  FLOAT-Variablen   ist
dies   besonders  Speicherintensiv.  Pro
Variable gehen nämlich 5  Bytes  flöten,
die  nicht mehr für andere Variablen be-
nutzt  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  64er  unweigerlich  mit
einem "?OUT OF  MEMORY  ERROR" ab. Woll-
ten  Sie  beispiel  ein  6-dimensionales
Feld mit jeweils 4 Datenelementen dimen-
sionieren, so könnten Sie mit dem  Spei-
cherplatz 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  sag-
te,  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  dimen-
sioniert  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 String- und  In-
tegervariablen ist der Speicherplatzver-
brauch  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  Program-
mierhilfe, die man zwar nicht  unbedingt
braucht,  die  jedoch ganz nützlich sein
kann, wenn man strukturiert  programmie-
ren  möchte.  FN  ist  quasi  ein Varia-
blenkü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 Bei-
spiel  komplexere Rechenformeln vordefi-
nieren, die Sie dann durch einen simplen
und kurzen Aufruf komplett durchrechenen
können. Dies ist rechenzeit-  und  spei-
cherplatzsparend.                       
Doch  hier  die  Praxis. Zunächst wollen
wir erst einmal eine  Funktion  vordefi-
nieren,  hierzu  benutzt  man  das  DEF-
Statement:                              
DEF FNAX(X)=(10/X)*SIN(X)+201           
Hier haben wir der FunktioN AX die  For-
mel  (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 ausge-
druckt haben, wenn Sie für X  beispiels-
weise  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  Kurvendiskussions-
programme, da Sie bei einer Funktionsbe-
rechnung natürlich auch  Variablen  ver-
wenden können. So zum Beispiel die Lauf-
variable einer Schleife, die eine Werte-
tabelle ausdruckt.                      
Als  Nächstes hätten wir da den WAIT Be-
fehl. Mit ihm können wir den 64er darauf
warten lassen,  daß  eine  Speicherzelle
einen anderen Wert annimmt. Als Beispiel
nehme ich hierzu einmal die Speicherzel-
le 198, aus  dem  oben  schon  genannten
Speicherbereich   für  interne  Aufgaben
unseres Computers. In dieser Spicherzel-
le  wird nämlich vom Betriebssystem zwi-
schengespeichert, wieviele Tasten  schon
vom  Benutzer  gedrückt wurden, ohne daß
das  dazugehörige  Zeichen   ausgedruckt
wurde.  Wenn Sie sich im Direktmodus be-
finden steht hier nie mehr als der  Wert
1  drin,  da  der  64er 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 wol-
len wir vor der Abfrage dieser Speicher-
zelle  besser  eine  0  hineinPOKEn.    
Ich möchte Ihnen nämlich nun zeigen, wie
man ganz einfach ein  Programm  zum  An-
halten 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 Spei-
cherzelle 198 geschrieben wird. Ist dies
der Fall, so fährt der 64er mit dem Pro-
gramm fort, wo wir dann gleich noch ein-
mal die Zelle  198  löschen,  damit  das
eben eingegebene Zeichen nicht doch noch
einmal irgendwann eingelesen werden kann
und  irgendwelche, nicht gewollte, Funk-
tionen 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 64er dazu veranlassen die BASIC-
Ebene zu verlassen und ein Maschinenpro-
gramm an einer bestimmten Speicheradres-
se auszuführen. Der Befehl  "SYS  49152"
zum  Beispiel, startet ein Assemblerpro-
gramm, das in  Speicherzelle  49152  be-
ginnt.  Wenn  Sie übrigens mehr über As-
sembler  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 Sonder-
ausgabe,  herauszubringen.  Wenn  es so-
weit sein wird, werden wir Sie dann auch
auf jeden Fall noch  rechtzeitig  infor-
mieren. Der Kurs wird übrigens ebenfalls
von mir sein, falls Sie also  meine  Er-
klä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  beinhal-
tet noch ein paar weitere Befehle. Diese
sind besonders  bei  der  Programmierung
der Grafik wichtig, weswegen sie eigent-
lich im sich  anschließenden  Grafikkurs
abgehandelt werden sollten.             
Da aber zu befürchten ist, daß  die  ei-
gentliche  Beschreibung  und   Erklärung
dieser Befehle im Rahmen  eines  Grafik-
kurses zu kurz gerät, haben wir uns ent-
schlossen,  diese  letzten  Befehle   in
einem weiteren, nun aber endgültig letz-
ten 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!