Basic-Kurs Teil 2                  
                  
 Lieber  Leser. Nachdem  wir  uns  das  letzte  Mal  ja  ausgiebig  um  die  Variablen  und  den  PRINT-Befehl  gekümmert  haben, möchten  wir  uns  diesen  Monat  nun  endlich
 dem  Programmeschreiben, also  der  wirklichen  Programmerung, von  BASIC  befassen.
 Letzte  Ausgabe  hatten  wir  unsere  Befehle  und  Anweisungen  ja  immer  direkt  auf  den  Bildschrirm  geschrieben, und  der  Computer  hat  sie  dann  auch  immer, nachdem  wir  die  Taste  RETURN  gedrückt  hatten, sofort  ausgeführt, insofern  er  nichts  an  der  Syntax  der  Zeile
 auszusetzen  hatte. Nun  müssen  Sie  allerdings  zugeben, daß  unsere  kleinen  PRINT-Anweisungen  sich  als  relativ
 umständlich  und  sinnlos  erwiesen, zumal  man, um  einen
 Text  auf  den  Bildschirm  zu  drucken, ja  mehr  Schreibarbeit  hatte, als  wenn  man  ihn  einfach " von  Hand" auf  den  Bildschirm  geschrieben  hätte. Man  hatte  ja
 noch  zusätzlich  den  PRINT-Befehl  zu  schreiben  und  die
 Anführungszeichen, die  den  Text  einschlossen.
 Nun, all  dies  hat  natürlich  einen  Sinn, denn  der
 PRINT-Befehl  ist, ebenso  wie  die  meisten  anderen  BA-SIC- Befehle, nicht  dafür  geschaffen  worden, direkt
 Texte  auszugeben, sondern  um  in  Programmen  zu  arbeiten, wo  die  Textausgabe  zur  Kommentierung  des  Programms  absolut  unerläßlich  ist, zumal  dann  ein  völlig
 ahnungsloser  Benutzer  auch  dann  mit  dem  Programm  etwas  anfangen  kann, wenn  er  es  sich  zum  ersten  Mal
 ansieht. Doch  wie  sag  ichs  meinem  Computer? Wie  machen  wir  denn  unserem  C64 klar, daß  wir  die  eingegeben  Zeile  nicht  jetzt, sondern  irgendwann  später  ausgeführt  haben  wollen, und  daß  er  sich  diese  Zeile  für
 jenen  späteren  Zeitpunkt  merken  soll? Nun, geben  Sie
 doch  einfach  einmal  folgende  Zeile  ein  :
10 print" Das  ist  ein  Programm  !"
 Sie  sehen, daß  Sie  nichts  sehen. Denn  sobald  Sie  die
 RETURN-Taste  drücken, druckt  Ihnen  Ihr 64 er  nicht  den
 Text " Das  ist  ein  Programm  !" aus  sondern  springt  mit
 dem  Cursor ( das  ist  das  kleine  hellblaue  Viereck, das
 immer  so  blinkt, und  Ihnen  Ihre  Schreibposition  angibt) einfach  in  die  nächste  Bildschirmzeile  und  war- tet  nun  wiederum  auf  eine  Eingabe. Noch  nicht  mal
 eine  Fehlermeldung  ist  zu  sehen. Eine  Riesensauerei! ! !
 Doch  keine  Panik  ! Ihr  C64 ist  nicht  etwa  beleidigt, oder  kaputt, sondern  er  hat  sich  soeben  gerade  eine
 Programmzeile  gemerkt. Doch  was  heißt  das  eigentlich?
 Nun, wie  Ihnen  bestimmt  aufgefallen  ist, haben  wir
 vor  unsre  PRINT-Anweisung  noch  eine  Zahl  geschrieben.
 Dies  ist  die  sogenannte  Zeilennummer. Ihr  Computer
 merkt  sich  Ihre  Eingaben  intern  nämlich  mit  Nummern, die  er  nach  ihrer  Größe  ordnet. Das  heißt, daß  Sie
 mit  dieser  Zahl  auch  immer  wieder  auf  eben  jene  Zeile
 zurückgreifen  können. Sie  ist  sozusagen  das " Erkennungszeichen" einer  Programmzeile. Was  das  genau  bedeutet, möchte  ich  Ihnen  mit  einem  kleinen  Beispiel
 noch  ein  wenig  näher  bringen. Geben  Sie  doch  einmal
 ein:
 list 
 Sie  sehen  nun  folgendes:
10 print"Das ist ein Programm !" ready.
 Nach  Eingabe  des  BASIC-Befehls  LIST  hat  uns  der  C64 die  eben  eingegebene  Programmzeile  wieder  aufgeLI-STet; so, wie  wir  sie  eingegeben  hatten, nämlich  mit
 ihrer  Zeilennummer  vorangestellt. Er  hat  sich  diese
 Zeile  also  gemerkt. Sie  können  gerne  einmal  probieren
 ob  es  auch  funktioniert  wenn  Sie  den  Bildschirm
 gelöscht  haben ( dies  tun  Sie  mit  der  Tastenkombination  SHIFT  und  CLR/ HOME), auch  nun  wird  Ihnen  der
 Text  noch  haargenauso  angezeigt, wie  Sie  ihn  eingaben, es  hat  also  nichts  damit  zu  tun, daß  unsere  Zeile  noch  auf  dem  Bildschirm  stand. Das  ist  auch  gut
 so, denn  der  C64 merkt  sich  solche  Programmzeilen  in
 seinem  Programmspeicher ( ebenso  wie  die  Variablen) von  wo  er  sie  auch  wieder  auf  dem  Bildschirm  anzeigen
 kann, halt  mit  eben  jenem  Befehl  LIST.
 Auch  für  Zeilennummern  müssen  Sie  bestimmte  Regeln
 einhalten, damit  Ihnen  keine  Fehler  angezeigt  werden.
 Hier  eine  Zusammenfassung  dieser  Regeln  :
