|
|
|
| & | |
| 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: |
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: |
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: |
|
| Ergebnis: |
|
| 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: | |
| ' (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 @ |
|
Support | Bestellen | Start | Home: http://www.berkhan.de |
|
© 1997-2001 |