4. Grundlagen Inhalt | ABS  -  CINT


Kapitel 5-1
Der Befehlssatz

&   bis   @



    
 & 
Typ: Operator
Syntax:  &{<Variable>|<Funktion>} 
Erklärung:  Der Adressoperator ermittelt die Adresse einer Variablen, eines Feldes oder einer Funktion.

An dieser Stelle steht: 
-bei numerischen Einzelvariablen der Wert der Variablen 
-bei Stringeinzelvariablen ein 4 Byte Pointer auf den eigentlichen String gefolgt von 4 Byte Stringlänge 
-bei numerischen Feldern ein Pointer auf das eigentliche Feld 
-bei Stringfeldern ein Pointer auf ein Feld, das die Pointer auf die Elemente des Stringfeldes und deren Längen enthält 
-bei Funktionen ein Pointer auf die Funktion 

Um auf die Variable zuzugreifen, können Sie auch den Dereferenz-Operator "*" verwenden. 
Der Adressoperator kann insbesondere benutzt werden, um Zeiger auf Felder oder Funktionen an Prozeduren bzw. Funktionen zu übergeben. Somit können Felder lokal bearbeitet und Funktionen indirekt aufgerufen werden.

"*" greift auf ein Objekt zu (dereferenziert es). Direkt hinter dem Operator muß die Zeigervariable folgen. Welcher Typ gemeint ist, muß auch hier, wie bei einer normalen Variablen, noch mit einem Postfix angegeben werden. Speziell wenn es sich um einen Zeiger auf Funktionen handelt, ruft "*" die Funktion auf, auf die die Zeigervariable zeigt.

Hinweis: Der Adressoperator ist sehr wichtig, wenn Sie direkte MAC_OS-Aufrufe machen wollen. Bei vielen dieser Funktionen müssen nämlich Pointer auf Variablen übergeben werden, in denen das MacOS dann die Ergebnisse zurückliefert. Achten Sie dabei unbedingt auf den richtigen Typ, eine automatische Anpassung wie beim OmikronBasic erfolgt beim MacOS nicht. 

Achtung: Direktes Verwenden oder gar Manipulieren des Zeigers erfordert eine genaue Kenntnis der Speicherverwaltung des Omikron Basics. 
Beispiel:
    Text$="Dies ist ein Beispieltext"  
    Ptr_Text=&Text$  
    PRINT *Ptr_Text$:'Das $-Zeichen ist wichtig! 
    Sum=0  
    Ptr_Sum=&Sum  
    N=10  
    FOR I= 1 TO N  
     *Ptr_Sum=*Ptr_Sum+I*I  
    NEXT I  
    PRINT Sum
Ergebnis: 
    Dies ist ein Beispieltext 
    385