1 .) Sie  können  alle  Zahlen  von 0 bis 63999 für  eine
 Zeilennummer  benutzen. Dabei  sollten  Sie  jedoch
 die  Zeilennummern  immer  in 10 er-Schritten ( also
10,20,30,40, etc.) vergeben, warum  dies  von  Vorteil  ist, werde  ich  Ihnen  später  erklären.
2 .) Egal  in  welcher  Reihenfolge  Sie  die  Zeilen  eingeben, der  C64 ordnet  diese  immmer  wieder  neu  nach
 der  Größe  ihrer  Zahlen  ein. Sollten  Sie  also  einmal  folgende  Zeilen  in  der  hier  dargestellten
 Reihenfolge  eingeben:
    30 print"Zeile 30"                               
    10 print"Zeile 10"                               
    20 print"Zeile 20"                               
    40 print"Zeile 40"                               
 So  wird  Ihnen  Ihr  C64 nach  der  Eingabe  von  LIST
 immer  wieder  folgendes  Bild  liefern  :
    10 print"Zeile 10"                               
    20 print"Zeile 20"                               
    30 print"Zeile 30"                               
    40 print"Zeile 40"                               
3 .) Sollten  Sie  eine  Zeile  eingeben, die  eine  Zeilennummer  hat, die  schon  im  Speicher  existiert, dann
 wird  die  alte  Zeile  im  Speicher  durch  die  neue
 ersetzt. Sollten  Sie  also  bei  obigem  Programm ( so
 können  wir  es  jetzt  nennen) die  Zeile:
30 print" Aetsch! Das  is  jetzt  anders."
 eingeben, dann  wird  das  Programm  beim  nächsten
 Listen  so  aussehen  :
    10 print"Zeile 10"                               
    20 print"Zeile 20"                               
    30 print"Aetsch! Das is jetzt anders."           
    40 print"Zeile 40"                               
4 .) Sollten  Sie  eine  Zeile  eingeben, die  nur  aus  einer  Zeilennummer  besteht  OHNE  darauffolgende  Befehle, so  wird  die  entspechende  Zeile  mit  dieser
 Nummer, sollte  sie  im  Speicher  stehen, gelöscht
 werden. Würden  Sie  also:
30
 eingeben, dann  würde  Zeile 30 aus  unserem  Programm  oben  gelöscht  werden.
 Jetzt  möchte  ich  Ihnen  die  Syntax  des  LIST-Befehls
 erst  einmal  noch  etwas  genauer  erklären, bevor  ich
 weitergehe  und  Ihnen  zeige, wie  Sie  unser  kleines
 Progrämmchen  zum  Ablauf  bringen.
 Sie  können  dem  LIST-Befehl  nämlich  sogar  noch  spezifischer  sagen, in  welche  Programmzeilen  Sie  einen
 Einblick  wünschen. Hierzu  müssen  Sie  dem  Befehlswort
 LIST  ganz  einfach  die  Zeilenummer  der  Zeile, die  Sie
 sich  ansehen  wollen  hinterherstellen. Der  Befehl:
 list 20
 bewirkt  also, daß  Ihnen  anstatt  des  ganzen  Programms
 nur  die  Zeile 20 angezeigt  wird. Ich  glaube  jetzt
 wird  es  Ihnen  hoffentlich  auch  etwas  deutlicher, warum  eine  Zeile  eine  Nummer  braucht. Durch  sie  kann
 man  jede  einzelne  Zeile  ansprechen  wie  man  möchte, der  Computer  versteht  also  sofort, welche  Zeile  Sie
 von  ihm  sehen  wollen.
 Doch  die  Anwendung  von  LIST  geht  noch  weiter. Sie
 können  sich  ebenso  auch  einen  ganz  bestimmten  Bereich
 aus  Ihrem  Programm  ansehen, geben  Sie  etwa  folgendes
 ein:
 list 20-30
 so  werden  die  Zeilen 20 und 30 auf  dem  Bildschirm
 gelistet. Sie  geben  also  einfach  eine  obere  und  eine
 untere  Grenze  an, und  LIST  wird  seine  Arbeit  auf  diese  Zeilengrenzen  beschränken. Ebenso  können  Sie  diese
 Schranke  nach  oben  und  unten  offen  lassen. Dann  wird
 dementsprechend  einfach  von  der  ersten  Zeile  bis  zu
 der  angegebenen  Zeile, beziehungsweise  von  der  angegebenen  Zeile  bis  zur  letzten  Zeile  gelistet. Probieren  Sie  doch  einfach  einmal  folgendes  mit  unserem
 kleinen  Beispielprogramm  im  Speicher. Geben  Sie  ein:
 list -30
 Nun  werden  die  Zeilen 10,20 und 30 gelistet, weil  das
 Programm  ab  Zeile 10 anfängt.
 Bei  dem  Befehl:
 list 20-
 werden  die  Zeilen 20,30 und 40 gelistet. Der  C64 fängt  bei  der  von  Ihnen  angegebenen  Zeile  an  und  hört
 erst  am  Ende  des  Programms  auf.
 Wie  der  LIST-Befehl  funktioniert  wissen  Sie  jetzt  ja, klären  wir  also  schnell  noch  die  Frage, warum  man  im
 Allgemeinen  besser  Zeilennummern  in 10 er-Schritten
 verteilt. Nun, dies  liegt  einfach  darin  begründet, daß  Sie, wie  jeder  Mensch  auch, nicht  unfehlbar  sind, und  daß  es  Ihnen  durchaus  einmal  passieren  kann, daß
 Sie, aufgrund  eines  Fehlers  im  Programm, noch  eine
 Zeile  einfügen  müssen. Würden  Sie  in 1 er-Schritten
 die  Programmzeilen  eingeben, so  müßten  Sie  erst  einmal  Platz  schaffen, indem  Sie  alle  der  einzufügenden
 Zeile  folgenden  Zeilen  nochmals  neu  einzutippen  hätten, da  diese  ja  im  Speicher  stehen  bleiben  sollten, aber  zwischen  den  Zeilen 33 und 34 kein  Platz  mehr
 für  eine  weitere  Zeile  wäre. Deshalb  benutzen  Sie
 besser 10 er  Zahlen, so, daß  Sie  bequem  zwischen  die Zeilen 20 und 30 beispielsweise  eine  weitere  Zeile, vielleicht  mit  der  Zeilennummer 25, einfügen  könnten.
 Gewöhnen  Sie  sich  diese  Programmierweise  also  gleich
 an, Sie  werden  sehen, es  lohnt  sich  ganz  bestimmt.
 Doch  widmen  wir  uns  nun  unserem  Problem, unser  Programm  auch  zum  Ablaufen  zu  bringen. Auch  hierfür  gibt
 es  einen  Befehl: den  RUN-Befehl ( von  engl. : to  run = laufen) . Haben  Sie  unser  kleines  Programm  noch  im
 Speicher? Gut. Dann  geben  Sie  doch  einmal  ein:
 run 
 Und  nun, siehe  da, werden  unsere  ersehnten  PRINT-Zeilen  endlich  aktiv, denn  Sie  sehen  nun  folgendes
 auf  dem  Bildschirm  :
