^3Ŀ ^3^0The Real Adok's Way to QBASIC^3 ^3^0 A new Method Step by Step ^3 ^3 ^3^4 ^3 ^3^4 ^3 ^3^4 ^3 ^3 Willkommen zu The Real Adok's Way to QBASIC, Teil 8! Ich habe mir fr diese Folge vorgenommen, euch die verschiedenen Datentypen in QBasic genauer vorzu- stellen. Wenn man die Datentypen mit der Mathematik vergleicht, so entsprechen sie am ehesten den Zahlenmengen. Das heit, da die Datentypen sozusagen die Grund- mengen fr die Variablen festlegen. Bis jetzt sind uns zwei Datentypen bekannt: Fliekommazahlen und Zeichenketten. Der Datentyp der Fliekomma- zahlen, wie wir sie kennen, heit ^4SINGLE^5. Wie der Name sagt, hat er nur eine begrenzte Anzahl an Vor- und Nachkommastellen. Eine hhere Anzahl von Stellen hat der Datentyp ^4DOUBLE^5, welcher dafr mehr Speicherplatz bentigt. Beide Fliekommazahlendatentypen haben jedoch den Nachteil, da sie sehr langsam sind, weil der Hauptprozessor des Computers intern keine Fliekommazahlen ver- arbeiten kann und sie deshalb vorher von QBasic umgewandelt werden mssen. Man nennt dies Floating-Point-Emulation. In den meisten Computern sind heutzutage zwar Coprozessoren eingebaut. Sie werden von QBasic jedoch nicht untersttzt. Deshalb gibt es mehrere Ganzzahl-Datentypen. Einer von ihnen, ^4INTEGER^5, belegt 2 Byte Arbeitsspeicherplatz (pro Variable, versteht sich) und kann ganzzahlige Werte von -32768 bis +32767 annehmen. ^4LONG^5 belegt doppelt soviel Speicherplatz und kann -(2 hoch 32) bis +(2 hoch 32-1) annehmen. Der Zeichenkettendatentyp ^4STRING^5 besteht im Grunde genommen auch nur aus mehreren Integers, denn die einzelnen Zeichen werden als Zahlen, und zwar im sogenannten ASCII-Code, gespeichert. Wenn man es ganz genau nimmt, besteht ein String aus mehreren Bytes (Ganzzahlen von 0 bis 255, gibt's nur in Power Basic). Will man nun eine Variable mit einem bestimmten Datentyp anlegen, mu man den Befehl ^4DIM^5 anwenden. Seine Syntax lautet: ^0DIM Variable AS Datentyp^5 Wenn man eine Variable als String definiert, braucht man bei ihr nicht mehr das Dollarzeichen schreiben! Praktisch, oder? Bei Strings gibt es noch eine Besonderheit. Normalerweise ist die Lnge der Strings variabel. Der String kann dann eine Lnge von 0 bis 32768 Zeichen haben. Mit DIM kann man aber auch Strings mit einer festen Lnge definieren. Wird eine zu lange Zeichenkette zugewiesen, so werden die berflssigen Zeichen einfach abgeschnitten. Wird eine zu kurze Zeichenkette zugewiesen, so wird der Rest mit Leerzeichen ausgefllt. Beispiel: ^0'String-Demo ^0DIM Zeichenkette AS STRING * 8 'String mit fester Lnge von 8 Zeichen ^0SCREEN 12 'Bildschirm ausfllen ^0PAINT (320, 200), 9 ^0Zeichenkette = "Hallo! Wie geht's?" 'Erster Versuch ^0PRINT Zeichenkette ^0PRINT ^0Zeichenkette = "Hi!" 'Zweiter Versuch ^0PRINT Zeichenkette Mit dem DIM-Befehl lassen sich auch sogenannte Felder (englisch: ^4Arrays^5) definieren. Die Anweisung ^0DIM FeldName(1 TO x) AS INTEGER^5 erzeugt ein Feld, das aus x Integer-Variablen besteht. Jede dieser Variablen lt sich dann einzeln ansprechen, als ob sie nicht in einem Feld stnde. Will man beispiels- weise der fnften Variablen des Feldes GanzZahl den Wert 10 zuweisen, so schreibt man einfach ^0GanzZahl(5) = 10 Damit das Ganze verstndlich wird, hier ein Beispielprogramm: ^0'Array-Demo ^0DIM Summand(1 TO 3) AS SINGLE ^0DIM Summe AS SINGLE ^0DIM Zaehler AS INTEGER ^0COLOR 14, 1 ^0CLS ^0FOR Zaehler = 1 TO 3 ^0 PRINT "Summand"; Zaehler; ^0 INPUT Summand(Zaehler) ^0 Summe = Summe + Summand(Zaehler) ^0NEXT ^0PRINT ^0PRINT Summand(1); "+"; Summand(2); "+"; Summand(3); "="; Summe Da dieses Beispielprogramm etwas komplizierter ist als die anderen, wollen wir es Zeile fr Zeile besprechen. In der ^13. Zeile^5 wird ein Single-Feld mit drei Elementen namens Summand definiert. In der 4. und der 5. Zeile werden zwei weitere Variablen definiert. Anschlieend werden die Farben gewhlt und der Bildschirm gelscht. In der ^110. Zeile^5 steht nun der Anfang einer FOR/NEXT-Schleife. Zuerst wird ausgegeben, wievielter Summand eingegeben werden soll. Danach mu der Benutzer diesen Summand eingeben. Ihr merkt, da man auch Variablen als "Arrayindex" verwenden kann. Bisher verwendeten wir dazu nur Zahlen. Anschlieend wird der eingegebene Summand gleich zu der Summe addiert. Man knnte zwar auch nach- trglich alle drei Summanden zusammenzhlen und der Variablen Summe zuweisen, doch das wrde bei vielen Summanden sehr lange dauern. Bei nur drei Summanden, wie wir in diesem Beispiel verwenden, ist der Geschwindigkeitsverlust zwar nicht bemerkbar, aber trotzdem sollten wir es nicht vernachlssigen, unsere Programme etwas zu optimieren. Eine Spezialitt! Wenn man das Optimieren vernachlssigt, entstehen solche Programme wie WinWord, die zwar vielleicht nicht schlecht, aber langsam sind. Einmal abgesehen von der Tatsache, da in Winword viele Bugs enthalten sind... Spter wollen wir ja nicht nur Programme zum Addieren dreier Summanden schreiben, sondern auch solche Programme, mit denen man Space-Shuttles starten, steuern und landen lassen kann (in der Wirklichkeit, nicht in blden Spielen). Nach der Schleife wird die Rechnung auf dem Bildschirm ausgegeben, aber das ist sowieso klar. Zweidimensionale Arrays werden mit ^0DIM Var (1 TO dimension1, 1 TO dimension2)^5, n-dimensionale mit... usw. definiert. Erklrt sich ja von selbst. Wie wir bereits wissen, ist der Datentyp einer Variablen, wenn sie vorher nicht definiert wurde, automatisch SINGLE. Das knnen wir aber auch ndern. Wenn wir am Anfang eines Programms ^4DEFINT A-Z^5 schreiben, sind die nicht definierten Variablen automatisch vom Typ Integer. Es gibt auch DEFLNG (Long), DEFDBL (Double), DEFSTR (String) und natrlich DEFSNG (Single). Wie sich wohl jeder selbst denken kann, ist DEFSNG Standard. Lange keine Hausaufgaben mehr gehabt! Nun, mit den in den letzten Folgen erlernten Befehlen knnen wir unser Rechenprogramm aus Folge 3 ausbauen. Verndert es so, da ^1- ^0die Zahlen in einem Array gespeichert werden, ^1- ^0das Programm den Benutzer nach der Berechnung fragt, ob er zwei neue Zahlen ^0eingeben will (und auch dementsprechend handelt), ^1- ^0das Ganze mit einigen Grafiken aufgelockert wird. Wem es auf die strukturierte Programmierung weniger ankommt, kann man, anstatt die Variablen zu definieren, sie mit einem Krzel versehen. Genauso, wie ein angehngtes Dollarzeichen eine Stringvariable kennzeichnet, gibt es auch noch andere Kennzeichen: ^4!^5 entspricht ^4SINGLE ^5 Das Rufzeichen steht fr einfache Fliekommazahlen... ^4#^5 steht fr ^4DOUBLE ^5 ...das amerikanische Nummernzeichen fr mehrfache... ^4%^5 ist gleich ^4INTEGER^5 ...Prozente gibt's bei Ganzzahlen... ^4&^5 bedeutet ^4LONG ^5 ...und das kaufmnnische Und bei langen Ganzzahlen. Fertig mit dieser Folge! ^1Euer Adok.