siehe auch:  VARPTR     *  (als Pointeroperator)
 


 
(,) 
Typ: Operator 
Syntax:  (<Ausdruck>
Erklärung:  Ein in Klammern gefaßter Ausdruck hat immer die höchste Priorität und wird vor allen anderen berechnet. Klammerausdrücke können beliebig geschachtelt werden. Man kann die Klammer auch als eine Funktion auffassen, die das Ergebnis von <Ausdruck> als Funtionswert zurückliefert.
Beispiel: PRINT 3*5+7 
PRINT 3*(5+7)
Ergebnis:   22 
 36
siehe auch:  Priorität der Operatoren 
   
 


 
* (als Pointeroperator) 
Typ: Operator 
Syntax:  *{<Variable>|<Funktion>} 
Erklärung:  Um den Pointeroperator verwenden zu können, müssen Sie zunächst mit dem Adressoperator "&" die Adresse eines Objekts (Variable, Feld oder Funktion) ermitteln. Der Ausdruck 'Ptr_Str_Cmp=&FN Cmp(A$, B$)' speichert in der Variablen 'Ptr_Str_Cmp' einen Zeiger auf die Funktion 'FN Cmp(,)', also deren Adresse. Mit diesem Zeiger kann die Funktion nun indirekt aufgerufen werden (z.b. 'PRINT FN *Ptr_Str_Cmp("A","B")'). 
Solche Funktionszeiger können ebenso wie Zeiger auf ein Feld an Prozeduren übergeben werden. Mit oberem Beispiel wäre eine Sortier-Prozedur denkbar, die zum Stringvergleich lediglich einen Funktionszeiger übergeben bekommt. Abhängig von der Vergleichsfunktion wird nach ganz unterschiedlichen Kriterien sortiert (z.B. aufsteigend, absteigend oder groß=klein ...) 

Wichtig: Achten Sie auf die genaue Übereinstimmung der Parameterlisten von Funktionen, die über Zeiger aufgerufen werden. Das Compilat kann zur Laufzeit keine Typanpassung vornehmen, da nicht bekannt ist auf welche Funktion der Zeiger gerade verweist. Im oberen Beispiel dürfen Sie 'FN *Ptr_To_Df_Fn' nur mit einem Double-Float als Parameter aufrufen (hier X#). Die normalerweise notwendige Konvertierung von Integer nach Double-Float kann nicht automatisch erfolgen, der Integer-Parameter würde falsch übergeben werden.
Beispiel: 'Dieses Beispiel befindet sich auch im DEMO-Ordner 
Ptr=&FN Sin2#(X#)  
PRINT "Wertetabelle von Sinusquadrat:" :PRINT 
Werte_Tab Ptr,0#,PI,0.2#  


SCREEN 1,80,80,320,400 
PRINT "Wertetabelle von Cosinusquadrat:":PRINT 
Werte_Tab &FN Cos2#(X#),0#,PI,0.2#  
REPEAT COMPILER "EVENT" UNTIL 0 
END  
  
DEF FN Sin2#(X#)= SIN(X#)* SIN(X#)  
DEF FN Cos2#(X#)= COS(X#)* COS(X#)  
DEF PROC Werte_Tab(Ptr_To_Df_Fn,Von#,Bis#,Schritt#)  
LOCAL X#  
FOR X#=Von# TO Bis# STEP Schritt#
PRINT USING "##.#;X#; USING "";TAB(5);FN *Ptr_To_Df_Fn#(X#)
'Vorsicht: Hier kann zur Laufzeit keine Typüberprüfung mehr durchgeführt werden
NEXT X#
END_PROC
Ergebnis:  Es werden 2 Fenster geöffnet und jeweils die Quadrate von Sinus und Cosinus ausgegeben. 
siehe auch:  &     VARPTR 
   
 


 
* (als Multiplikationsoperator) 
Typ: Operator 
Syntax:  {<num.Ausdruck>|<String-Ausdruck>}*<num.Ausdruck> 
Erklärung:  Der Multiplikationsoperator multipliziert den Ausdruck, der links von ihm steht, mit dem numerischen Ausdruck, der rechts von ihm steht. Auf der linken Seite kann statt des numerischen Ausdrucks auch ein String-Ausdruck eingesetzt werden. 
Beispiel: PRINT 5*7 
PRINT "Basic"*3
Ergebnis:   35 
BasicBasicBasic
siehe auch:  /         STRING$     SPACE$     SPC    MAT   *(als Pointeroperator) 
   
 


 
+ (als Vorzeichen)
Typ: Operator 
Syntax:  + <num.Ausdruck> 
Erklärung:  Der positive Vorzeichenoperator zeigt an, daß es sich bei dem numerischen Ausdruck um eine positive Zahl handelt. Der "+"-Operator wirkt wie eine Multiplikation mit 1, ändert den Wert der Zahl also nicht. Er kann daher im allgemeinen weggelassen werden. Omikron Basic verwendent bei der Ausgabe von Zahlen statt des "+"-Zeichens ein Leerzeichen. Dieses Verhalten kann mit USING aber geändert werden.
siehe auch:      -  (als Vorzeichen)
   
 


 
+ 
Typ: Operator 
Syntax:  {<num.Ausdruck> + <num.Ausdruck> | <String-Ausdruck> + <String-Ausdruck>}
Erklärung:  Der Additionsoperator addiert den Ausdruck, der links von ihm steht, zu dem Ausdruck, der rechts von ihm steht. Statt der numerischen Ausdrücke können auch String-Ausdrücke eingesetzt werden, eine Kombination von beiden ist aber nicht erlaubt.
Beispiel: PRINT 100+21 
PRINT "Omikron"+"Basic "+" Version 6" 
Ergebnis:   121 
OmikronBasic Version 6
siehe auch:  -      +  (als Vorzeichen)   MAT
   
 


 
- (als Vorzeichen)
Typ: Operator
Syntax:  - <num.Ausdruck> 
Erklärung:  Der negative Vorzeichenoperator zeigt an, daß es sich bei dem numerischen Ausdruck um eine negative Zahl handelt. Der "-"-Operator wirkt wie eine Multiplikation mit -1, negiert den Wert der Zahl also. Der Operator ist zu sich selbst invers. Eine zweimalige Anwendung erzeugt daher wieder die ursprüngliche Zahl. 
Beispiel: A=1234 
PRINT -A,-(-A+1)
Ergebnis:  -1234    1233
siehe auch:  -      +  (als Vorzeichen)
   
 

- 
Typ: Operator 
Syntax:  <num.Ausdruck> - <num.Ausdruck> 
Erklärung:  Der Subtraktionsoperator subtrahiert den Ausdruck, der rechts von ihm steht, von dem Ausdruck, der links von ihm steht. Es sind nur numerische Ausdrücke, aber keine String-Ausdrücke, erlaubt. 
siehe auch:       -   (als Vorzeichen)   MAT 
   
 


 
Typ: Operator 
Syntax:  <num.Ausdruck> / <num.Ausdruck> 
Erklärung:  Der Divisionsoperator dividiert den Ausdruck, der links von ihm steht, durch den Ausdruck, der rechts von ihm steht. Es sind nur numerische Ausdrücke, aber keine String-Ausdrücke, erlaubt. 
siehe auch:  \     *      MAT 
   
 


 
\
Typ: Operator 
Syntax:  <num.Ausdruck> \ <num.Ausdruck>
Erklärung:  Der ganzzahlige Divisionsoperator dividiert den Ausdruck, der links von ihm steht, durch den Ausdruck, der rechts von ihm steht. Es sind nur numerische Ausdrücke, aber keine String-Ausdrücke, erlaubt. Im Unterschied zu dem normalen Divisionsoperator wird als Ergebnis immer eine Integerzahl zurückgeliefert. Wenn die Division also nicht aufgeht, wird das Ergebnis auf die nächstkleinere ganze Zahl abgerundet. 
Beispiel:
    PRINT 10/4,10\4 
Ergebnis: 
     2.5    2 
siehe auch:  /     *         MOD 
   
 


 
^ 
Typ: Operator 
Syntax:  <num.Ausdruck> ^ <num.Ausdruck> 
Erklärung:  Der Potenzoperator erhebt den Ausdruck, der links von ihm steht, in die Potenz, die durch den Ausdruck gegeben ist, der rechts von ihm steht. Es sind nur numerische Ausdrücke, aber keine String-Ausdrücke, erlaubt.

Hinweis: Die Berechnung erfolgt durch eine Reihenentwicklung. Die Operation ist daher im Vergleich zu den Grundrechenarten sehr langsam. Wenn sich die Operation auch als Grundrechenart schreiben läßt, sollten Sie besser diese verwenden (z.B. X*X geht viel schneller als X^2, 1/X ist besser als X^-1, SQR(X) ist schneller als X^0.5)
siehe auch:  LOG   LN   SQR    
   
 


 
<
Typ: Operator 
Syntax:  {<num.Ausdruck> < <num.Ausdruck> | <String-Ausdruck> < <String-Ausdruck>}
Erklärung:  Der Kleineroperator vergleicht den Ausdruck, der links von ihm steht, mit dem Ausdruck, der rechts von ihm steht. Statt der numerischen Ausdrücke können auch String-Ausdrücke eingesetzt werden, eine Kombination von beiden ist aber nicht erlaubt. Das Ergebnis ist ein boolscher Wert. Ist der Ausdruck links vom Operator kleiner als der Ausdruck rechts vom Operator, so wird -1 als Ergebnis zurückgeliefert, sonst 0. 
Bei Strings erfolgt der Vergleich zeichenweise nach dem jeweiligen ASCII-Wert des Zeichens. "a" ist demnach kleiner als "b". Die Strings können auch unterschiedlich lang sein.

Hinweis: Solche Vergleiche benutzt man im allgemeinen zur Programmsteuerung mit Strukturbefehlen wie IF, WHILE, UNTIL.
siehe auch:  <=   =       >=   >    <> 
   
 


 
<= 
Typ: Operator 
Syntax:  {<num.Ausdruck> <= <num.Ausdruck> | <String-Ausdruck> <= <String-Ausdruck>}
Erklärung:  Der Kleinergleichoperator vergleicht den Ausdruck, der links von ihm steht, mit dem Ausdruck, der rechts von ihm steht. Statt der numerischen Ausdrücke können auch String-Ausdrücke eingesetzt werden, eine Kombination von beiden ist aber nicht erlaubt. Das Ergebnis ist ein boolscher Wert. Ist der Ausdruck links vom Operator kleiner als oder gleich dem Ausdruck rechts vom Operator, so wird -1 als Ergebnis zurückgeliefert, sonst 0. 
Bei Strings erfolgt der Vergleich zeichenweise nach dem jeweiligen ASCII-Wert des Zeichens. "a" ist demnach kleinergleich "b". Die Strings können auch unterschiedlich lang sein.

Hinweis: Solche Vergleiche benutzt man im allgemeinen zur Programmsteuerung mit Strukturbefehlen wie IF, WHILE, UNTIL.
siehe auch:  <    =    >=    >      <> 
   
 


 
=
Typ: Operator 
Syntax:  {<num.Ausdruck> = <num.Ausdruck> | <String-Ausdruck> = <String-Ausdruck>}
Erklärung:  Der Vergleichsoperator vergleicht den Ausdruck, der links von ihm steht, mit dem Ausdruck, der rechts von ihm steht. Statt der numerischen Ausdrücke können auch String-Ausdrücke eingesetzt werden, eine Kombination von beiden ist aber nicht erlaubt. Das Ergebnis ist ein boolscher Wert. Ist der Ausdruck links vom Operator gleich dem Ausdruck rechts vom Operator, so wird -1 als Ergebnis zurückgeliefert, sonst 0. 
Bei Strings erfolgt der Vergleich zeichenweise nach dem jeweiligen ASCII-Wert des Zeichens. "a" ist demnach gleich "a". Die Strings können auch unterschiedlich lang sein. Dann ist das Ergebnis aber immer 0.

Hinweis: Solche Vergleiche benutzt man im allgemeinen zur Programmsteuerung mit Strukturbefehlen wie IF, WHILE, UNTIL.
siehe auch:  <     <=     >=    >     <> 
   
 


 
>= 
Typ: Operator 
Syntax:  {<num.Ausdruck> >= <num.Ausdruck> | <String-Ausdruck> >= <String-Ausdruck>}
Erklärung:  Der Größergleichoperator vergleicht den Ausdruck, der links von ihm steht, mit dem Ausdruck, der rechts von ihm steht. Statt der numerischen Ausdrücke können auch String-Ausdrücke eingesetzt werden, eine Kombination von beiden ist aber nicht erlaubt. Das Ergebnis ist ein boolscher Wert. Ist der Ausdruck links vom Operator größer als oder gleich dem Ausdruck rechts vom Operator, so wird -1 als Ergebnis zurückgeliefert, sonst 0. 
Bei Strings erfolgt der Vergleich zeichenweise nach dem jeweiligen ASCII-Wert des Zeichens. "b" ist demnach größergleich "a". 

Hinweis: Solche Vergleiche benutzt man im allgemeinen zur Programmsteuerung mit Strukturbefehlen wie IF, WHILE, UNTIL.
siehe auch:  <     <=    =    >     <>
   
 


 
> 
Typ: Operator 
Syntax:  {<num.Ausdruck> > <num.Ausdruck> | <String-Ausdruck> > <String-Ausdruck>}
Erklärung:  Der Größeroperator vergleicht den Ausdruck, der links von ihm steht, mit dem Ausdruck, der rechts von ihm steht. Statt der numerischen Ausdrücke können auch String-Ausdrücke eingesetzt werden, eine Kombination von beiden ist aber nicht erlaubt. Das Ergebnis ist ein boolscher Wert. Ist der Ausdruck links vom Operator größer als der Ausdruck rechts vom Operator, so wird -1 als Ergebnis zurückgeliefert, sonst 0. 
Bei Strings erfolgt der Vergleich zeichenweise nach dem jeweiligen ASCII-Wert des Zeichens. "b" ist demnach größer als "a". 

Hinweis: Solche Vergleiche benutzt man im allgemeinen zur Programmsteuerung mit Strukturbefehlen wie IF, WHILE, UNTIL.
siehe auch:  <     <=     =     >=    <> 
   
 


 
<> 
Typ: Operator
Syntax:  {<num.Ausdruck> <> <num.Ausdruck> | <String-Ausdruck> <> <String-Ausdruck>}
Erklärung:  Der Ungleichoperator vergleicht den Ausdruck, der links von ihm steht, mit dem Ausdruck, der rechts von ihm steht. Statt der numerischen Ausdrücke können auch String-Ausdrücke eingesetzt werden, eine Kombination von beiden ist aber nicht erlaubt. Das Ergebnis ist ein boolscher Wert. Ist der Ausdruck links vom Operator ungleich dem Ausdruck rechts vom Operator, so wird -1 als Ergebnis zurückgeliefert, sonst 0. 
Bei Strings erfolgt der Vergleich zeichenweise nach dem jeweiligen ASCII-Wert des Zeichens. "a" ist demnach ungleich "A". Die Strings können auch unterschiedlich lang sein. Dann ist das Ergebnis aber immer 0.

Hinweis: Solche Vergleiche benutzt man im allgemeinen zur Programmsteuerung mit Strukturbefehlen wie IF, WHILE, UNTIL. 
siehe auch:  <     <=     =     >=     
   
 


 
= (als Zuweisung)
Typ: Befehl 
Syntax:  {<num.Variable> = <num.Ausdruck>|<Stringvariable> = <String-Ausdruck>}
Erklärung:  Der Zuweisungsoperator weist der Variablen links vom Operator den Ausdruck rechts vom Operator zu. Numerischen Variablen kann nur ein numerischer Ausdruck zugewiesen werden und Stringvariablen nur ein String-Ausdruck. Eine Kombination von beiden ist unzulässig. 
siehe auch:  LET 
   
 


 
+= 
Typ: Operator 
Syntax:  <num.Variable> += <num.Ausdruck> 
Erklärung:  Dieser Operator addiert zu einer numerischen Variablen einen numerischen Ausdruck und weist das Ergebnis dann gleich wieder der Variablen zu. A+=B ist also gleichbedeutend mit A=A+B, kann aber vom Compiler effektiver übersetzt werden. Sie sollten von dieser Schreibweise also reichlich gebrauch machen.

Hinweis: Der Omikron Basic Compiler versucht immer, einen Ausdruck der Form A=A+B wie A+=B zu übersetzen. Trotzdem ist die Benutzung des "+=" Operators anzuraten.
siehe auch:  -=     *=     /= 
   
 


 
-= 
Typ: Operator 
Syntax:  <num.Variable> -= <num.Ausdruck> 
Erklärung:  Dieser Operator subtrahiert von einer numerischen Variablen einen numerischen Ausdruck und weist das Ergebnis dann gleich wieder der Variablen zu. A-=B ist also gleichbedeutend mit A=A-B, kann aber vom Compiler effektiver übersetzt werden. Sie sollten von dieser Schreibweise also reichlich gebrauch machen.

Hinweis: Der Omikron Basic Compiler versucht immer, einen Ausdruck der Form A=A-B wie A-=B zu übersetzen. Trotzdem ist die Benutzung des "-=" Operators anzuraten. 
siehe auch:  +=     *=     /= 
   
 


 
*= 
Typ: Operator 
Syntax:  <num.Variable> *= <num.Ausdruck> 
Erklärung:  Dieser Operator multipliziert eine numerische Variable mit einem numerischen Ausdruck und weist das Ergebnis dann gleich wieder der Variablen zu. A*=B ist also gleichbedeutend mit A=A*B, kann aber vom Compiler effektiver übersetzt werden. Sie sollten von dieser Schreibweise also reichlich gebrauch machen.

Hinweis: Der Omikron Basic Compiler versucht immer, einen Ausdruck der Form A=A*B wie A*=B zu übersetzen. Trotzdem ist die Benutzung des "*=" Operators anzuraten. 
siehe auch:  +=     -=     /= 
   
 


 
/=
Typ: Operator 
Syntax:  <num.Variable> /= <num.Ausdruck>
Erklärung:  Dieser Operator dividiert eine numerische Variable durch einem numerischen Ausdruck und weist das Ergebnis dann gleich wieder der Variablen zu. A/=B ist also gleichbedeutend mit A=A/B, kann aber vom Compiler effektiver übersetzt werden. Sie sollten von dieser Schreibweise also reichlich gebrauch machen.

Hinweis: Der Omikron Basic Compiler versucht immer, einen Ausdruck der Form A=A/B wie A/=B zu übersetzen. Trotzdem ist die Benutzung des "/=" Operators anzuraten.
siehe auch:  +=    -=    *= 
   
 


 
{...} 
Typ: Befehl
Syntax:  {<Programmtext>}
Erklärung:  Ein in geschweifte Klammern eingefaßter Bereich im Quellcode kann mit der Editorfunktion 'Bereich Einklappen' zu einer einzigen Zeile zusammengefaßt werden. Der Befehl hat keinen Einfluß auf die Programmausführung und wird vom Compiler ignoriert. 
siehe auch:  Bereich einklappen   Bereich ausklappen   Alles ausklappen 
   
 


 
Typ: Befehl 
Syntax:  ? [[<Ausdruck>][,[[<Ausdruck>]<,|;>]...] 
Für Ausdruck kann jeweils eingesetzt werden: 
{TAB(<num.Ausdruck>) | USING [<String-Ausdruck>] | <num.Ausdruck> | <String-Ausdruck>} 
Erklärung:  Das Fragezeichen hat die gleiche Bedeutung wie der Befehl PRINT. Es wird vom Editor auch sofort nach Verlassen der Zeile in PRINT umgewandelt. 
siehe auch:  PRINT 
   
 
 
' (Kommentar)
Typ: Befehl 
Syntax:  ' <Stringkonstante>
Erklärung:  Mit dem Hochkomma wird ein Kommentar eingeleitet. Alles, was hinter dem Hochkomma steht, wird vom Compiler ignoriert. Sie sollten von der Möglichkeit, Erläuterungen in Ihr Programm einzufügen, reichlich Gebrauch machen. Dadurch ist es für Sie einfacher, den Programmablauf auch dann noch zu verstehen, wenn Sie sich längere Zeit nicht damit beschäftigt haben. 
siehe auch:  REM 
   
 

@

Typ: Funktion 
Syntax:  @(<num.Ausdruck>,<num.Ausdruck) 
@(<Zeile>,<Spalte>)
Erklärung:  Diese Funktion liefert einen Steuerstring als Ergebnis zurück. Wird dieser String z.B. mit PRINT, LPRINT oder INPUT ausgegeben, so bewirkt er, daß der Cursor in die hinter "@" angegebene Zeile und Spalte gesetzt wird. 
Bei LPRINT kann es dabei zu gewissen Einschränkungen kommen, denn der Cursor kann natülich nicht an eine Stelle gesetzt werden, die bereits ausgedruckt wurde. 
siehe auch:  PRINT @ 
   
 
 

 

4. Grundlagen Inhalt | ABS  -  CINT

Support | Bestellen | Start | Home: http://www.berkhan.de


© 1997-2001 Berkhan-Software