Zeile 10 Zeile 20 Aetsch! Das is jetzt anders. Zeile 40 ready.
 Und  nun  sehen  Sie  auch  den  Vorteil  des  PRINT-Befehls.
 Sie  können  nämlich  so  auf  einfache  Art  und  Weise  lange, lange  Texte  eingeben, die  dann  dem  Benutzer  während  des  Ablaufs  eines  Programms  wertvolle  Meldungen
 und  Hinweise  geben  können.
 Der  RUN-Befehl  kann  übrigens  ähnlich  wie  LIST  angewandt  werden. Sie  können  Ihm  nämlich  auch  sagen, wo
 genau  er  beginnen  soll, ein  Programm  abzuarbeiten.
 Nämlich  indem  Sie  ihm, wie  bei  LIST, eine  Zeilennummer  nachstellen, ab  der  er  beginnen  wird  das  Programm
 abzuarbeiten. Gäben  Sie  also  :
 run 30
 ein, so  würde  Sie  folgendes  Bild  auf  dem  Bildschirm
 anstrahlen  :
Aetsch! Das is jetzt anders. Zeile 40 ready.
 Eines  sollte  noch  gesagt  sein: sollten  sich  Variablen  im  Speicher  befinden, wenn  Sie  eine  neue  Programmzeile  eingegeben  haben, so  werden  diese  nach  dem
 drücken  der  RETURN-Taste  restlos  gelöscht. Das  liegt
 daran, daß  der 64 er  zum  Eingliedern  der  neuen  Zeile
 in  die  richtige  Zahlenreihenfolge  den  gesamten  Programmspeicher  hinund  herschieben  muß  und  daß  bei
 dieser  Schieberei  sehr  leicht  der  Inhalt  einer  Variablen  zerstört  werden  kann. Deshalb  werden  alle  Variablen  vorher  gelöscht, damit  später  kein  Mist  im  Programmtext  stehen  kann, und  falsche  Variablenwerte  zu
 falschen  Programmreaktionen  führen  können.
 Ebenfalls  aus  letztem  Grund  heraus  werden  grundsätzlich  vor  der  Ausführung  eines  RUN-Befehls  alle  Variablen  vom  Computer  gelöscht, da  so  ebenfalls  ungewollte  Veränderungen  der  Variablen  entstehen  könnten.
 Außerdem  kann  für  die  beiden  Befehle  LIST  und  RUN
 gesagt  werden, daß  sie  durch  das  Drücken  der  RUN/ STOP-Taste  wieder  angehalten  werden  können.
 Das  heißt  also, wenn  LIST  Ihnen  gerade  ein  Programm
 auflisten  sollte, und  Sie  sich  einen  Teil  etwas  genauer  ansehen  wollten, Sie  dadurch  den  Vorgang  des
 Listens  unterbrechen  könnten.
 Ebenso  bei  RUN. Möchten  Sie  aus  irgendeinem  Grund  Ihr
 Programm  anhalten, vielleicht  weil  es  nicht  das  tut, was  Sie  von  Ihm  wollen, dann  können  Sie  es  ebenfalls
 auf  diese  Weise  unterbrechen. Sollten  Sie  es  dann
 allerdings  doch  an  der  Stelle  fortsetzen  wollen, an
 der  Sie  es  angehalten  haben, allerdings  ohne  den  Inhalt  aller  Variablen  zu  zuerstören, dann  können  Sie
 den  Befehl  CONT  benutzen. Er  hat  haargenau  selben
 Effekt  wie  RUN, nur, daß  er  zum  einen  die  Variablenwerte  nicht  vorher  löscht, und  zum  anderen  genau  hinter  dem  Befehl  weiterarbeitet, bei  dem  das  Programm
 vorher  abgebrochen  wurde, vorrausgesetzt  es  wurde
 zwischendurch  nicht  verändert. Am  besten  zeige  ich
 Ihnen  noch  einen  weiteren  Befehl, damit  Sie  hier  auch
 ein  wenig  experimenieren  können: der  GOTO-Befehl.
 Übersetzen  wir  GOTO  aus  dem  Englischen, wissen  wir
 auch  schon  gleich, was  wir  mit  diesem  Befehl  anfangen
 können. GEHE  ZU  einer  Zeilennummer  und  arbeite  das
 Programm  von  dort  aus  weiter  ab. Hinter  GOTO  muß  also
 noch  eine  Zeilennummer  folgen. Probieren  wir  also
 wieder  an  unserem  kleinen  Progrämmchen  etwas  aus.
 Geben  Sie  doch  zusätzlich  noch  folgende  Zeile  ein:
50 goto 10
 Starten  Sie  nun  das  Programm  mit  RUN. Sie  sehen  nun
 immer  wieder  unseren  Demotext  auf  dem  Bildschirm
" runterlaufen", also  etwa  folgendes  Bild  :
... Zeile 40 Zeile 10 Zeile 20 Aetsch! Das ist jetzt anders. Zeile 40 Zeile 10
 . . .
 Verfolgen  wir  einmal  unseren  C64, wie  er  sein  Programm  abarbeitet. Zuerst  werden  die  Zeilen 10-40 wie
 gewohnt  durchlaufen. Der  Text  in  den  PRINT-Zeilen
 erscheint  also  auf  dem  Bildschirm. Anschließend
 trifft  der  Computer  in  Zeile 50 auf  den  GOTO  Befehl, der  besagt, daß  er  bei  Zeile 10 weiterarbeiten  soll.
 Er  führt  diesen  Befehl  aus, und  beginnt  wieder  von
 vorne  bei 10 . Dies  wiederholt  sich  nun  bis  ins  Unendliche. Pausenlos  wird  der  Text  ausgedruckt, und  unser
64 er  würde  dies  Jahre  lang  machen, vorrausgestzt  es
 gäbe  keinen  Stromausfall. Er  befindet  sich  in  einer
 sogenannten " Endlosschleife" eine  Schleife, die  immer
 wieder  durchlaufen  wird, ohne  daß  Sie  zu  einem  Ende
 kommt. Eine  Schleife  ist  also  ein  bestimmter  Programmabschnitt, der  mindestens  zweimal  durchlaufen
 wird. Um  nicht  den  ganzen  Programmteil  nochmals  eingeben  und  somit  das  Programm  unnötig  verlängern  zu
 müssen  verwendet  man  also  den  GOTO-Befehl. Nun  kommt
 der  Auftritt  für  die  RUN/ STOP-Taste. Drücken  Sie  sie
 einmal. Es  erscheint  nun:
break in xx ready.
 Der  Computer  meldet  Ihnen  also, daß  Sie  soeben  das
 laufende  Programm  in  Zeile  xx  abgebrochen  haben. Für
" xx" können  alle  Zeilennummern  des  Programms  stehen, da  es  Zufall  ist, in  welcher  Zeile  Sie  gerade  abgebrochen  haben. Auf  alle  Fälle  sind  Sie  nun  unserer Endlosschleife  entkommen  und  können  wieder  an  Ihrem
 Programm  weiterarbeiten. Sollten  Sie  allerdings  wieder  den  Wunsch  hegen, schöne  Zeichenketten  auf  dem
 Bildschirm " runterlaufen" zu  sehen, dann  können  Sie
 jetzt  ganz  einfach  wieder  mit  CONT  das  Programm  fortfahren  lassen ( CONT  von  engl. : to  continue = fortsetzen, fortfahren) .
 Fassen  wir  doch  einmal  zusammen, wie  weit  wir  schon
 fortgeschritten  sind. Wir  können  mittlerweile  kleine
 Programme  schreiben, die  etwas  auf  dem  Bildschirm
 ausgeben, wir  können  rechnen, Programme  mit  Hilfe  von
 LIST  editieren  und  kennen  auch  RUN, um  diese  zum  laufen  zu  bringen. Außerdem  kennen  wir  uns  mit  den  Namen
 und  Typen  von  Variablen  aus. Nunja, auf  den  ersten
 Blick  erscheint  dies  ja  sehr  viel, doch  direkt  weltbewegende  Programme  können  wir  noch  nicht  so  ganz
 schreiben, da  wir  eigentlich  nur  einen  einzigen  Befehl  kennengelernt  haben, mit  dem  sich  innerhalb  von
 Programmen  etwas  anfangen  läßt, den  PRINT-Befehl. Die
 anderen  sind  mehr  oder  weniger  ausschließlich  außerhalb  von  Programmen, im  sogenannten " Direktmodus" nützlich, obwohl  sie  ebenso  in  Programmen  funktionie- ren  würden. Wollen  wir  also  nun  unser  Befehlsspektum
 noch  ein  wenig  mehr  erweitern  und  wenden  wir  uns  einem  sehr  mächtigen  Befehl  zu, mit  dem  schon  etwas
 mehr  zu  machen  ist.
 Erinnern  wir  uns  doch  einmal  an  unser  Beispiel  vom
 letzten  Monat  mit  der  Coladose. Wir  hatten  mit  Hilfe
 von  Variablen  die  Oberfläche  einer  Coladose  berechnet. Diese  Dose  hatte  eine  Höhe  von 11 .5 cm  und  einen
 Deckelradius  von 3 .25 cm. Mit  Hilfe  der  Formel
 o=2* r*π*( r+ h) sind  wir  dann  zu  dem  Ergebnis 301 .2 qcm
 gekommen. Bedenkt  man  nun, daß  durch  den  Trend  zum
 Umweltschutz  es  heutzutage  durchaus  möglich  sein
 könnte, daß  man  ein  anderes  Material  für  Einwegdosen
 erfinden  wird, und  daß  man  deshalb  vielleicht  ein
 anderes  Dosenformat  wählen  muß, so  wäre  unsere  schöne
 mühselige  Rechnung  nur  noch  Müll, da  unbrauchbar. Man
 müßte  die  ganze  Prozedur  nochmals  mit  den  Werten  der
 neuen  Dosen  durchführen. Eine  mehr  oder  wenig
 umständliche  Sache  also. Doch  wozu  können  wir  jetzt
 Programme  schreiben, wir  hatten  ja  gelernt, daß  die
 Formel  für  die  Zylinderoberfläche, wie  ich  sie  oben
 schon  aufgeführt  hatte, ja  allgemeingültig  ist  und somit  mit  allen  nur  erdenklichen  Werten  für  r  und  h
 einen  richtigen  Wert  liefert. Im  Prinzip  könnte  man
 nun  ein  Programm  schreiben, daß  diese  Formel  benutzt, und  würde  dann  hierfür  die  Variablen  in  einer  vorangehenden  Zeile  mit  den  entspechenden  Werten  versorgen. Doch  wir  machen  es  uns  noch  komfortabler, wir
 benutzen  den  INPUT-Befehl, der  für  Eingaben  vom  Benutzer  aus  sehr  empfänglich  ist ( im  wahrsten  Sinne
 des  Wortes, denn  INPUT  bedeutet  nichts  anderes  als
" EINGABE") . Mit  ihm  wird  es  uns  gestattet, eine  Abfrage  zu  machen, auf  die  der  Benutzer  mit  einer  Eingabe  antworten  kann, und  dies  alles  sogar  mitten  im
 im  Programm! ! !
 Wir  benötigen  also  Werte  für  Radius  und  Höhe. Wie
 beim  letzten  Mal  wollen  wir  hierfür  die  Variablennamen  r  und  h  wählen. Sehen  wir  uns  nun  doch  einmal  die
 ersten  Zeilen  unseres  Programms  an  :
