Magic Disk 64

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

Eine andere Anwendungsweise wäre vielleicht die Möglichkeit, ein Programm in Form von ASCII-Zeichen in einem File zu speichern, um es, zum Beispiel mit Hilfe eines Terminalprogramms, in eine Mailbox zu schicken. In diesem Fall müßten Sie nur ein sequentielles File zum Schreiben öffnen, mit CMD die Ausgabe auf dieses File umleiten und das Programm dann LISTen.
Eines wäre jedoch noch zu beachten. Damit Sie nämlich wieder aus dem CMD-Befehl herauskommen, um dann die Ausgabe wieder auf den Bildschirm zu leiten, müssen Sie einen einfachen PRINT#- Befehl nachschieben, ohne Parameter, etwa so:
PRINT#1 Wobei hier anstelle der "1" auch jede andere Zahl stehen könnte, je nachdem, welche Filenummer Sie vorher beim OPEN-Befehl benutzt hatten, auf dessen geöff- neten Kanal Sie dann die Ausgabe umleiteten.
Anschließend sollte man den Kanal auch noch schließen, also:
CLOSE 1 : REM ( je nach Filenummer) Damit hätten wir das Thema Peripherie abgeschlossen. Ich muß Ihnen nun noch etwas über Variablen erzählen. Wie wir diese handhaben und vor allem, wie wir deren Namen wählen, hatten wir ja schon im 1 . und 2 . Teil dieses Kurses geklärt.
Es gibt allerdings noch eine weitere Art Variablen zu benutzen, nämlich durch die Definition von sogenannten Variablenfeldern. Dies klingt vielleicht etwas merkwürdig, doch werden Sie gleich verstehen, was damit geimeint ist.
Ein Feld, oder eine Fläche, hat ja, wie Sie vielleicht aus dem Geometrieunterricht noch wissen, zwei Ausdehnungen.
Zum einen die Länge und zum anderen die Breite. Man sagt auch " ein Feld hat zwei Dimensionen" . Es ist also ein Objekt der Zweiten Dimension. Ebenso gibt es eine Erste Dimension, die alle Strecken beinhaltet. Diese haben nur eine einzige Ausdehnung, nämlich die Länge.
Diesen Begriff der Dimension kann man nun auch auf Variablen übertragen. Es gibt nämlich in BASIC die Möglichkeit, mehrere Variablen mit dem gleichen Namen anzulegen, die alle jedoch voneinander unterschieden werden, indem man ihnen einen sogenannten Index gibt. Das heißt, daß jeder Variable eine bestimmte Zahl nachgestellt wird, die eine ganz bestimmte Variable darstellt. Anwendungsgebiete gibt es hierfür wie Sand am Meer. Angenommen, Sie möchten ein Programm schreiben, daß alle Adressen Ihrer Bekannten und Verwandten speichert. Gehen wir einmal davon aus, daß dies maximal 100 bis 200 an der Zahl sind. Möchten Sie nun alle diese Namen in " norma- len" Variablen speichern, so würden Sie jedesmal einen neuen Variablennamen heraussuchen müssen, damit BASIC diese voneinander unterscheiden kann. Stellen Sie sich einmal das Chaos vor, daß Sie dann in einem Programm hätten.200 Variablen, von denen Sie nicht mehr genau wissen was zu wem gehört. Wenn man davon ausgeht, daß Sie vielleicht zu jedem Namen auch noch Straße, Hausnummer, Wohnort und Telefonnummer speichern wollen, dann müßte Herr Müller aus der Bahnhofstaße 37 in 8000 München und der Telefonnummer 089/12345678 etwa in folgenden Variablen verteilt werden :

AX$="Herr Mueller"                      
FR$="Bahnhofstraße"                     
KL=37                                   
OG=8000                                 
TA$="Muenchen"                          
XD$="089/12345678"                      

