Logo: Geos Online Print Archiv
G.O.P.A. - Geos Online Print Archiv
16.04.2024 Archiv  #  Recherche  #  Links  #  Kontakt  #  Gästebuch  #  Impressum

Index
Register
Login

Die Anzeige des Archivs erfolgt grafisch. Ändern

GeoCom Workshop #2

Autor: Olaf Dzwiza

Einführung in die Programmierung

Nach der Einführung in GeoCom in der letzten Ausgabe soll diesmal am Beispiel eines kleinen Rechenprogramms mit Realzahlen die Verwendung von Variablen und Vergleichen demonstriert werden.

Für unser Programm brauchen wir zunächst den Deklarationsteil:

   NAME "Rechenbeispiel"
   CLASS "Workshop-PRG  V1"
   AUTHOR "Olaf Dzwiza"

Wir werden drei Realzahlen verwenden, die ganz einfach mal mit a, b und c bezeichnet werden. Die entsprechende Definition muß also lauten:

   REALVAR a,b,c

Diese Zeile folgt unmittelbar auf obige Angaben. Beachtet für weitere Programme bitte, das in einer Zeile maximal 127 Zeichen, im Definitionsteil maximal zwölf Werte hinter einer Typbezeichnung stehen dürfen. Wichtig ist es ferner, daß Befehlswörter immer groß, Variablen und Label immer klein geschrieben werden! Durch diese Vereinbarungen, die Anfangs lustig erscheinen, nimmt der Programmierer dem Compiler ein gewisses Stück Arbeit ab und sorgt somit für eine schnelle Übersetzung.

Doch nun zum eigentlichen Programm: Zwei Realzahlen (5.41 und 1.41) sollen voneinander subtrahiert werden, daß Ergebnis (4) wird in einer dritten Variablen gespeichert und mit der Integerzahl 4 verglichen. Dazu müssen wir den Variablen zunächst die gewünschten Werte zuordnen:

   a=5.41
   b=1.41

Jetzt wollen wir unsere Aktionen am Bildschirm anzeigen, dazu ist es sinnvoll, diesen zunächst zu löschen (CLS) und unbedingt erforderlich, die Ausgabeposition (SETPOS x,y) anzugeben:

   CLS 0
   SETPOS 10,10 : PRINT"Realwerte:"
   SETPOS 5,20 : PRINT "a=5.41"
   SETPOS 5,30 : PRINT "b=1.41"
   SETPOS 5,45 : PRINT "Berechnet wird: c=a-b"

Die Berechnung erfolgt sogleich:

   c=a-b

Jetzt sind wir in der Lage, daß Ergebnis, also den Wert der Real-Variablen c auszugeben. Der PRINT-Befehl kann jedoch nur Strings anzeigen, also muß das Ergebnis in einen solchen gewandelt werden:

   SETPOS 5,60 : PRINT "Ergebnis: ";: PRINT (STR c)

Zu erwarten ist das Ergebnis 4. Durch einen Vergleich wollen wir das überprüfen:

   IF c=4
    SETPOS 10,80
    PRINT "Richtig!"
   ENDIF

Jetzt lassen wir das Bild noch kurz auf dem Screen stehen und kehren dann zum Desktop zurück:

   WAIT 200
   END

Das END darf auf keinen Fall vergessen werden, sonst läuft das compilierte Programm über das Ende hinaus und stürzt ab. Findet der Compiler den Befehl END, setzt er die Routinen zum Zurückkehren zum DeskTop ein.
Wir können den Compilierungsvorgang starten und...

FEHLER! (siehe Bild unten)

Das Programm zeigt beim if-Befehl eindeutig, wie peinlich genau auf die richtige Klammersetzung und Typenvereinbarung zu achten ist...

IF c=4 ... funktioniert nicht:

Das Argument muß in Klammern stehen, ansonsten wird der IF-Befehl als nicht abgeschlossen erkannt (Meldung 3, 4):

   IF (c=4) ...

Zur Klammerregelung eine kleine Anmerkung: Es kann immer nur der Inhalt von zwei Variablen bzw. der Wert von zwei Zahlen miteinander verknüpft werden. Diese sind durch Klammern einzuschließen. Sollen mehr als zwei Zahlen verrechnet werden, z. B. d=a+b-c, muß durch Klammern eine Reihenfolge angegeben werden:
d=((a+b)-c). (siehe Meldung 1)