10 print  chr$(14) ;
20 print"[ CLR,4 SPACE] Zylinderoberflaechenberechnung"30 input"[2 DOWN] Radius " ; r 40 input" Hoehe " ; h 
 Da  haben  wir  ja  schon  eine  ganze  Menge  neue  Anweisungen. Fangen  wir  einmal  in  Zeile 10 an. Sie  sehen  hier
 einen  PRINT-Befehl, doch  was  dieser  Befehl  ausdruckt, können  Sie  nicht  wissen. Eine  String-Variable  ist  das
 nicht ( obwohl  es  fast  so  aussieht), ich  kann  Ihnen
 allerdings  versichern, daß  es  etwas  ähnliches  darstellt. Dies  ist  die  CHR$- Funktion. ACHTUNG! Ich  betone  das  Wort  FUNKTION! Es  handelt  sich  hierbei  wohlgemerkt  NICHT  um  einen  Befehl, das  dürfen  Sie  nie
 verwechseln. Eine  Funktion  wird  zwar  ebenfalls  durch
 ein  BASIC-Schlüsselwort  dargestellt, doch  sie  ist
 ohne  einen  verknüpfenden  Befehl, oder  eine  Variablenzuweisung  nicht  ausführbar, da  der  Computer  in  diesem
 Fall  nicht  spezifisch  weiß, was  er  mit  ihr  anfangen
 soll. Das  heißt  also, daß  Sie  Funktionen  immer  mit
 PRINT  ausgeben, oder  einer  Variablen  zuweisen  können.
 Zum  Beispiel  so:
a$=chr$(65) print a$
 Es  gibt  übrigens  noch  mehr  Anwendungsmöglichkeiten
 für  Funktionen, doch  werden  wir  hierzu  später  kommen, da  Sie  die  entprechenden  Befehle  hierzu  noch  nicht
 kennen.
 Was  bewirkt  die  CHR$- Funktion? Nun, CHR$, wird  benutzt  um  einzelne  Zeichen  spezifiziert  aufrufen  zu
 können. Jedes  Zeichen  auf  Ihrer  Tastatur  besitzt  einen  eigenen  Zahlencode. Geben  Sie  der  CHR$- Funktion
 nun  diesen  Zahlcode  eines  Zeichen  in  Klammern  an, dann  steht  die  ganze  Funktion  für  eben  dieses  Zeichen. In  unserem  Beispiel  von  eben  haben  wir  der  Variable  a$ den  Zeichencode 65 zugeordnet. Anschließend
 wurde  die  Variable  a$, in  der  ja  nun  dieser  Zeichencode  als  Buchstabe  dargestellt  war, auf  dem  Bildschirm  ausgegeben. Dieses  Zeichen, das  zu  dem  Code 65 gehört, ist  das  kleine " a" . Somit  ist  unsere  Variablendefinition  gleich  der  Definition:
 a$=" a"
 mit  der  ja  auch  der  Buchstabe " a" dem  String  a$ zugeordet  wird. Ich  hoffe  Sie  haben  dies  verstanden.
 Somit  hat  der  folgende  PRINT-Befehl  auch  das " a" auf
 dem  Bildschirm  ausgedruckt. Genauso  hätten  Sie  auch
 schreiben  können:
 print  chr$(65)
 womit  Sie  das  selbe  Ergebnis  erzielt  hätten, allerdings  nicht  mehr  über  den  Umweg  mit  der  Stringvariable. Hier  sei  auch  noch  gesagt, daß  das  Ergebnis  der
 CHR$- Funktion  immer  einer  Stringvariablen  zugeordnet
 wird, nicht  also  einer  Floatoder  Integervariable, da  diese  Variablentypen  ja  keine  Zeichen  darstellen
 können. Allerdings  können  Sie  problemlos  auch  Anweisungen  von  dieser  Art  vergeben:
a=65 a$=chr$(a) Hier haben wir nicht den Zeichencode 65 in "a" ge- speichert, sondern einfach nur den Zahlwert 65 (bei "PRINT a" kriegen Sie wie erwartet "nur" die Zahl 65 auf den Bildschirm gedruckt). Sie dürfen also
 Floats  und  Intergers  benutzen, um  den  Zahlwert  in
 Klammern ( von  CHR$) anzugeben, dies  führt  also  zu  dem
 selben  Ergebnis, CHR$ holt  sich  den  Wert  von  a  aus
 dem  Speicher  und  ordnet  dann  dem  String  a$ den  Zeichencode  des  Zahlwerts  von  a  zu. Auf  der  Rückseite
 dieser  Magic  Disk  finden  Sie  diesmal  auch  ein  kleines  Programm  namens  ASCII-Code. Es  zeigt  Ihnen  alle
 möglichen  ASCII-Codes ( das  sind  eben  jene  Codes  der
 Zeichen) des  C64 an.
 Wollen  wir  in  diesem  Zusammenhang  gerade  noch  die
 Umkehrfunktion  von  CHR$ betrachten, die  ASC-Funktion, mit  der  Sie  sich  beispielsweise  den  ASCII-Wert ( so
 nenne  ich  ab  jetzt  diesen  Zeichencode, ASCII  ist  ein
 internationaler  Standard, an  den  sich  die  meisten
 Computerhersteller  halten, die  Zeichen  haben  also  auf
 den  meisten  Computern  die  selben  Codes. Leider  ist
 dies  beim  C64 aus  unerfindlichen  Gründen  nicht  der
 Fall, trozdem  wird  auch  hier  von  ASCII  gesprochen) eines  Zeichens  ausgeben  lassen  können. Hier  geht  alles  genau  umgekehrt, hier  geben  Sie  ein  Zeichen  an, und  es  kommt  ein  Zahlwert  heraus. Dies  müssen  Sie
 also  auch  bei  Variablenzuweisungen  beachten. Die
 ASC-Funktion  sieht  so  aus:
 print  asc(" a")
 Wie  chr$, nur  daß  Sie  jetzt  das  zu  untersuchende  Zeichen  in  Anführungsstrichen  in  die  Klammer  einsetzen
 müssen. Die  Anführungsstriche  deshalb, weil  Sie  hier
 auch  Strings  als  sogenanntes  Funktionsargument  verwenden  dürfen, diese  dann  allerdings  OHNE  Anführungsstriche. Also:
a$="a" print asc(a$)
 hätte  die  selbe  Wirkung  wie  die  oben  aufgezeigte  Zeile. Sie  können  sich  so  also  alle  CHR$- Codes, bzw.
 ASCII-Codes  ausgeben  lassen, und  dann  bei  Bedarf  verwenden. Auch  ASC-Funktionswerte  kann  man  Variablen
 zuweisen  :
a$="x"                                               
a=asc("x")                                           
a%=asc(a$)                                           
 Die  beiden  letzten  Zeilen  führen  zum  selben  Ergebnis, nur  daß  der  eine  Wert  in  der  Floatvariable " a" gespeichert  ist  und  der  andere  in  der  Integervariablen
" a%" . Außerdem  ist  der  Weg, mit  dem  die  Ergebnise
 erreicht  werden  jeweils  ein  anderer, doch  das  dürften
 Sie  mittlerweile  ja  kennen.
 Doch  wollen  wir  uns  nun, nach  unsrem  langen  langen
 Ausflug  zu  den  ASCII-Codes  wieder  unserer  Zylinderberechnung  widmen. Wir  sind  ja  gerade  dadurch  auf  dieses  Thema  gekommen. . .
 In  Zeile 10 stand  der  Befehl  PRINT  CHR$(14) . Es  wurde  also  ein  ASCII-Zeichen  ausgegeben, mit  dem  Zeichencode 14 . Dieser  Code  steht  für  eine  sogenannte
" Steuerfunktion" . Mit  einer  Steuerfunktion  können  Sie
 ein  Zeichen  ausgeben, das  nicht  direkt  als  Buchstabe
 auf  dem  Bildschirm  sichtbar  wird, sondern  eher  eine
" unsichtbare" Funktion  ausübt, wie  zum  Beispiel  den
 Bildschirm  zu  löschen, den  Cursor  eine  Zeile  höher
 oder  tiefer  rücken  zu  lassen, oder  die  Zeichenfarbe
 zu  verändern. Unser  Code 14 bewirkt, daß  der  Zeichensatz  von  Großauf  Kleinschrift  umgeschaltet  wird. Er hat  also  die  selbe  Wirkung  wie  das  gleichzeitige
 Drücken  der  SHIFTund  der  Commodoretaste. Dies  ist
 deshalb  notwendig, damit  beim  späteren  Ausdruck  von
" Zylinderoberflächenberechnung" in  Zeile 20, der
 Großbuchstabe " Z" nicht  etwa  als  Grafikzeichen  ausgegeben  wird, was  leicht  passieren  kann, zumal  die
 Großschrift  doch  direkt  nach  dem  Einschalten  des