Sie sehen also, wir haben hier wahllos verteilte Variablen vor uns, die nichts über ihren Inhalt aussagen, da jeder nur erdenkliche Variablenname genutzt werden muß. Stellen Sie sich doch nur die meterlangen Listings von IF-Abfragen vor, die man machen müßte, um eine ganz bestimmte Adresse herauszufinden. Außerdem wüßte man noch nicht einmal welche Variablen zu einer Adresse gehören. Deshalb gibt es die Feldvariablen. Sie sollen hier eine Abhilfe schaffen. Auf diese Art und Weise können nämlich beispielsweise alle Namen in einem Variablennamen zusammengeafßt werden, oder alle Straßennamen, oder alle Städtenamen. . .
Doch wie wirds gemacht? Dazu wollen wir jetzt kommen. Zuerst müssen wir eine Variable " dimensionieren" . Im Klartext heißt das, daß wir einen Namen für das Variablenfeld und die maximale Anzahl der in ihm zu speichernden Daten, festlegen müssen.
In unserem Fall einer Adressverwaltung nehmen wir ( beispielsweise) den Variablennamen NA$ für " Name" . Die Dimensionierung wird mit einem eigenen BASIC-Befehl durchgeführt, dem DIM-Befehl. Bei diesem wird zuerst der Name des Variablenfeldes angegeben und anschließend seine maximale Ausdehnung. Wir wollen also 200 Stringvariablen im Feld NA$ speichern. Deshald also diese Anweisung:
DIM NA$(200) Schon wäre unser Feld dimensioniert. Wir haben hier ein eindimensionales Feld vor uns, dem DIM-Befehl wird zuerst der Feldname und dann die maximale Anzahl aller Datenelemente, in Klammern gesetzt, nachgestellt. In dem Feld NA$ können wir nun also 200 Variablen unterbringen.
Um jetzt ein einzelnes dieser 200 Datenelemente adressieren zu können, müssen wir seine Indexnummer, ebenfalls in Klammern gesetzt, einfach dem Feldnamen nachstellen. Diese Datenelemente eines Feldes werden übrigens genauso gehandhabt, wie die Variablenart in der sie dimensioniert wurden. Wir haben hier einen Stringvariablennamen angegeben, also haben wir auch 200 Stringvariablen vordefiniert. Demnach sind auch die Zuweisungen ausgelegt. Wie bei Strings auch geben Sie den obigen " Variablennamen" an und weisen ihm mit Hilfe des "="- Zeichens eine Zeichenkette zu. Etwa so:
NA$(0)=" HERR MUELLER" Hier haben wir dem 0 . Datenelement den String " Herr Mueller" zugewiesen. Sie erinnern sich ja : der Computer fängt immer bei 0 an zu zählen, dementsprechend ist das 0 . Datenelement der erste Eintrag in unserem Datenfeld. Doch wir müssen hier keineswegs einer numerischen Reihenfolge der Variablenzuweisung vor- gehen. Vielmehr können Sie ebenfalls auch Zuweisungen von Werten bei numerisch größeren Variablen vornehmen. Sie haben hierbei also freie Hand. Wie wärs, wenn wir " Herrn Schultze" im 134 . Datenelement unterbrächten, kein Problem:
NA$(134)=" SCHULTZE" Doch die eigentliche Stärke der Feldvariablen liegt nicht darin, daß man sie in einem Namen zusammenfassen kann, sondern vielmehr, daß man mit Hilfe einer Schleife gezielt ein Feld nach einem bestimmten Datensatz durchsuchen kann, ohne dabei großen Programmieraufwand leisten zu müssen. Angenommen wir wollten Herrn Schultze in unserem Datenfeld wiederfinden, dann wäre folgendes Programm schnell und einfach geschrieben:

100 FOR I=0 TO 200                      
110 IF NA$(I)="HERR SCHULTZE" THEN 130  
120 NEXT                                
130 PRINT"HERR  SCHULTZE STEHT IM DATENS
ATZ NR.";I                              

Wenn wir nun die anderen Daten ebenfalls so anlegen, daß wir 200 Datenelemente darin speichern können und den einzelnen Feldelementen mit dem Index 134 ebenfalls die zu Herrn Schultze gehörigen Daten zuordnen, so können wir ganz einfach mit Hilfe der Variablen I auf alle Datenelemente der Adresse von ihm zugreifen, etwa so:

200 PRINT NA$(I) :REM NAME              
210 PRINT SR$(I) :REM STRASSE           
220 PRINT NR(I)  :REM HAUSNUMMER        
230 PRINT PL(I),OR$(I) :REM PLZ UND ORT 
240 PRINT TE$(I) :REM TELEFONNUMMER     

Und schon wäre die gesamte Adresse von Herrn Schultze ausgedruckt, da wir ja vorher die einzelnen Elemente ebenfalls den Feldelementen mit der Nummer 134 zuweisen wollten. So einfach ist es dann beispielsweise einen bestimmten Datensatz zu finden. Auch beim Abspeichern haben wir keine Probleme, wir brauchen lediglich eine Schleife zu programmieren, die alle Datenelemente des Feldes von 0 bis 200 in ein WRITE-File schreibt.
Wie Sie sahen, hatten wir ein eindimensionales Feld dimensioniert. Es hatte also nur EINE Ausdehnung. Man kann dies jedoch beliebig erweitern. Wie wäre es denn mit einem zwei-, drei-, oder gar vierdimensionalen Feld? Bitte:

DIM A$(1000,10)                         
DIM B%(10,3)                            
DIM C(5,5,5)                            

Mit diesen Dimensionierungen haben wir nun also veranlaßt, daß beispielsweise ein Feld mit dem Namen A$ für 1000 Datenelemente dimensioniert wurde, von denen jedes einzelne wiederum 10 weitere Datennelemente aufnehmen kann. Diese können Sie dann folgendermaßen ansprechen:
PRINT A$(523,3)

Valid HTML 4.0 Transitional Valid CSS!