Meldung 2 weißt uns darauf hin, daß c eine Realvariable, 4 jedoch ein Bytewert ist, verschiedene Typen können nicht verglichen werden. Wir müssen also dafür sorgen, daß Typenüberschneidungen nicht auftreten. Dafür werden leistungsfähige Befehle zur Wandlung der Typen zur Verfügung gestellt.

In unserem Fall muß die Realvariable in eine Bytevariable gewandelt werden. Dies geht nur mit einem kleinen Umweg:
c zunächst in eine Integervariable zu wandeln...

   IF ((INT c)=4)...

...wobei zu beachten ist, daß GeoCom die Funktion immer in Klammern erwartet, das Argument wird direkt angeschlossen (INT c). Die äußeren Klammern sind für den IF-Befehl die Parametereingrenzung. Jetzt muß die Integervariable nur noch in eine Bytezahl gewandelt werden.

Da 4 im Wertebereich von 0 bis 255 liegt, ist nur das LOW-Byte der Integerzahl (INT c) gesetzt. Das High-Byte steht auf Null. Wir brauchen also bloß das LOW-Byte herausfiltern:
(LOW parameter) ist die vorgegebene Syntax. Der Parameter lautet (INT c), also erhalten wir:

   IF ((LOW(INT c))=4) ...

Ein Compilierungsversuch zeigt, daß es immer noch nicht geht. Ein einzelnes Gleichheitszeichen interpretiert der Compiler immer als Zuweisung, ein Vergleich wird durch ein doppeltes Gleichheitszeichen dargestellt:

   IF((LOW(INT c))==4) ...

Jetzt läuft das Programm wie geplant!

Zunächst erscheint es etwas viel Aufwand für eine solche kleine Routine. Bei komplexeren Programmen werden die Variablen sinnvoller gewählt, so daß die hier beschriebenen Probleme nicht auftauchen können. Absicht war es ja auch nur zu zeigen, daß bei der Programmierung peinlich genau auf die deklarieren Variablentypen geachtet werden muß und das der Compiler bestimmte Anforderungen an Klammerregeln stellt.

Beim nächsten Mal geht es um Grafikbefehle und die Problematik der unterschiedlichen GEOS-Systeme. Viel Spaß beim Programmieren

Fehler im QuellcodeZOOM

Olaf Dzwiza

 

   Produkt Info

     Name:              GeoCom
     lauffähig unter:   Geos 64 & 128 ab v2.0
     Voraussetzung:     Geos 64 oder 128 ab v 2.0
     Preis:             59,- DM
     Bestelladresse:    GUC Dorsten

 

Wann GeoCom lieferbar ist, kann z. Z. noch nicht gesagt werden. Siehe Info auf S. 15!

 




Dieser Artikel ist Bestandteil von:

Ausgabe 34

! - - - - - M I C R O F I L M - - - - - ! | DOS Rechner: Virenschutz ! | Neu: CompuServe & GWE2 ! | Editorial | Commodore und das Ende, Geos und die Zukunft | Regio Hamburg | Berichte aus den Regio's ? | Jahreshaupttreffen | Treffen der Regio Leiter ? | Geos Sonderheft #1 | Test GeoKeys | Test Bildschirm-Schoner Spezial | ReBoot-System im Test | Test: PD & Shareware Programme | GeoBasic Kurs | CLI 128 V3.0 Beta | GeoCom Workshop #2 | Neues von der 64/128 GeoThek (Teil 3) | Data-Switchbox für den Userport | Peripheral Performance Hardware & Sammelbestellung BBU | Flash 8 ? | Floppy 1581 | PD Disk für GWE2 | GeoPublish | Es tut sich etwas ... | Update Patch v2.01 | SDK 2.0 | Aktuelle Kurz-Infos | GEOS und Novell DOS 7 | Druckertest: Seikosha SpeedJet 200 | Einsatzempfehlungen aller vorhandenen PC/GEOS Programme | Unbekannte Schrift ? | Druckzeit zu lang? | Drucken auf fremden Druckern? | Scannen, Importieren und Drucken | Test: Linker PCC64 | GUP Info


GeoCom Workshop

GeoCom Workshop #1 | GeoCom Workshop #2 | GeoCom Workshop #3 | GeoCom Workshop #4 | GeoCom Workshop #5 | GeoCom Workshop #6 - Etwas über Hilfsmittel und Drucker | GeoCom Workshop #7


Kurzlink hierhin: http://geos-printarchiv.de/1866


Letzte Änderung am 01.11.2019