64 ers  vorhanden  ist.
 Sicher  ist  Ihnen  der  Text  in  den  eckigen  Klammern
-[]- aufgefallen, dies  ist  kein  Programmtext  im
 allgemeinen, hiermit  habe  ich  ebenfalls  angegeben, welche  Steuerzeichen  an  dieser  Stelle  eingefügt  werden  müssen. Sie  wissen  ja, unsere  Zeichen, die  keine
 sind, sondern  etwas  bestimmtes  ausführen. Man  kann
 Sie  nämlich  auch  direkt  in  die  PRINT-Anweisung
 einfügen, zumal  das  auch  einfacher  und  platzsparender
 ist. Ich  tat  dies  bei  CHR$(14) bewußt  nicht, da  Sie
 so  bei  der  Gelegenheit  einmal  die  CHR$- und  ASC-Funktion  kennenlernen  konnten, und  weil  außerdem  dieses  Steuerzeichen  nicht  als  solches  in  einer  PRINT-Anweisung  darstellbar  ist ( es  gibt  zwar  schon  einen
 Weg, doch  das  wäre  jetzt  hier  zuviel) . Doch  wie  sollen  Sie  denn  überhaupt  diese  Steuerzeichen  in  die PRINT-Anweisung  hereibringen? Die  Lösung  ist  ebenso
 einfach  wie  genial. Sie  müssen  lediglich, NACHDEM  Sie
 den  auszugebenden  Text  mit  einem  Anführungszeichen
 schon  angekündigt  haben, die  entspechende  Taste  drükken, und  schon  wird  unser  Steuerzeichen  mit  einem
 inversgedruckten  Zeichen  dargestellt. Von  nun  an  wissen  Sie, daß  an  dieser  Stelle  dann  ein  Steuerzeichen
 gedruckt  wird. Die  Steuerzeichen  können  Sie  ebenso
 wie  normale  Buchstaben  überall  innerhalb  der  Anführungsstriche  einfügen. Mit  der  Zeit  werden  Sie  dann
 auch  lernen, diese  an  Ihren  Reverszeichen  zu  erkennen.
 Inverszeichen  wurden  deshalb  gewählt, da  man  sie  innerhalb  einer  PRINT-Klammer  nicht  verwenden  kann, man
 kann  trotzdem  aber  inverse  Texte  ausgeben, indem  man
 einfach  die  Steuerzeichen  für  RVS  ON  und  RVS  OFF  benutzt. Die  Zeichen  zwischen  diesen  Steuerzeichen  werden  dann  auch  invers  gedruckt.
 In  unserem  Fall  müssten  Sie  also  ein  CLR ( CLEAR
( dtsch. : lösche)= SHIFT + CLR/ HOME-Taste) einfügen. Ich  werde  in  Zukunft  bei  solchen  Steuerzeichen
 bestimmte  Ausdrücke  in  eckigen  Klammern  angeben.
 Damit  Sie  wissen  welche  Zeichen  nun  gemeint  sind. Die Programme, die  sich  ja  auf  der  Rückseite  der  Magic
 Disk  befinden, werden  dann  natürlich  immer  schon  die
 entspechenenden  Steuerzeichen  in  Reversdarstellung
 enthalten, da  wir  ja  keine " geschweiften" Texte  nachher  auf  dem  Bildschirm  haben  wollen. Diese  Ausdrücke, die  ich  verwenden  werde, werde  ich  Ihnen  dann  im
 nachfolgenden  Text  immer  noch  erläutern, damit  Sie
 wissen, was  gemeint  war.
 Nachdem  wir  uns  jetzt  wohl  zur  Genüge  in  den  ersten 2 Zeilen  unseres  Programms  verrannt  haben, wollen  wir
 uns  nun  endlich  dem  Befehl  widmen, von  dem  ich  anfangs  gesprochen  hatte. Sie  werden  ihn  schon  in  den
 Zeilen 30 und 40 bemerkt  haben. Es  ist  der  INPUT-Befehl. Übersetzen  wir  doch  einmal:
INPUT = engl. EINGEBEN, EINGABE
 Na  wunderar, wir  können  also  etwas  eingeben. Und  das
 auch  noch  wahnsinnig  komfortabel, denn  Sie  brauchen
 lediglich  dem  INPUT-Befehl  eine  Variable  zu  geben, in
 der  er  die  Eingabe  ablegen  soll  und  schon  weiß  unser
 Programm  genauer, was  sein  Benutzer  von  ihm  will.
 Sehen  wir  uns  die  Syntax  einmal  genauer  an:
30 INPUT" Radius " ; r 
 Ich  muß  hier  noch  anmerken, daß  ich  bei  diesem  Beispiel, die  im  Programm  vorkommenden  Steuerzeichen
 weggelassen  habe. Es  ist  dort  von [2 DOWN] die  Rede, womit  Sie  aufgefordert  sind,2 mal  die  Taste " Cursor
 runter" zu  drücken.
 Wie  Sie  an  den  Steuerzeichen  und  auch  an  den  Anführungsstrichen  erkennen  können, kann  man  auch  bei  IN-PUT  einen  Text  angeben, der  vor  Ausführung  der  eigentlichen  Eingabe  ausgegeben  werden  soll. Hinter
 einem  Semikolon ( oder  Strichpunkt - ;) wird  dann
 noch  der  Name  einer  Variablen  angehängt, in  unserem
 Fall " r" für  den  Radius. Probieren  Sie  doch  einmal
 obige  Zeile  als  Programm  aus.
 Sie  MÜSSEN  übrigens  unbedingt  den  INPUT-Befehl  im
 Programm  verwenden, da  es  vom  Direktmodus  aus  zu  Fehlern  kommen  kann, da  der  INPUT-Befehl  im  Direktmodus
 keinen  Sinn  hat. Deshalb  haben  die  Programmierer  von
 BASIC 2 .0 sich  gesagt, daß  die  Benutzung  dieses  Befehls  im  Direktmodus  nicht  erlaubt  sein  darf  und  des- halb  mit  einer  Fehlermeldung  quittiert  wird.
 Sie  sehen, wenn  Sie  alles  richtig  eingegeben  haben, nun  folgendes  auf  dem  Bildschirm  :
 Radius  ?
 und  einem  blinkenden  Cursor  hinter  dem  Fragezeichen.
 Sie  sind  nun  dazu  aufgefordert  einen  Wert  für  den
 Radius  einzugeben. Tun  Sie  dies  also. Geben  Sie  doch
 beispielsweise  einmal 3 .25 ein:
 Radius  ?3 .25
 und  drücken  Sie  die  Return-Taste. Das  Programm  endet
 nun, vorausgesetzt, Sie  hatten  auch  wirklich  nur  diese  eine  Zeile  im  Speicher  stehen. Geben  Sie  doch
 jetzt  einmal  im  Direktmodus:
 print  r 
 ein. Was  sehen  Sie? Es  erscheint  der  Zahlwert 3 .25 auf  dem  Bildschirm! Genau  Ihre  Eingabe, die  Sie  soeben  taten. Na  ist  ja  entzückend - würde  Kojak, lollilutschend, jetzt  sagen. Merken  Sie  was  INPUT  tat? Es
 hat  Ihre  Eingabe  gleich  einer  Variablenwertzuweisung, der  Variable " r" zugeordnet  und  in  ihr  gespeichert! Dies  geht  sogar  noch  weiter! Sie  dürfen  sogar
 Strings  und  Integers  benutzen, um  Eingaben  in  Variablen  ablegen  zu  können. Ein  solches  Programm  wäre
 also  auch  denkbar:
10 input" Wie  heissen  Sie  bitte " ; n$20 input" Und  wie  alt  sind  Sie " ; a%30 print" Sie  heissen " ; n$ ;" und  sind " a%" Jahre  alt."
 Sie  sehen, hier  benutzen  wir  einen  String  n$( für
 Name) und  eine  Integervariable  a%( für  Alter) . Den
 Integer  können  wir  bedenkenlos  anwenden, da  ja  Alter
 im  allgemeinen  mit  ganzen  Zahlen  angegeben  wird.
 Vielleicht  ist  Ihnen  allerdings  etwas  aufgefallen:
 Obwohl  wir  KEIN  Fragezeichen  in  unserem  Text  stehen
 hatten, erschien  doch  eins  auf  dem  Bildschirm. Wie
 denn  das? Nun, INPUT  druckt  grundsätzlich  immer  ein
 Fragezeichen  am  Ende  seines  Textes  aus, da  ja  nach
 etwas  gefragt  wird, und  somit  dieses  Fragezeichen
 auch  berechtigt  ist. Es  wird  vielleicht  Fälle  geben, in  denen  es  Sie  stören  wird, da  es  nicht  in  den  Kontext  der  Frage  passt, doch  werden  wir  später  einmal
 behandeln, wie  man  es  abschalten  kann.
 Im  Übrigen  brauchen  Sie  auch  nicht  unbedingt  einen
 Text  mit  INPUT  auszugeben, Sie  können  dies  auch  unterdrücken, indem  Sie  die  Anführungsstriche  und  das
 Semikolon  einfach  weglassen  und  den  Variablennamen
 einfach  anhängen. Also  so  beispielsweise:
10 input a$ 20 input a 30 input xx%
 Ebenfalls  ist  es  möglich, mehrere  Eingaben  gleichzeitig  aufzunehmen. Ich  finde  diese  Methode  allerdings
 sehr  unbequem, und  außerdem  gefällt  es  mir  getrennt
 besser, doch  möglich  wäre  auch  dies:
10 input " Koordinaten ( X/ Y)" ; x, y 
 Sie  können  hier  also  gleich  mehrere  Werte  abfragen, die  allerdings  mit  einem  Komma  voneinander  getrennt
 sein  sollten. Jetzt  wissen  Sie  auch, wofür  das  Komma
 reserviert  ist, da  wir  ja  gesagt  hatten, daß  das  Dezimalkomma  bei  Floatvariablen  immer  einem  Punkt  entspricht. Die  Eingabe  müßte  dann  so  aussehen:
 Koordinaten ( X/ Y) ?22 .3,10
 Den  Variablen  x  und  y  wären  dann  folgende  Werte  zugeordnet  worden:
x=22.3 y=10
 Leider  muß  ich  nun  an  dieser  Stelle  abbrechen, um
 keinen  Informationsstau  bei  Ihnen  hervorzurufen. Versuchen  Sie  erst  einmal  die  eben  erkannten  neuen  Befehle  kennenzulernen. Sie  können  sich  ja  auch  einmal
 das  gesamte  Zylinderberechnungsprogramm  auf  der  Rückseite  dieser  Magic  Disk 64 ansehen. Nächsten  Monat werde  ich  es  dann  auf  jeden  Fall  zu  Ende  kommentieren. Des  weiteren  wollen  wir  uns  dann  mit  der  Schleifenprogrammierung  und  den  Entscheidungsbefehlen ( und
- operatoren) widmen.
 Bis  dahin  wünsche  ich  Ihnen  weiterhin  ein  allzeit
" Gut  Hack",
                                      Ihr Uli Basters
G