Magic Disk 64

home to index to text: MD8902-KURS-BASIC_KURS_TEIL_2-1_:_VON_ADAM_UND_EVA...(TEIL_2)-7.1.txt
                  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                                                    

Valid HTML 4.0 Transitional Valid CSS!