- 01 Jul 2024
- 8 Minutes to read
- Print
- DarkLight
- PDF
Systemfunktionen
- Updated on 01 Jul 2024
- 8 Minutes to read
- Print
- DarkLight
- PDF
Allgemeine Systemfunktionen
EVAL | Format: sRet = EVAL(sVariablenname) Zweck: Eruiert den den Inhalt einer Variablen oder eines Frageparameters falls es diesen namentlich gibt. Diese Funktion kann ineinander geschachtelt werden. Mit ihr kann man auch Formeln auswerten. Beispiel: A = "B" B = "C" C = "D" D = 1000 E = 11 : F = 89 : sSumme = "E+F" Erg1 = EVAL(A) !Erg1 = "C" Erg2 = EVAL(EVAL(EVAL(A))) !Erg2 = 1000 Erg3 = EVAL("A") !Erg3 = "B" Erg4 = EVAL(sSumme) !Erg4 = 100 |
DEFINED | Format: DEFINED [ ( ] Variablename [ ) ] Zweck: Legt fest, ob die Variable Variablename vorhanden (deklariert) ist. Bemerkungen: Diese Funktion liefert TRUE oder FALSE abhängig davon ob Variablename existiert. Beispiel: |
DELETE | Format: DELETE Variable Zweck: Löscht die Variable aus der Variablenliste und gibt den Speicherplatz frei. Bemerkungen: Dieser Befehl wird verwendet um Zwischenvariablen zu löschen, die für die weitere Verarbeitung uninteressant sind, jedoch das System nur unnötig belasten. Beispiel: a = 10:b = 20:c = 30:d = 40 DELETE a : DELETE b a = c ! OK d = b ! Fehler! (Variable b wurde gelöscht) |
Zeichenkettenfunktionen
LEN | Format: v = LEN(sString) Zweck: Ermittelt die Anzahl der Zeichen in sString Bemerkung: sString ist ein Zeichenketten-Ausdruch. Nicht druckbare Zeichen werden auch berücksichtigt. Beispiel: sProg = "BASIC PROGRAMM" 1 = LEN(sProg + "123") MESSAGE 1 !Ausgabe 17 |
LEFT$ | Format: sRet = LEFT$(sString, n) Zwecks: Übergibt die am weitesten links liegenden n Zeichen der Zeichenkette sString Bemerkung: sString ist ein Zeichenketten-Ausdruck. n ist die Anzahl der Zeichen, die das Ergebnis enthalten soll. Ist n größer als LEN (sString), wird sString übergeben. Ist n gleich 0 wird "" übergeben. Beispiel: sProg = "BASIC PROGRAMM" sErg = LEFT$(sProg, 5) MESSAGE sErg !Ausgabe "Basic" |
RIGHT$ | Format: sRet = RIGHT$(sString, n) Zweck: Übergibt die am weitesten rechts liegenden n Zeichen der Zeichenkette sString. Bemerkung: sRet ist ein Zeichenkette-Ausdruck, also ein String. n ist ein ganzahliger Ausdruck, der die Anzahl der Zeichen angibt, die im Ergebnis stehen sollen. Ist n größer oder gleich LEN (sString), wird sString übergeben. Ist n gleich 0 wird eine leere Zeichenkette "" übergeben. Beispiel: a = "BASIC PROGRAMM" b = RIGHT$(a, 8) MESSAGE b !Ausgabe "PROGRAMM" |
MID$ | Format: sRet = MID$(sString, n, m) Zwecks: Übergibt die angeforderten Teil einer gegebenen Zeichenkette sString Bemerkung: sString ist einer Zeichenketten-Ausdruck. n ist ein numerischer Ausdruck im Bereich von 1 bis 255 m ist ein numerischer Ausdruck im Bereich von 1 bis 255 Beispiel: ! 1 3 5 7 9 a = "ANOTHER BASIC PROGRAMM" b = MID$(a, 9, 5) MESSAGE b !Ausgabe "BASIC" |
INSTR | Format: sRet = INSTR(n, sX, sY) Zweck: Übergibt die Position des ersten Auftretens von sY in sX, beginnend mit Position n. Bemerkung: n muss ein gültiger numerischer Ausdruck sein. Wird n nicht angegeben, so wird n auf 1 gesetzt. Wird die Zeichenkette nicht gefunden, wird als Ergebnis Null zurückgegeben. Wird die Zeichenkette gefunden, wird die Position zurückgegeben. Beispiel: a = "12 08 17 45 33 21 09 03 17" p = INSTR(1, a, "09") s = "09 an Stelle" + STR$(p) + "gefunden!" !s = 09 an Stelle 19 gefunden! |
STRING$ | Format: sRet = STRING$(n, m) sRet = STRING$(n, sX) Zweck: Übergibt eine zeichenkette der Länge n, deren Zeichen alle aus dem ASCII-Code m oder dem ersten Zeichen von sX bestehen. Bemerkung: n und m liegen im Bereich 0 bis 255 |
UCASE$ | Format: sRet = UCASE$(sX) Zweck: Wandelt die Zeichenkette sX in Großbuchstaben um und retourniert diese auf sRet. Bemerkung: sX ist ein alphanumerischer Ausdruck (String). Beispiel: sTitel = "der Titel" MESSAGE UCASE$(sTitel) !liefert "DER TITEL" |
LCASE$ | Format: sRet = LCASE$(sX) Zweck: Wandelt die Zeichenkette sX in Kleinbuchstaben um und retourniert diese auf sRet Bemerkungen: sX ist ein alphanumerischer Ausdruck (String) Beispiel: sTitel = "Der Titel" MESSAGE LCASE$(sTitel) !Ausgab: der Titel |
DATE$ | Format: sDate = DATE$ Zweck: Ermittelt das aktuelle Datum und retourniert dieses auf dem String sDate Bemerkung: Eine Zeichenkette aus zehn Zeichen im Format TT:MM:JJJJ wird zurückgegeben Beispiel: sDate = DATE$ !Datum übernehmen MESSAGE "Heute ist der " + sDate !Ausgabe "Heute ist der 25:04:1994" |
TIME$ | Format: sTimeStamp = TIME$ Zweck: Ruft die laufende Zeit ab und retourniert diese auf dem String sTimeStamp Bemerkung: Die laufende Zeit wird als String in der Form HH:MM:SS retourniert, wobei HH die Stunde (00 bis 23), MM die Minute (00 bis 59) und SS die Sekunde (00 bis 59) darstellen. Beispiel: sZeit = TIME$ MESSAGE "aktuelle Zeit: " + sZeit ! Ausgabe "aktuelle Zeit: 12:12:12" |
Konvertierungsfunktionen
CNVRT$ | Format: sRet = CNVRT$(sFormat, n) Zweck: Wandelt den numerischen Wert n in einen alphanumerischen Wert um und benutzt dabei die Formatanweisung spezifiziert in sFormat Bemerkung: n muss ein numerischer Ausdruck, eine numerische Konstante oder eine numerische Variable sein. Parameter sFormat muss eine Konvertierungsangabe sein. Beispiel: Prozensatz = 444 / 1111 * 100 sText = CNVRT$("##,##", Prozensatz) !sText = "39,96" |
STR$ | Format: sRet = STR$(n) Zweck: Wandelt den numerischen Wert n in einen String um. Bemerkungen: n ist ein numerischer Ausdruck. Ist n positiv, enthält die mit STR$ übergebene Zeichenkette eine führende Leerstelle (die Leerstelle ist für das Plusvorzeichen reserviert). die Funktion VAL ist die Gegenfunktion von STR$. Die Funktion wird benutzt, wenn numerische Werte in Zeichenketten eingebunden werden sollen. Beispiel: hyp = SQRT (5 ^ 2 + 7 ^ 2) sText = "Ergebnis: " + STR$(ROUND (hyp,3)) !sText = "Ergebnis = 8.602" |
VAL | Format:nErg = VAL(sZahl) Zweck: Versucht den String sZahl als num. Wert zu interpretieren und gibt diesen auf nErg zurück Bemerkungen: sZahl ist ein Zeichenketten-Ausdruck. Die Funktion VAL entfernt Leerstellen, Tabulatoren und Zeilenvor-schubzeichen aus der Zeichenkette des Arguments, um das Ergebnis bestimmen zu können. Beispiel: sZahl = "123.34" : nErg = VAL(sZahl) !v="123.34" sZahl = "a123.34" : nErg = VAL(sZahl) !v="0" |
CHR$ | Format: Zeichen = CHR$(nAsciiC) !Ascii-Zeichen ermitteln CHR$ (65) entspricht "A" |
ASC | Format: nAsciiC = ASC(Zeichen) !Ascii-Code ermitteln ASC ("?") entspricht 63 |
DEG | Format: erg = DEG(Zahl) !Wandelt Radianten in Grad um DEG (PI/4) entspricht 45° Grad |
RAD | Format: erg = RAD(Zahl) !Wandelt Grade in Radianten um RAD (90) entspricht 3.14159... (PI) |
Mathematische Funktionen
ABS | Format: erg = ABS(Zahl) !Liefert den Absolutbetrag von Zahl (Betragsfunktion!) erg = ABS(-10.5) !erg = 10.5 |
SGN | Format: erg = SGN(x) !Liefert das Vorzeichen des Ausdruckes x (Signumfunktion) erg = SGN(5-10) !erg = -1 da x<0; liefert 0 bei x=0 und 1 falls x > 0 |
MAX | Format: v = MAX ( x, y [ , z ... ] ) Zweck: Übergibt den Maximalwert der angegebenen Variablen Beispiel: DIMBr(4) Br(01)= 120:Br(02) = 140: Br(03)= 112: Br(04) = 170 m = MAX(Br(1), Br(2), Br(3), Br(4)) s = "Der höchste Wert ist "+ STR$(m) !s="Der höchste Wert ist 140" |
MIN | Format: v = MIN( x, y [ , z ... ] ) Zweck: Übergibt den Minimalwert der angegebenen Variablen. Beispiel: Breite = 1400: Hoehe = 2800 myMin = MIN(Breite,Hoehe) !myMin = 1400 |
SQR | Format: erg = SQR(Zahl) !Quadrat des Wertes erg = SQR(8) !8² = 8*8 = 64 |
SQRT | Format: erg = SQRT(Zahl) !Quadratwurzel berechnen erg = (64) ^(1/3) !Dritte Wurzel -> liefert 4 |
^ | Format: erg = (16) ^ 2 ! = 256, Hochoperator -> bitte Basis immer in Klammer setzen |
EXP | Format: erg = EXP( x )!Errechnet die Exponentialfunktion von x, wenn x=1 -> exp(x) = E |
LN | Format:erg = LN(Zahl) !liefert den Logarithmus naturalis von zahl |
LOG | Format:erg = LOG (Zahl) !liefert den Logarithmus zur Basis 10 |
PI | Die Kreiszahl PI = 3,14159… |
E | Die Eulersche Zahl E = 2,71828… |
INT | Format:erg = INT (2.7) !Liefert den ganzzahligen Wert -> hier die 2 |
ROUND | Format:erg = ROUND (2.7 [,n]) !Rundet kaufmännisch auf, in diesem Fall 3 !n steht für die Anzahl der Nachkommstellen |
MOD | Format:erg = 14 MOD 5 !Eruiere ganzzahligen Rest -> hier 4! |
Winkelfunktionen
Alle Winkelfunktionen benötigen im Argument den Winkel in Radianten
SIN | Format:erg = SIN (n) !message sin(90 * PI / 180) liefert 1 |
COS | Format: erg = COS (n) |
TAN | Format:erg = TAN (n) |
ASIN | Format: winkelInRad = ASIN (n) !Arcus Sinus |
ACOS | Format:winkelInRad = ACOS (n) !Arcus Cosinus |
ATN | Format:winkelInRad = ATN (n) !Arcus Tangens |
2D-Gradfunktionen
SPLIT | Format: StreckenzugListe = SPLIT(Profil, Gerade) Zweck: Ein Profil kann z.b. in zwei Teile geschnitten werden. Die Variable Gerade spezifiziert die Strecke, wie z.b. gerade = SEGMENT([100,0],[100,100]). Kann das Profil geteilt werden so enthält StreckenzugListe zwei Teile die wiederum vom Typ Liste sind. Andere Beispiele: |
EXTRUDE | Format: Profil = EXTRUDE(ProfilAlt, lstAbstaende) Profil = EXTRUDE(ProfilAlt, nAbstand) Zweck: Ein Profil kann vergrößert bzw. verkleinert werden. Dies kann über verschiedene Abstände oder überall gleich mit einem Abstand realisiert werden. (lstAbstaende.NUM muß gleich ProfilAlt.NUM sein!) Beispiel: Profil mit 4 Streckenzügen und 2 Bögen vor und nach negativem EXTRUDE! S1 = SEGMENT(P1, P2) S2 = SEGMENT(P2, P3) K3 = ARCFROMSTRINGH(P3,P4,100) lstP={S1,S2,K3,S4,K5,S6} lstA={-10,-5,-5,-5,-5,-5} lstN=EXTRUDE(lstP, lstA} |
DISTANCE | Format: Vd = DISTANCE(V, AB) Zweck: Ermittelt den geringsten Abstand zwischen einem Punkt und einer Geraden. Beispiel: A = [3,0] B = [7,4] AB = SEGMENT(A,B) P = POINT(3,4) d = DISTANCE(P, AB) !von P aus mit [-2,2] auf AB P_AB = SEGMENT(P, P+d) !Vektoraddition MESSAGE P_AB.MOD !Wurzel aus 8 = 2.828... |
INTERSECTION | Format: lstPunkte = INTERSECTION(gerade1/bogen, gerade2/bogen) lstPunkte = INTERSECTION(gerade1/bogen, gerade2/bogen, UNRESTRICTED) Zweck: Ermittelt die Schnittpunkte zwischen einer/einem Geraden/Kreisbogen und einer/einem anderen Geraden/Kreisbogen. Das Ergebnis kann eine leere Liste sein, oder Liste mit einem oder zwei Schnittpunkten (Kreisbogen mit Gerade). Die Option UNRESTRICTED verlängert beide Geraden ins Unendliche – somit wird garantiert wenn die Geraden nicht parallel sind, das immer ein Schnittpunkt gefunden wird. Beispiel: g1 = SEGMENT([0,0],[1,1]) g2 = SEGMENT([1,0],[0,1]) lstP = INTERSECTION(g1, g2) !lstP = {[0.5,0.5]} |
ADJUST | Format: ErgPolyline = ADJUST( Liste ) Zweck: Die Funktion ADJUST erstellt eine Polyline aus einer Liste geometrischer Objekte. Bemerkungen: ErgPolyline ist eine Polyline, die von ADJUST erstellt wird. Liste ist eine Liste geometrischer Objekte, zB: Strecken und Kreisbögen, die keinen geschlossenen Verlauf bilden. Falls Liste bereits eine Polyline ist, passiert nichts weiter: Die Polyline wird unverändert in ErgPolyline zurückgegeben. Beispiel: S1 = SEGMENT([1,2],[6,2]) ! 1. OBJEKT: STRECKE S2 = SEGMENT([7,2],[8.5,9.5]) ! 2. OBJEKT: STRECKE K3 = ARC([6,7],[8,7],PI/3) ! 3. OBJEKT: KREISBOGEN S4 = SEGMENT([6,9],[4,9]) ! 4. OBJEKT: STRECKE S5 = ARC([4,7],[4,9],PI) ! 5. OBJEKT: KREISBOGEN S6 = SEGMENT([2,7],[3,2]) ! 6. OBJEKT: STRECKE LST = {S1, S2, K3, S4, K5, S6} ! LISTE IST NICHT ZUSAMMENHÄNGEND PL = ADJUST(LST) ! VERBINDEN DER LISTE |
INSIDE | Format: bRet = INSIDE(Punkt, lstProfil) Zweck: Die Funktion INSIDE prüft, ob ein Punkt innerhalb oder außerhalb von lstProfil liegt Bemerkungen: bRet hat den Wert 1 wenn der Punkt innerhalb oder auf der Polyline lstProfil liegt, sonst 0! Punkt vom Typ VECTOR wird überprüft. lstProfil ist eine geschlossene Polyline (beliebige Strecken und Kreisbögen). Beispiel: !Polyline zusammenstellen S1 = SEGMENT([2,1], [13.5,0.5]) K2 = ARC([13.5,5.5], [13.5,0.5], -PI/2) K3 = ARC([10,2.5], [8.5,5.5], PI/2) K4 = ARC([9.5,3.5], [7,1], -PI/2) K5 = ARC([7,3], [7,6], PI/2) K6 = ARC([2,3], [4,3], -PI/2) !Sicherstellen, daß die Polyline geschlossen ist PL = ADJUST ({S1, K2, K3, K4, K5, K6}) !Einige beliebige Punkte definieren V1 = [5,2]: V2 = [11,5] :V3 = [8,5] !SP wird als Schnittpunkt erzeugt V4 = [5.97,3.5] S2 = SEGMENT([3,4],[5,4]) SP = INTERSECT(S2, K5) !SP ist eine Liste !Die einzelnen Punkte prüfen Erg1 = INSIDE(V1, PL) !V1 liegt innerhalb, Erg1 = 1 Erg2 = INSIDE(V2, PL) !V2 liegt außerhalb, Erg1 = 0 Erg3 = INSIDE(V3, PL) !V3 liegt innerhalb, Erg1 = 1 !SP[1] liegt genau auf PL, Erg1 = 1 Erg4 = INSIDE(SP[1], PL) !Wert von SP[1]= [4.17157, 4] !Ein Punkt ganz knapp neben SP[1] liegt außerhalb, Erg1 = 0 Erg5 = INSIDE([4.17157, 4.0001], PL) |
ROTATE | Format: ergObj = ROTATE(obj, drehwinkel) Zweck: Dreht ein Objekt um einen bestimmten Winkel. Das Zentrum ist [0,0] Bemerkungen: obj kann ein Objekt vom Typ VECTOR, SEGMENT, ARC oder Polyline (Profil) sein drehwinkel ist ein Winkel im Bogenmaß. Bei einem DrehWinkel von 2 * PI (360 °) wird das Objekt ergObj wieder auf das Objekt obj abgebildet Beispiel: A = [3,1] B = [2,5] AB = SEGMENT(A, B) AB2 = ROTATE(AB, PI/2) !AB2 hat die Punkte [-1,3] und [-5,2] !tan alpha = H / B p1 = [3,4] : p2 = [4, 3] p3 = ROTATE(p1, -(ATN(4/3)-ATN(3/4))) |
SCALE | Format: erg = SCALE(obj, faktor) Zweck: Skaliert einen Vektor oder einen Streckenzug um einen Faktor Beispiel: seg1 = SEGMENT([0,0],[3,4]) !seg1.mod = 5 seg2 = SCALE(seg1, 2) !seg2.mod = 10 |