Die großgeschriebenen Klassen sind die sogenannten Wrapperklassen. Sie bieten viele nützliche, teils statische Methoden, wie zum Beispiel toLong() (toDouble() usw.)für jede Zahlenvariablenart oder parseInt() (parseLong() usw. ), um aus einem String einen Zahlenwert zu lesen, ebenfalls für jede Zahlenart. Für weiterführende Infos guck doch mal hier nach. Der Datentyp INTEGER, der eine Untermenge der ganzen Zahlen repräsentiert, ist ein elementarer Typ der Sprache ELAN. Der Wertebereich der 32 Bit Repräsentation liegt zwischen -2 147 483 648 und 2 147 483 647. Neben dem elementaren Typ Integer gibt es weitere Ganzzahltypen mit eingeschränktem oder erweitertem Wertebereich: TYPE BYTE:Vorzeichenloses Byte (8 Bit).TYPE WORD:Vorzeichenloses Wort (16 Bit).TYPE HINT:Vorzeichenbehaftetes Wort (16 Bit). Wertebereich (-32768 bis 32767 ).TYPE INT:Vorzeichenbehaftetes Doppelwort (32 Bit). Wertebereich(-2147483648 bis 2147483647 ).TYPE DWORD:Vorzeichenloses Doppelwort (32 Bit).TYPE DINT:Vorzeichenbehaftetes Quadwort (64 Bit). Wertebereich: (-9223372036854775808 bis 9223372036854775807 ). Die interne Darstellung dieser Typen erfolgt durch die 80386 Datentypen BYTE, WORD, DWORD und QUADWORD. Der Speicherplatzbedarf ist somit für jeden Datentyp der minimal erforderliche. Für die �üblichen� Ganzzahltypen H(alf) Integer, Integer und D(ouble) Integer sind alle üblichen arithmetischen Operationen bereitgestellt. Sollen Bytes, Worte oder Doppelworte für Berechnungen herangezogen werden, sind die passenden Konvertierungsprozeduren zu benutzen, um sie in Integer umzuwandeln. Die Notation von Integern kann zur Basis 2, zur Basis 10 oder hexadezimal erfolgen. Binärnotation wird durch das Präfix 0b, hexadezimale Notation durch das Präfix 0x angezeigt. Beispiel:Hexadezimal- und Binärwerte werden nicht auf Integer Überlauf geprüft.INT CONST i := 0x ff , j := 255 , k := 0b 1111 1111 ; Nur INTEGER können in Zählschleifen (FOR Konstrukte), Selektionen (SELECT) oder zur Subskription herangezogen werden. INT TYPE INT := INT OP := (INT VAR a, INT CONST b) Wirkung: Zuweisung. Kopie des Wertes von 'b' in die Variable 'a'.=BOOL OP = (INT CONST a, b) Wirkung: Liefert 'TRUE' , falls 'a' gleich 'b' ist.<>BOOL OP <> (INT CONST a, b) Wirkung: Liefert 'TRUE', falls 'a' ungleich 'b' ist.<BOOL OP < (INT CONST a, b) Wirkung: Liefert 'TRUE', falls 'a' kleiner als 'b' ist.<=BOOL OP <= (INT CONST a, b) Wirkung: Liefert 'TRUE', falls 'a' kleiner oder gleich 'b' ist.>BOOL OP > (INT CONST a, b) Wirkung: Liefert 'TRUE', falls 'a' größer als 'b' ist.>=BOOL OP >= (INT CONST a, b) Wirkung: Liefert 'TRUE', falls 'a' größer oder gleich 'b' ist.+INT OP + (INT CONST a) Wirkung: Monadischer Operator (Vorzeichen, ohne Wirkung).INT OP + (INT CONST a, b) Wirkung: Addition.Fehler: "INT-Überlauf". Das Ergebnis der Addition ist größer als max int oder kleiner als min int.-INT OP - (INT CONST a) Wirkung: Vorzeichen-Umkehrung.INT OP - (INT CONST a, b) Wirkung: Subtraktion.Fehler: "INT-Überlauf". Das Ergebnis der Subtraktion ist größer als max int oder kleiner als min int.*INT OP * (INT CONST a, b) Wirkung: Multiplikation.Fehler: "INT-Überlauf". Das Ergebnis der Multiplikation ist größer als max int oder kleiner als min int.**INT OP ** (INT CONST arg, exp) Wirkung: Exponentiation mit 'exp' >= 0Bemerkung: Ein negativer Exponent liefert das Ergebnis 0.Fehler: 0**0 ist undefiniert. "INT-Überlauf".absINT PROC abs (INT CONST argument) Wirkung: Absolutbetrag des INT-Wertes.ABSINT OP ABS (INT CONST argument) Wirkung: Absolutbetrag des INT-Wertes.byteBYTE PROC byte (INT CONST int) Wirkung: Liefert den Wert des niederwertigsten Bytes von 'int'.DECROP DECR (INT VAR left, INT CONST right) Wirkung: Subtraktion. Entspricht left := left - right.dintDINT PROC dint (INT CONST int) Wirkung: Liefert den entsprechenden DINT Wert zu 'int'.DIVINT OP DIV (INT CONST a, b) Wirkung: Ganzzahldivision.Fehler: DIV durch 0dwordDWORD PROC dword (INT CONST int) Wirkung: Liefert den entsprechenden DWORD Wert zu 'int'.hintHINT PROC hint (INT CONST int) Wirkung: Liefert den entsprechenden HINT Wert zu 'int'.Fehler: "INT Überlauf". Der Wert von 'int' liegt nicht zwischen -32768 und 32767.INCROP INCR (INT VAR left, INT CONST right) Wirkung: Addition. Entspricht left := left + right.initialize randomPROC initialize random (INT CONST n) Wirkung: Initialisierung des Generators für (Pseudo) Zufallszahlen. Die Zufallszahlen werden durch sukzessiven Aufruf der Prozedur random geliefert. Falls der Wert des Parameters 'n' erneut für initialize random benutzt wird, wird die vorher gelieferte Reihe von Zufallszahlen reproduziert.maxINT PROC max (INT CONST left, right) Wirkung: Liefert das Maximum der beiden Werte.max intINT CONST max int Wirkung: Liefert den größten Wert, den der Typ INTEGER im L3 System annehmen kann ( 2 147 483 647 ).minINT PROC min ( INT CONST left, right) Wirkung: Liefert das Minimum der beiden Werte.min intINT CONST min int Wirkung: Liefert den kleinsten Wert, den der Typ INTEGER im L3 System annehmen kann (-2 147 483 648 ).MODINT OP MOD (INT CONST left, right) Wirkung: Liefert die Divisionsrestklasse, vergl. REM.Beispiel: 3 MOD 2 ==> 1-3 MOD 2 ==> 1Fehler: DIV durch 0random INT PROC random (INT CONST lower bound, upper bound) Wirkung: Liefert eine (Pseudo) Zufallszahl im Intervall zwischen 'lower bound' und 'upper bound' und wird mittels 'initialize random' initialisiert.REMINT OP REM (INT CONST left, right) Wirkung: Liefert den Divisionsrest, vergl.MOD.Beispiel: 3 REM 2 ==> 1-3 REM 2 ==> -1 sign INT PROC sign (INT CONST argument) Wirkung: Feststellen des Vorzeichens eines INT-Wertes.argument > 0 ==> 1 SIGN INT OP SIGN (INT CONST argument) Wirkung: Feststellen des Vorzeichens eines INT-Wertes.argument > 0 ==> 1 text TEXT PROC text (INT CONST number) Wirkung: Liefert die Darstellung von 'number' als ASCII Zeichenfolge. Falls 'number' einen negativen Wert hat, wird als Vorzeichen '-' vorangestellt.TEXT PROC text (INT CONST number, length) out ("X:"); out(text(12345,7)) ; line; out ("Y:"); out(text(12345,3)) ; (* ergibt *) X: 12345 Y:*** word WORD PROC word (INT CONST int) Wirkung: Liefert den Wert des niederwertigsten Wortes zu 'int'.Fehler: "INT Überlauf". Der Wert von 'int' liegt nicht zwischen 0 und 65535.DINT TYPE DINT := DINT OP := (DINT VAR a, DINT CONST b) Wirkung: Zuweisung. Kopie des Wertes von 'b' in die Variable 'a'.=BOOL OP = (DINT CONST a, b) Wirkung: Liefert 'TRUE' , falls 'a' gleich 'b' ist.<>BOOL OP <> (DINT CONST a, b) Wirkung: Liefert 'TRUE', falls 'a' ungleich 'b' ist.<BOOL OP < (DINT CONST a, b) Wirkung: Liefert 'TRUE', falls 'a' kleiner als 'b' ist.<=BOOL OP <= (DINT CONST a, b) Wirkung: Liefert 'TRUE', falls 'a' kleiner oder gleich 'b' ist.>BOOL OP > (DINT CONST a, b) Wirkung: Liefert 'TRUE', falls 'a' größer als 'b' ist.>=BOOL OP >= (DINT CONST a, b) Wirkung: Liefert 'TRUE', falls 'a' größer oder gleich 'b' ist.+DINT OP + (DINT CONST a, b) Wirkung: Addition.Fehler: "INT-Überlauf". Das Ergebnis der Addition ist größer als max dint oder kleiner als min dint.-DINT OP - (DINT CONST a, b) Wirkung: Subtraktion.Fehler: "INT-Überlauf". Das Ergebnis der Subtraktion ist größer als max dint oder kleiner als min dint.*DINT OP * (DINT CONST a, b) Wirkung: Multiplikation.Fehler: "INT-Überlauf". Das Ergebnis der Multiplikation ist größer als max dint oder kleiner als min dint.absDINT PROC abs (DINT CONST argument) Wirkung: Absolutbetrag des DINT-Wertes.DECROP DECR (DINT VAR left, DINT CONST right) Wirkung: Subtraktion. Entspricht left := left - right.dint0DINT PROC dint0 Wirkung: Liefert DINT Wert '0'.dint1DINT PROC dint1 Wirkung: Liefert DINT Wert '1'.DIVDINT OP DIV (DINT CONST a, b) Wirkung: Ganzzahldivision.Fehler: DIV durch 0INCROP INCR (DINT VAR left, DINT CONST right) Wirkung: Addition. Entspricht left := left + right.intINT PROC int (DINT CONST dint) Wirkung: Liefert den Wert des niederwertigsten DWORDS von 'dint'.maxDINT PROC max (DINT CONST left, right) Wirkung: Liefert das Maximum der beiden Werte.max dintDINT CONST maxdint Wirkung: Liefert den größten Wert, den der Typ DINT im L3 System annehmen kann.minDINT PROC min (DINT CONST left, right) Wirkung: Liefert den kleineren der beiden Werte.min dintDINT CONST min dint Wirkung: Liefert den kleinsten Wert, den der Typ DINT im L3 System annehmen kann.MODDINT OP MOD (DINT CONST left, right) Wirkung: Liefert die Divisionsrestklasse, vergl. REM.Beispiel:Fehler: DIV durch 0signdint( 3) MOD dint (2) ==> 1 dint(-3) MOD dint (2) ==> 1 INT PROC sign (DINT CONST value) Wirkung: Vorzeichen eines DINT Wertes.textTEXT PROC text (DINT CONST number) Wirkung: Liefert die Darstellung von 'number' als ASCII Zeichenfolge. Falls 'number' einen negativen Wert hat, wird als Vorzeichen '-' vorangestellt.HINT TYPE HINT := HINT OP := (HINT VAR a, HINT CONST b) Wirkung: Zuweisung. Kopie des Wertes von 'b' in die Variable 'a'.=BOOL OP = (HINT CONST a, b) Wirkung: Liefert 'TRUE' , falls 'a' gleich 'b' ist.<>BOOL OP <> (HINT CONST a, b) Wirkung: Liefert 'TRUE', falls 'a' ungleich 'b' ist.<BOOL OP < (HINT CONST a, b) Wirkung: Liefert 'TRUE', falls 'a' kleiner als 'b' ist.<=BOOL OP <= (HINT CONST a, b) Wirkung: Liefert 'TRUE', falls 'a' kleiner oder gleich 'b' ist.>BOOL OP > (HINT CONST a, b) Wirkung: Liefert 'TRUE', falls 'a' größer als 'b' ist.>=BOOL OP >= (HINT CONST a, b) Wirkung: Liefert 'TRUE', falls 'a' größer oder gleich 'b' ist.+HINT OP + (HINT CONST a, b) Wirkung: Addition.Fehler: "INT-Überlauf". Das Ergebnis der Addition ist größer als maxhint oder kleiner als minhint.-HINT OP - (HINT CONST a, b) Wirkung: Subtraktion.Fehler: "INT-Überlauf". Das Ergebnis der Subtraktion ist größer als maxhint oder kleiner als minhint.*HINT OP * (HINT CONST a, b) Wirkung: Multiplikation.Fehler: "INT-Überlauf". Das Ergebnis der Multiplikation ist größer als maxhint oder kleiner als minhint.DECROP DECR (HINT VAR left, HINT CONST right) Wirkung: Subtraktion. Entspricht left := left - right.DIVHINT OP DIV (HINT CONST a, b) Wirkung: Ganzzahldivision.Fehler: DIV durch 0INCROP INCR (HINT VAR left, HINT CONST right) Wirkung: Addition. Entspricht left := left + right.intINT PROC int (HINT CONST hint) Wirkung: Liefert den entsprechenden INT Wert zu 'hint'.maxHINT PROC max (HINT CONST left, right) Wirkung: Liefert das Maximum der beiden Werte.maxhintHINT CONST maxhint Wirkung: Liefert den größten Wert, den der Typ HINT im L3 System annehmen kann.minHINT PROC min (HINT CONST left, right) Wirkung: Liefert das Minimum der beiden Werte.minhintHINT CONST minhint Wirkung: Liefert den kleinsten Wert, den der Typ HINT im L3 System annehmen kann.MODHINT OP MOD (HINT CONST left, right) Wirkung: Liefert die Divisionsrestklasse, vergl MOD.Beispiel: hint( 3) MOD hint (2) ==> hint (1)hint(-3) MOD hint (2) ==> hint (1)Fehler: DIV durch 0 DWORD TYPE DWORD := OP := (DWORD VAR a, DWORD CONST b) INT PROC int (DWORD CONST word) Wirkung: Liefert den entsprechenden INT Wert zu 'dword'.WORD TYPE WORD := OP := (WORD VAR a, WORD CONST b) Wirkung: Zuweisung. Kopie des Wertes von 'b' in die Variable 'a'.intINT PROC int (WORD CONST word) Wirkung: Liefert den entsprechenden INT Wert zu 'word'.BYTE TYPE BYTE := OP := (BYTE VAR a, BYTE CONST b) Wirkung: Zuweisung. Kopie des Wertes von 'b' in die Variable 'a'.intINT PROC int (BYTE CONST byte) Wirkung: Liefert den entsprechenden INT Wert zu 'byte'.Der Wertebereich für Datenobjekte vom Type BOOL besteht aus TRUE und FALSE. Werte des Typs BOOL können mit folgenden Operatoren verknüpft werden. AND BOOL OP AND (BOOL CONST a, b) Wirkung: Logisches UND. Die Reihenfolge der Auswertung ist unbestimmt. Wenn der Operand, der zuerst ausgewertet wird, bereits FALSE liefert, wird der zweite Operand nicht mehr ausgewertet.CANDBOOL OP CAND (BOOL CONST a, b) Wirkung: Bedingtes logisches UND. Der zweite Operand wird nicht ausgewertet, falls er für das Ergebnis nicht relevant ist. Entspricht: IF a THEN b ELSE false FI.Bemerkung: Durch die festgelegte Reihenfolge der Auswertung kann z.B zuerst überprüft werden, ob ein Index innerhalb gewisser Grenzen liegt, bevor er zur Subscription herangezogen wird.Beispiel:CORi > 0 CAND row [i] = 1 BOOL OP COR (BOOL CONST a, b) Wirkung: Bedingtes logisches ODER. Der zweite Operand wird nicht ausgewertet, falls er für das Ergebnis nicht relevant ist. Entspricht: IF a THEN true ELSE b FI.falseBOOL CONST false Wirkung: Boolesche KonstanteNOTBOOL OP NOT (BOOL CONST a) Wirkung: IF a THEN FALSE ELSE TRUE FIORBOOL OP OR (BOOL CONST a, b) Wirkung: Logisches ODER. Die Reihenfolge der Auswertung ist unbestimmt. Wenn der Operand, der zuerst ausgewertet wird, bereits TRUE liefert, wird der zweite Operand nicht mehr ausgewertet.trueBOOL CONST true Wirkung: Boolesche KonstanteXORBOOL OP XOR (BOOL CONST a, b) Wirkung: Exklusives ODER, liefert TRUE, wenn 'a' und 'b' ungleich, und FALSE, wenn 'a' und 'b' gleich sind.Bit-Operationen arbeiten in L3 auf Integer-Objekten. Sie können benutzt werden, um Bitmasken zu erzeugen. Ein Integer hat 32 Bit. Das höchstwertige Bit hat die Nummer 31, das niederwertigste die Nummer 0. Ebenfalls vordefiniert sind einige dieser Operationen für DINTs, so daß auch Bitmasken der Länge 64 benutzt werden können. AND INT OP AND (INT CONST a, b) Wirkung: Bitweise UND-Verknüpfung von 'a' mit 'b'.DINT OP AND (DINT CONST a, b) Wirkung: Bitweise UND-Verknüpfung von 'a' mit 'b'.bitBOOL PROC bit (INT CONST bits, bit no) Wirkung: Liefert TRUE, wenn das Bit mit der Nummer 'bit no' in dem INT 'bits' gesetzt ist.Beispiel:lowest setIF bit (1024,10) THEN put("TRUE") FI ---> TRUE INT PROC lowest set (INT CONST bits) Wirkung: Liefert die Nummer des niederwertigsten auf 1 gesetzten Bits in 'bits'. Ist kein Bit auf 1 gesetzt, wird -1 geliefert.lowest resetlowest reset (INT CONST bits) Wirkung: Liefert die Nummer des niederwertigsten auf 0 gesetzten Bits in 'bits'. Ist kein Bit auf 0 gesetzt, wird -1 geliefert.offBOOL PROC off (INT CONST a, b) Wirkung: Liefert 'TRUE', falls (a AND b) = 0 ist.onBOOL PROC on (INT CONST a, b) Wirkung: Liefert 'TRUE', falls (a AND b) <> 0 ist.ORINT OP OR (INT CONST a, b) Wirkung: Bitweise ODER-Verknüpfung von 'a' mit 'b'.DINT OP OR (DINT CONST a, b) Wirkung: Bitweise ODER-Verknüpfung von 'a' mit 'b'.SHLINT OP SHL (INT CONST a, b) Wirkung: Linksshift von 'a' um 'b' Bit.Beispiel: Schnelle Multiplikation mit 4: 17 SHR 4SHRINT OP SHR (INT CONST a, b) Wirkung: Rechtsshift von 'a' um 'b' Bit.Beispiel: Schnelle Division durch 4: 17 SHR 4reset bitPROC reset bit (INT VAR bits, INT CONST bit no) Wirkung: Das Bit mit der Nummer 'bit no' wird in 'bits' auf 0 gesetzt.rotatePROC rotate (INT VAR bits, INT CONST factor) Wirkung: Bits werden mit dieser Prozedur zyklisch geshiftet. Die Richtung der Bitverschiebung wird durch das Vorzeichen von 'factor' bestimmt. Ein positives Vorzeichen bewirkt Linksshift, ein negatives Rechtsshift.Bemerkung: Da zyklisch geshiftet wird, bewirkt ein Wert von 'factor' größer als 32 einen mehrfachen Zyklus.Beispiel:set bitrotate (1,1) ---> 2 rotate (1,2) ---> 4 rotate (1,-1) ---> minint rotate (1,65) ---> 2 PROC set bit (INT VAR bits, INT CONST bit no) Wirkung: Das Bit mit der Nummer 'bit no' wird in 'bits' auf 1 gesetzt.XORINT OP XOR (INT CONST a, b) Wirkung: Bitweise EXCLUSIV-ODER-Verknüpfung von 'a' mit 'b'.DINT OP XOR (DINT CONST a, b) Wirkung: Bitweise EXCLUSIV-ODER-Verknüpfung von 'a' mit 'b'.Realzahlen sind ein elementarer Datentyp der Sprache ELAN. Realzahlen werden in ELAN Programmen in Punktnotation (z.B. 12.345), ggf. in Exponentialnotation (z.B. 1.2345e10) aufgeschrieben. Die Realzahlen stellen eine Untermenge der reellen Zahlen dar. Die interne Darstellung ist die binäre 8 Byte-Fließkommadarstellung gemäß der Norm IEEE 754. Sie entspricht im Hinblick auf interne Zahlendarstellung damit dem für den INTEL 80387 geforderten Format. Dieses Format erlaubt die Darstellung von Zahlen im ungefähren Bereich von 2.2e-308 bis 1.8e308. Die Darstellung ist auf 15 bis 16 Dezimalstellen genau. Wenn vorhanden, wird ein Coprozessor 80287/80387 benutzt. Falls dieser nicht vorhanden ist, wird die standardmäßig in den L3 Systemkern eingebundene Coprozessoremulation benutzt. := REAL OP := (REAL VAR a, REAL CONST b) Wirkung: Zuweisung.=BOOL OP = (REAL CONST a, b) Wirkung: Liefert den Wahrheitwert der Aussage a = b<>BOOL OP <> (REAL CONST a, b) Wirkung: Liefert den Wahrheitwert der Aussage a <> b<BOOL OP < (REAL CONST a, b) Wirkung: Liefert den Wahrheitwert der Aussage a < b<=BOOL OP <= (REAL CONST a, b) Wirkung: Liefert den Wahrheitwert der Aussage a <= b>BOOL OP > (REAL CONST a, b) Wirkung: Liefert den Wahrheitwert der Aussage a > b>=BOOL OP >= (REAL CONST a, b) Wirkung: Liefert den Wahrheitwert der Aussage a >= b+REAL OP + (REAL CONST r) Wirkung: Monadischer OperatorREAL OP + (REAL CONST a, b) REAL OP - (REAL CONST r) Wirkung: Vorzeichen-Umkehrung.REAL OP - (REAL CONST a, b) Wirkung: Liefert die Differenz a - b (Subtraktion).*REAL OP * (REAL CONST a, b) Wirkung: Liefert das Produkt a * b (Multiplikation)./REAL OP / (REAL CONST a, b) Wirkung: Liefert den Quotienten a / b (Division).Fehler: Division durch 0**REAL OP ** (REAL CONST base, power) Wirkung: Exponentiation.Fehler: base < 0.0 0.0 ** 0.0REAL OP ** (REAL CONST base, INT CONST power) Wirkung: Exponentiation.Fehler: 0.0 * 0absREAL PROC abs (REAL CONST a) Wirkung: Absolutbetrag eines REAL-Wertes.ABSREAL OP ABS (REAL CONST a) Wirkung: Absolutbetrag eines REAL-Wertes.arctanREAL PROC arctan (REAL CONST r) Wirkung: Arcus Tangens Funktion. Liefert einen Wert im Bogenmaß.arctandREAL PROC arctand (REAL CONST r) Wirkung: Arcus Tangens Funktion. Liefert einen Wert in Grad.cosREAL PROC cos (REAL CONST r) Wirkung: Cosinus Funktion. 'r' muß im Bogenmaß angegeben werden.cosdREAL PROC cosd (REAL CONST r) Wirkung: Cosinus Funktion. 'r' muß in Grad angegeben werden.decimal exponentINT PROC decimal exponent (REAL CONST r) Wirkung: Liefert für den REAL-Wert 'r' den dezimalen Exponenten 'z', so daß gilt: r = y * 10 ** z und 1.0 <= y < 10.0.DECROP DECR (REAL VAR a, REAL CONST b) Wirkung: Wirkt wie a := a - beREAL PROC e Wirkung: Liefert die Eulersche Zahl (ca. 2.718282).expREAL PROC exp (REAL CONST x) Wirkung: Exponentialfunktion.floorREAL PROC floor (REAL CONST real) Wirkung: Schneidet die Stellen des REAL-Wertes 'real' nach dem Dezimalpunkt ab.fracREAL PROC frac (REAL CONST r) Wirkung: Liefert die Stellen eines REAL-Wertes hinter dem Dezimalpunkt.INCROP INCR (REAL VAR a, REAL CONST b) Wirkung: Wirkt wie a := a + binitialize randomPROC initialize random (REAL CONST z) Wirkung: Initialisierung des Generators für (Pseudo) Zufallszahlen im Intervall zwischen 0.0 und 1.0. Die Zufallszahlen werden durch sukzessiven Aufruf der Prozedur random geliefert. Falls derselbe Wert des Parameters 'z' erneut für initialize random benutzt wird, wird die vorher gelieferte Reihe von Zufallszahlen reproduziert.intINT PROC int (REAL CONST x) Wirkung: Konvertierung in eine ganze Zahl. Die Nachkommastellen werden abgeschnitten.Beispiel: int (3.9) ==> 3ln REAL PROC ln (REAL CONST x) Wirkung: Natürlicher Logarithmus.Fehler: x <= 0.0log2REAL PROC log2 (REAL CONST x) Wirkung: Logarithmus zur Basis 2.Fehler: x <= 0.0log10REAL PROC log10 (REAL CONST x) Wirkung: Logarithmus zur Basis 10.Fehler: x <= 0.0maxREAL PROC max (REAL CONST a, b) Wirkung: Liefert das Maximum der beiden REAL-Werte.maxrealREAL CONST maxreal Wirkung: Liefert den größten REAL-Wert im L3-System.minREAL PROC min (REAL CONST a, b) Wirkung: Liefert das Minimum der beiden REAL-Werte.MODREAL OP MOD (REAL CONST a, b) Wirkung: Liefert den Rest einer REAL Division (Restklasse).Beispiel: 5.0 MOD 2.0 ==> 1.04.5 MOD 4.0 ==> 0.5 4.5 MOD 4.4 ==> 0.1 pi REAL CONST pi Wirkung: Liefert die Zahl pi (ca. 3.141593).randomREAL PROC random Wirkung: Liefert eine (Pseudo) Zufallszahl im Intervall zwischen 0.0 und 1.0 und wird zuvor mit initialize random initialisiert.roundREAL PROC round (REAL CONST real, INT CONST digits) Wirkung: Runden eines REAL-Wertes auf 'digits' Stellen. Für positive Werte wird auf Stellen hinter dem Dezimalpunkt, für negative Werte von 'digits' auf Stellen vor dem Dezimalpunkt gerundet.Beispiel: round (3.14159, 3) ==> 3.142round (123.456, -2) ==> 100.0 sign INT PROC sign (REAL CONST argument) Wirkung: Feststellen des Vorzeichens eines REAL-Wertes.INT OP SIGN (REAL CONST argument) Wirkung: Feststellen des Vorzeichens eines REAL-Wertes.argument > 0 ==> 1 argument = 0 ==> 0 argument < 0 ==> -1sin REAL PROC sin (REAL CONST r) Wirkung: Sinus Funktion. 'r' muß im Bogenmaß angegeben werden.sindREAL PROC sind (REAL CONST r) Wirkung: Sinus Funktion. 'r' muß im Grad angegeben werden.smallrealREAL PROC smallreal Wirkung: Kleinster REAL-Wert im L3 System für den gilt:1.0 - smallreal <> 1.0 1.0 + smallreal <> 1.0 sqrt REAL PROC sqrt (REAL CONST x Wirkung: Wurzel Funktion.Fehler: x < = 0.0tanREAL PROC tan (REAL CONST r) Wirkung: Tangens Funktion. 'r' muß im Bogenmaß angegeben werden.tandREAL PROC tand (REAL CONST r) Wirkung: Tangens Funktion. 'd' muß in Grad angegeben werden.textTEXT PROC text (REAL CONST real) Wirkung: Konvertierung eines REAL-Wertes in einen TEXT der maximal 14 Zeichen umfaßt in Genauigkeit von maximal 7 Stellen hinter dem Dezimalpunkt. Ggf. wird der TEXT in Exponentialnotation geliefert.TEXT PROC text (REAL CONST real, INT CONST length) Wirkung: Konvertierung eines REAL-Wertes in einen TEXT der Länge 'length' in Exponentialnotation. 'length' muß zwischen 8 und 25 liegen. Bei Werten kleiner 8 wird 'length' mal "*" ausgegeben, bei zu großen Werten wird 25 angenommen.TEXT PROC text (REAL CONST real, INT CONST length, fracs) Wirkung: Konvertierung eines REAL-Wertes in einen TEXT in Punktnotation. Dabei gibt 'length' die Länge des Resultats einschließlich des Dezimalpunktes und des Vorzeichens, 'fracs' die Anzahl der Stellen nach dem Dezimalpunkt an. Kann der REAL Wert nicht wie gewünscht dargestellt werden, wird 'length' mal "*" geliefert.underflowBOOL PROC underflow Wirkung: Liefert TRUE, falls die letzte REAL Operation einen Wertunterlauf erzeugte. Ein Unterlauf entsteht, wenn das Resultat einen so kleinen Wert annimmt, daß eine korrekte interne Darstellung nicht mehr möglich ist. Wenn dieser Fall eintritt, gilt underflow = true. Das Resultat der Operation wird auf 0.0 gesetzt.TEXT ist ein elementarer ELAN Datentyp, der Textobjekte variabler Länge aufnehmen kann. ELAN kennt keine Unterscheidung der Typen "Character" (einzelnes Zeichen) und "String" (Zeichenkette). Sowohl der leere Text (niltext) als auch einzelne Zeichen ("A", "B" usw.) bis hin zur Zeichenkette der Länge 32000 (maxtextlength) sind TEXTe. Die Verwaltung von Textobjekten in Programmen zur Laufzeit ist dynamisch. Interna über diese Verwaltung finden Sie am Ende dieses Abschnitts. Texte werden nach den üblichen lexikalischen Regeln verglichen. Die Ordnung der Zeichen ist durch die interne Darstellung, also die ASCII Codierung der Zeichen bestimmt. Unter der Annahme 'a' < 'b' sind weiterhin folgende Ausdrücke wahr: "" < "a" Für den lexikalischen Vergleich (die Telefonbuchordnung) werden Regeln gemäß DIN 5007 benutzt. Die Operatoren LEXEQUAL, LEXGREATER und LEXGREATEREQUAL prüfen nach folgenden Regeln:
Die ASCII Ordnung setzt also Ziffern vor Großbuchstaben, diese vor Kleinbuchstaben. := TEXT OP := (TEXT VAR a, TEXT CONST b) Wirkung: Zuweisung.=BOOL OP = (TEXT CONST left, right) Wirkung: Vergleich von zwei Texten auf Gleichheit.Bemerkung: Texte mit ungleichen Längen sind immer ungleich.<>BOOL OP <> (TEXT CONST left, right) Wirkung: Vergleich zweier Texte auf Ungleichheit.Bemerkung: Texte mit ungleichen Längen sind immer ungleich.<BOOL OP < (TEXT CONST left, right) Wirkung: Liefert TRUE, falls der Text 'left' lexikographisch kleiner als 'right' ist.<=BOOL OP <= (TEXT CONST left, right) Wirkung: Liefert TRUE, falls der Text 'left' lexikographisch kleiner oder gleich 'right' ist.>BOOL OP > (TEXT CONST left, right) Wirkung: Liefert TRUE, falls der Text 'left' lexikographisch größer als 'right' ist.>=BOOL OP >= (TEXT CONST left, right) Wirkung: Liefert TRUE, falls der Text 'left' lexikographisch größer oder gleich 'right' ist.*TEXT OP * (INT CONST xtimes, TEXT CONST text) Wirkung: 'text' wird 'xtimes' mal verkettet.Bemerkung: Falls 'xtimes' kleiner oder gleich Null ist, wird niltext geliefert.Beispiel: put (3 * "schwarzer Kater ")+TEXT OP + (TEXT CONST left, right) Wirkung: Verkettung der Texte 'left' und 'right' in dieser Reihenfolge.Bemerkung: Die Länge des Resultats ergibt sich aus der Addition der Länge der Operanden.CATTEXT OP CAT (TEXT VAR left, TEXT CONST right) Wirkung: Verknüpfung von 'left' und 'right'.Bemerkung: Entspricht left := left + right CAT ist effizienter als die explizite Zuweisung.changePROC change (TEXT VAR text, TEXT CONST old, new) Wirkung: Ersetzung des (Teil-) TEXTes 'old' in 'text' durch 'new' beim erstmaligen Auftreten.Bemerkung: Ist 'old' nicht in 'text' vorhanden, so wird keine Meldung abgesetzt. Die Länge von 'text' kann sich bei dieser Operation verändern.Beispiel: TEXT VAR mein text :: "L3-Benutzerhandbuch";change (mein text, "Ben", "N"); (* L3-Nutzerhandbuch *) PROC change (TEXT VAR text, INT CONST from, to, TEXT CONST new) Wirkung: Der TEXT 'new' wird in den TEXT 'text' anstatt des TEXTes, der zwischen 'from' und 'to' steht, eingesetzt. Die Länge von 'text' kann sich dabei verändern.changeallPROC changeall (TEXT VAR text, TEXT CONST old, new) Wirkung: Ersetzt in 'text' jedes Auftreten von 'old' durch 'new'. Die Länge von 'text' kann sich dabei ändern.codeTEXT PROC code (INT CONST code) Wirkung: liefert das Zeichen, dessen ASCII Code angegeben ist.Bemerkung: Es muß gelten:0 <= code <= 255.INT PROC code (TEXT CONST text) Wirkung: Wandelt ein Zeichen 'text' in einen INT-Wert um.Bemerkung: Falls length (text) <> 1 ist, wird der Wert -1 geliefert (also bei mehr als einem Zeichen oder niltext).compressTEXT PROC compress (TEXT CONST text) Wirkung: Führende und abschließende Leerzeichen werden aus 'text' entfernt.is digitBOOL PROC is digit (INT CONST code) Wirkung: Liefert TRUE, falls (code (code)) eine Ziffer ist.is lowercase letterBOOL PROC is lowercase letter (TEXT CONST code) Wirkung: Liefert TRUE, falls (code (code)) ein Kleinbuchstabe ist.is uppercase letterBOOL PROC is uppercase letter (INT CONST code) Wirkung: Liefert TRUE, falls (code (code)) ein Großbuchstabe ist.lengthINT PROC length (TEXT CONST text) Wirkung: Liefert die Länge (= Anzahl von Zeichen) von 'text' einschließlich Leerzeichen.LENGTHINT OP LENGTH (TEXT CONST text) Wirkung: Liefert die Länge (= Anzahl von Zeichen) von 'text' einschließlich Leerzeichen.LEXEQUALBOOL OP LEXEQUAL (TEXT CONST left, right) Wirkung: Prüfung auf lexikalische Gleichheit.Beispiel: "Knödel" LEXEQUAL "Knoedel" (* => TRUE*)siehe NORMEQUAL.LEXGREATER BOOL OP LEXGREATER (TEXT CONST left, right) Wirkung: Prüfung, ob der Text 'left' lexikalisch größer als 'right' ist.LEXGREATEREQUALBOOL OP LEXGREATEREQUAL (TEXT CONST left, right) Wirkung: Prüfung, ob der Text 'left' lexikalisch größer oder gleich dem Text 'right' ist.lowercasePROC lowercase (TEXT VAR text) Wirkung: 'text' wird (ohne Kopie) in Kleinschreibung gewandelt. Jedes Zeichen aus 'text', dessen Code zwischen 65 und 90 liegt, also gerade die Großbuchstaben, wird in durch den entsprechenden Kleinbuchstaben ersetzt.TEXT OP LOWERCASE (TEXT CONST text) Wirkung: Liefert eine Textkopie von 'text', in der alle Großbuchstaben in Kleinbuchstaben gewandelt sind.NORMEQUALBOOL OP NORMEQUAL (TEXT CONST left, right) Wirkung: Liefert TRUE, falls UPPERCASE (left) = UPPERCASE (right).Beispiel: "Knödel" NORMEQUAL "KNÖDEL" (* => TRUE*)"Knödel" NORMEQUAL "Knoedel" (* => FALSE*) siehe LEXEQUAL.max text length INT PROC max text length Wirkung: Liefert die maximale Anzahl von Zeichen in einem TEXT (32 000).posINT PROC pos (TEXT CONST text, pattern) Wirkung: Liefert die erste Position des ersten Zeichens von 'pattern' in 'text'.Bemerkung: Wird 'pattern' nicht gefunden oder ist 'pattern' niltext, so wird der Wert '0' geliefert.INT PROC pos (TEXT CONST text, pattern, INT CONST start) Wirkung: Es wird erst ab der Position 'start' gesucht. Dabei gilt folgende Einschränkung: length (pattern) < 255Beispiel: TEXT VAR t1 :: "abcdefghijk...xyz",t2 :: "cd"; ... pos (t1, t2) ... (* liefert 3 *) ... pos (t2, t1) ... (* liefert 0 *) INT PROC pos (TEXT CONST text, low char, high char, INT CONST start) Wirkung: Liefert die Position des ersten Zeichens 'x' in 'text' ab der Position 'start'. 'x' soll kein eindeutig bestimmtes Zeichen sein, sondern ein Zeichen aus einer spezifizierten Menge von Zeichen. Diese Spezifikation geschieht durch 'low char' und 'high char'. Dadurch wird eine Zeichenmenge angegeben, deren (von der Codierung gesehen) kleinstes Zeichen 'low char' und deren größtes Zeichen 'high char' ist.Bemerkung: 'low char' und 'high char' müssen TEXTe der Länge 1 sein. Wird kein Zeichen in 'text' in dem Bereich zwischen 'low char' und 'high char' gefunden, wird der Wert '0' geliefert.Beispiel:replace(* Suche nach Zeichen <> blank nach einer Leerspalte*) TEXT VAR zeile :: "BlaBla Hier gehts weiter"; INT VAR pos erstes blank :: pos (zeile, " "), ende leerspalte :: pos (zeile,""33"",""254"", pos erstes blank); PROC replace (TEXT VAR text, INT CONST position, TEXT CONST new text) Wirkung: Ersetzung eines (Teil-) Textes in 'text' durch 'new text' an der Position 'position' in 'text'.Bemerkung: Es muß gelten 1 <= position <= length (text) d.h. 'position' muß innerhalb von 'text' liegen und 'new text' muß von der Position 'position' ab in 'text' einsetzbar sein. Dabei bleibt die Länge von 'text' unverändert.SUBTEXT OP SUB (TEXT CONST text, INT CONST pos) Wirkung: Liefert das Zeichen an der Stelle 'pos' aus 'text'. Entspricht subtext (text, pos, pos) , ist jedoch effizienter .Bemerkung: Für pos <= 0 oder pos > length (text) wird niltext geliefert.subtextTEXT PROC subtext (TEXT CONST text, INT CONST from) Wirkung: Liefert den Teiltext von 'text', der bei der Position 'from' anfängt.Bemerkung: Die Länge des Resultats ergibt sich also aus length (text) - from + 1 d.h. von der Position 'from' bis zum Ende von 'text'. 'from' muß innerhalb von 'text' liegen. Ist 'from' < 1, dann wird 'text' geliefert. Falls from > length (text) ist, wird niltext geliefert.TEXT PROC subtext (TEXT CONST text, INT CONST from, to) Wirkung: Der Teiltext von 'text' von der Position 'from' bis einschließlich der Position 'to' wird geliefert. Dabei muß gelten 1 <= from <= to <= length (text) d.h. die Positionen 'from' und 'to' müssen in dieser Reihenfolge innerhalb von 'text' liegen. Ist to >= length(text) wird subtext (text, from) ausgeführt. Für die Bedingungen für 'from' siehe vorstehende Beschreibung von 'subtext'.textTEXT PROC text (TEXT CONST text, INT CONST length) Wirkung: Liefert einen Teiltext aus 'text' mit der Länge 'length', beginnend bei der Position 1 von 'text'. Das Resultat hat auf jeden Fall die angegebene Länge.TEXT PROC text (TEXT CONST text, INT CONST length, from) Wirkung: Liefert einen Teiltext aus 'text' ab der Position 'from' mit der Länge 'length'.Bemerkung: Es muß gelten 1 <= 'from' <= length (text). Für den Fall from > length (text) wird ein Text aus 'length' Leerzeichen geliefert. Für from < 0 wird text (text, length, 1) ausgeführt.uppercasePROC uppercase (TEXT VAR text) Wirkung: 'text' wird (ohne Kopie) in Großschreibung gewandelt. Jedes Zeichen aus 'text', dessen Code zwischen 97 und 122 liegt, also gerade die Kleinbuchstaben, wird in durch den entsprechenden Großbuchstaben ersetzt.TEXT OP UPPERCASE (TEXT CONST text) Wirkung: Liefert eine Textkopie von 'text', in der alle Kleinbuchstaben in Großbuchstaben gewandelt sind.Jedes Datenobjekt vom Typ TEXT besteht aus einem festen Teil und möglicherweise aus einem flexiblen Teil auf dem Textheap. Im festen Teil werden Texte bis zur Länge von 11 Zeichen untergebracht. Wenn eine TEXT-Variable einen Wert mit mehr als 11 Zeichen Länge annimmt, werden alle Zeichen auf dem Heap untergebracht. Der Textheap ist ein ausschließlich der Speicherung von Texten gewidmeter Abschnitt eines Datenraums. Im Standarddatenraum ist der Textheap 14 MB groß. Er liegt im Adreßbereich ab 0x1200000. Bei benutzerdefinierten Datenräumen sind Größe und Lage des Textheaps einstellbar (siehe set min heapsize Kap.5). Der Textheap des Standarddatenraums besteht aus Containern verschiedener Größe zwischen 32 Bytes und 32 Kilobyte. Die 11 vorhandenen Containergrößen fassen 28 Bytes, 60 Bytes, 124 Bytes, 1*4 KBytes, 2*4 KBytes bis 8*4 KBytes. Der Textheap von anderen Datenräumen (BOUND .... TEXT.... ) einfacher organisiert (siehe unten). Falls ein Textobjekt Platz auf dem Textheap benötigt, wird ihm dort der kleinstmögliche, passende Container zugewiesen. Der Platzbedarf von TEXTen richtet sich also nicht nach der reinen Textgröße, sondern nach der erforderlichen Containergröße. Textdenotererhalten eine Sonderbehandlung. Ein Textdenoter 'd' wird im Standarddatenraum mit den Länge len (d) + 1 im Datenbereich des ELAN Programms gespeichert.len | 'len' text bytes.. 0 1 ..254 Im ersten Byte ist die Länge des Denoters vermerkt, gefolgt vom Denoter selbst in einer Länge zwischen 0 bis 254 Bytes. Kurze Textvariablenbis zu einer Länge von 11 Byte werden Texte ohne Benutzung des Textheaps gespeichert.len | text bytes | heaplink 0 1 12 15 Nicht benutzte Textbytes und 'heaplink' sind undefiniert. Lange TextvariablenDas 'heaplink' Feld enthält die 32 Bit Adresse des Containers in dem der Text gespeichert ist.Textcontainer im StandarddatenraumDer Heap im Standarddatenraum ist in 11 Klassen von Textcontainern gegliedert. Die ersten drei Klassen werden durch einen zusammenhängenden Abschnitt gebildet. In diesem Abschnitt zur Verfügung:out ("X:"); out(text(12345,7)) ; line; out ("Y:"); out(text(12345,3)) ; (* ergibt *) X: 12345 Y:***0 Die Nutzlänge dieser Container ist um vier Byte geringer als ihre Bruttolänge, da die ersten vier Byte den �Backlink� (die Adresse der Textvariable) enthalten. Längere Texte werden in Textcontainern gespeichert, die eine Länge von n * 4KB (1<=n<=8) haben. Sie tragen keine interne Verwaltungsinformation, bei ihnen ist also Brutto = Nettolänge. Die Container werden nach Bedarf nach einem �first fit� Algorithmus vergeben. Ein Text, der Platz in einer dieser Klassen benötigt, erhält den kürzestmöglichen, �ersten� freien Container. Da durch Wachsen von Texten Lücken entstehen und die Heapverwaltung stets bemüht ist, den Gesamtplatzbedarf des Textheap klein zu halten, finden unvorhersagbar Reorganisationen (�Text-Müllabfuhr�, nicht zu verwechseln mit der System-Müllabfuhr) des Heap statt. Adressen auf dem Textheap (geliefert z.B. durch INT OP TADDR) sind also unsicher, weil nur unbestimmte Zeit gültig! select container PROC select container (TEXT VAR text, INT CONST length) Wirkung: Unabhängig von der aktuellen Länge von 'text' wird ein Container, der 'length' Byte aufnehmen kann, auf dem Textheap reserviert.shortenPROC shorten (TEXT VAR text, INT CONST length) Wirkung:'text' wird auf die Länge 'length' verkürzt, indem die Längenangabe auf den neuen Wert gesetzt wird. Die Textcontainerzuordnung bleibt also unverändert.In anderen Datenräumen als dem Standarddatenraum ist der Textheap ein zusammenhängender Bereich, in dem Texte in Containern gespeichert werden, deren Größe ein Vielfaches von 16 Byte ist. out ("X:"); out(text(12345,7)) ; line; out ("Y:"); out(text(12345,3)) ; (* ergibt *) X: 12345 Y:***1 Jeder Container hat in seinen ersten beiden Byte eine Kapazitätsangabe c (1 <= c <= 2048). Die Kapazität des Containers errechnet sich durch (16 * c) - 2. Falls ein Text über die Größe seines Containers hinaus wächst, wird ein neuer Container an der Heapspitze zugewiesen. Eine �Müllabfuhr� auf dem Textheap findet nicht statt. Es kann also nützlich sein, Daten in einen neuen Datenraum umzukopieren, wenn sehr viel Speicherplatz durch �alte� Texte verbraucht wird. Die Mindestgröße des Textheap in einem Datenraum kann mit der Prozedur set min heapsize festgesetzt werden. Was ist int und double?Unter Int und Double versteht man unterschiedliche Zahlentypen. Int ist dabei eine “Ganze Zahl”, also eine Zahl ohne Fließkomma. z.B 1,2 oder 3. Sobald ein Fließkomma in der Zahl vorkommt spricht man vom Zahlentypen Double.
Wann verwendet man double?Double ist der Standarddatentyp für die Adressierung von Fließkommazahlen in Java. Das float-Schlüsselwort kann ebenfalls zur Deklaration von Fließkommazahlen verwendet werden, hat aber eine geringere Genauigkeit als der Double-Typ.
Wann benutzt man int?“Int” ist die Abkürzung für “integer” (Ganzzahl) und ist ein grundlegender Typ, der im eingebauten Compiler verwendet wird, um numerische Variablen zu definieren, die ganze Zahlen enthalten. “Int” wird von vielen Programmiersprachen erkannt, darunter C++, C# und C++.
Für was steht double?Double (englisch und französisch double ‚doppelt') steht für: Double (Film), einen Ersatzdarsteller für ausgewählte Drehszenen. Double, anderer Begriff für Doppelgänger. Double (Musik), in der Musik die Variation eines Suitensatzes.
|