Datentypen
  • 13 May 2024
  • 5 Minuten zu lesen
  • Dunkel
    Licht
  • pdf

Datentypen

  • Dunkel
    Licht
  • pdf

Artikel-Zusammenfassung

Es gibt 4 Klassen von Datentypen im visuellen Parametersystem.

  • Einfache

(NUM, STRING, )

  • Komplexe

(ARRAY, (VOID), LIST)

  • Mathematische

(VECTOR, SEGMENT, ARC)

  • Streng typisierte

(DotNet-Wrapper Objects)

Der Variablentyp kann immer anhand der TYPE-Funktion abgefragt werden wie z.B.: sTyp = TYPE$(varname)

Einfache Datentypen

Einfache Datentypen wären numerische (Ganzzahlige oder Kommazahlen) oder alpha-numerische Variablen (Strings). Der Typ wird durch die Initialisierung festgelegt:

!Lokale Definitionen --------------------------

DEFINE VARIABLE nArgs = 0        !Ganzzahlig

DEFINE VARIABLE fFaktor = 0.5    !Gleitkommazahl

DEFINE VARIABLE acTempDir = "" !String

!Globale Definitionen -------------------------

maxAnzahl = 20

Komplexere Datentypen

Arrays

Arrays sind indizierte Variablen auf die über einen numerischen Index oder mehrere numerische Indizes auf deren Inhalt zugegriffen werden kann. Diese können sowohl global wie auch lokal definiert werden.

Format:

DIM name ( n [ [ , n ] [ , n ] ... ] ) !Globale Definition

DEFINE VARIABLE name ( n [ [ , n ] [ , n ] ... ] ) !Lokale Definition

Es sind maximal 5 Dimensionen definierbar. Die Anzahl der Elemente darf 100.000 nicht überschreiten. Vor allem bei mehrdimensionalen Arrays sind 100.000 Elemente sehr schnell erreicht, da sich die Dimensionen multiplizieren.

So hätte ein Array mit drei Dimensionen bereits 1.000.000 Elemente. Jedes Element muss durch seinen Namen und die komplette Anzahl seiner Indizes angesprochen werden. Wurde z. B. ein dreidimensionales Array Breite(5,5,5) definiert, kann ein Element nur durch die Angabe aller Indizes angesprochen werden, z. B. durch Breite(1,1,2) = 5.

Die mit DIM definierten Bereiche können erst in einem Ausdruck verwendet werden, wenn ihnen ein Wert zugewiesen wurde – vorher ist dieser Typ unbestimmt (VOID).

DIM arrAbstaende(3)

arrAbstaende(1) = 1

arrAbstaende(2) = "st"

MESSAGE TYPE$(arrAbstaende(3)) !"VOID"

Im Gegensatz zu anderen Programmier- bzw. Makrosprachen müssen hier die Elemente eines Arrays nicht unbedingt einem Typ (Zeichenkette oder numerisch) angehören. Wurde einem Element einmal ein Typ zugeordnet, ist diese Zuweisung bindend.

Es kann also nicht innerhalb eines Makros einem Element zuerst ein numerischer Wert z. B. as(2) = 123 und später eine Zeichenkette durch as(2) = "Vorname" zugewiesen werden.

Arrays können nicht an Prozeduren oder Funktionen übergeben werden!

Zeichenkettenlisten

Eine Zeichenkettenliste ist eigentlich ein formatierter String welcher eine Reihe von Einträgen enthält, die durch ein Standardtrennzeichen (Komma) getrennt sind. Für diese Zeichenkettenlisten stehen einige Funktionen zur Verfügung:

ENTRY(Index, Zeichenkettenliste [ , Trennzeichen ])

Gibt einen Eintrag vom Typ String innerhalb der Zeichenkettenliste zurück, falls der Index größer 0 und nicht größer als NUMENTRIES(Zeichenkettenliste) ist. Über Index steuert man den wievielten Eintrag man gerne zurückhaben möchte. Wird das Trennzeichen nicht angegeben, wird der Standardwert (das Komma) herangezogen.

Bevor man via ENTRY() auf Zeichenkettenlisten zugreift sollte man überprüfen ob der String überhaupt Einträge enthält, ob das richtige Trennzeichen verwendet wird und ob der Index nicht größer als NUMENTRIES(Zeichenkettenliste) ist!

Beispiel:

sTier1 = ENTRY(1, "Anakonda;Barbe;Chamäleon;Dohle", ";") !sTier1 = "Anakonda"


LOOKUP(SuchString, Zeichenkettenliste [ , Trennzeichen ] )

Gibt den Index eines Eintrags innerhalb der Zeichenkettenliste zurück. Suchstring ist die gesuchte Zeichenkette. Zeichenkettenliste ist eine Liste von Strings die durch ein Trennzeichen getrennt sind. Trennzeichen ist ein Zeichen, das zur Trennung der Werte der Liste verwendet werden soll.

Der Standard-Wert ist das Komma. Der Index der ersten Zeichenkette ist immer 1, der der letzten entspricht immer NUMENTRIES(Zeichenkette).

LOOKUP() liefert 0 falls ein Eintrag nicht in der Zeichenkettenliste vorkommt!

Beispiel:

sLaender = "Österreich%Deutschland%Schweiz%Italien" ! % als Trennzeichen

IF LOOKUP("Frankreich", sLaender, "%") = 0 THEN

MESSAGE "Frankreich ist kein gültiges Land!" ! Element der Liste

ENDIF


NUMENTRIES(Zeichenkettenliste [ , Trennzeichen ] )

Gibt die Gesamtzahl der Einträge einer Zeichenkettenliste zurück. Zeichenkettenliste ist ein String der Strings enthält, welche durch ein festgelegtes Trennzeichen voneinander getrennt sind. Das Standardtrennzeichen ist das Komma (,).

Beispiel:

sLaender = "Österreich%Deutschland%Schweiz%Italien" ! % als Trennzeichen

lstLaender = {} ! leere Liste

FOR a = 1 TO NUMENTRIES(sLaender, "%") DO BEGIN ! von 1 bis zur Gesamtzahl

sLand = ENTRY(a, sLaender, "%") ! Eintrag a der Liste

lstLaender = APPEND(lstLaender, sLand) ! In Liste anhängen

END

Listen

Eine Liste ist eine Sammlung von Variablen, die durch Kommas getrennt zwischen geschweiften Klammern geschrieben werden. Diese Variablen können selbst wieder Listen oder andere Datentypen enthalten.

Beispiele wären:

lstP ={2,3,5,7}

für die ersten 4 Primzahlen oder

lstSatz = {{"Mayer", "Fritz", "Holzweg", 13, 4711, "Kloms"}, lstP}

für eine Adresse und Primzahlen. Über die Funktion TYPE$ kann man die einzelnen Listeneinträge nach dem Typ abfragen, wie z.B.:

IF TYPE$(lstSatz[1][1])="STRING" THEN MESSAGE "Nachname ist alphanumerisch!"

Die Anzahl der Element einer Liste bekommt man immer über das .NUM-Attribut und auf die einzelnen Elemente wird mit dem []-Operator zugegriffen. Zusätzlich gibt es noch 5 Funktionen für Listen: APPEND(), INSERTENTRY(), DELETEENTRY(), RCR() und RCL()

Funktion

Verwendung

Beschreibung

APPEND

Liste = APPEND(Liste, Variable)

Hinzufügen am Ende

INSERTENTRY

Liste = INSERTENTRY(Position, Liste, Variable)

An Position einfügen

DELETEENTRY

Liste = DELETEENTRY(Position, Liste)

Listenelement an Position löschen

RCR

Liste = RCR({"a","b","c"})

Tauscht Elemente nach rechts durch

RCL

Liste = RCL({"a","b","c"})

Tauscht Elemente nach links durch

Zugriff

Beispiel

Beschreibung

Liste[i]

Element = Liste[i]

Liefert das i-te Element in der Liste

Liste.NUM

nAnzahl = Liste.NUM

Liefert die Anzahl der Elemente in der Liste auf nAnzahl zurück

Beispiele:

lstAntworten = {} : lstAntworten = APPEND(lstAntworten, "Gelb")

lstAntworten = APPEND(lstAntworten, "Lila") : lstAntworten = APPEND(lstAntworten, "Rot")

nAnz = lstAntworten.NUM

lstAntworten = INSERTENTRY(nAnz-1, lstAntworten, "Blau")

lstAntworten = DELETEENTRY(1, lstAntworten)

!lstAntworten = {"Blau","Lila","Rot"}

MESSAGE lstAntworten[1] !Liefert "Blau"

lstlstMasse = {{400,1600},{2000,2200},{2800,2900}} !Bei Zugriff bei Listen in Listen

MESSAGE lstlstMasse[3][1] !Verwendung von [i][j] -> liefert 2800!

MESSAGE lstlstMasse[3].NUM !Ergibt 2

lstBeispiel = {"a","b","c"}

lstErg = RCR(lstBeispiel) !liefert {"c","a","b"}

Mathematische Datentypen

Für math. Berechnungen und die Grafikprogrammierung gibt es 3 Datentypen:

Vektoren

(Typ VECTOR)

Kreise / Kreisbögen

(Typ ARC)

Streckenzüge

(Typ SEGMENT)

Vektoren (VECTOR)

Ein Vektor V wird definiert als eine einreihige Matrix. In der zweidimensionalen Vektorarithmetik besteht ein Vektor V aus zwei reellen Zahlen ( x und y ), die seine zwei Koordinaten im kartesischen Koordinatensystem darstellen. Weitere Merkmale des Vektors sind sein Zahlenwert L (Betrag) und seine Richtung a. Er wird graphisch meist durch einen Pfeil wiedergegeben, der auch über dem Namen zur Kennzeichnung als Vektor verwendet wird. Ein Punkt repräsentiert eine eindeutige Position in einem zweidimensionalen kartesischen Koordinatensystem und kann mittels eines Vektors definiert werden. Die Begriffe Vektor und Punkt können deshalb analog verwendet und miteinander getauscht werden.

Definition in der Makrosprache:

durch die Funktion Vector

V1 = VECTOR(X,Y)

durch zwei Zahlen zwischen eckigen Klammern

V1 = [X,Y]

durch die Funktion Point

V1 = POINT(X,Y)

durch Polar-Funktion mit Länge und Winkel in Rad

V1 = POLAR(200, PI/4)

X = 10 : Y = 20

V1 = VECTOR(X,Y) ! 1. Möglichkeit

V1 = [X,Y]             ! 2. Möglichkeit

V1 = POINT(X,Y)    ! 3. Möglichkeit

V1 = POLAR(SQRT(X*X+Y*Y), ATN(X/Y)) ! 4. Möglichkeit (Polarform)

Attributname

Bedeutung

V1.X

X-Koordinate des Vektors

V1.Y

Y-Koordinate des Vektors

V1.ARG

Winkel (Argument) des Vektors

V1.MOD

Betrag (Modulus) des Vektors

V1.NORM

orthonormaler Vektor des Vektors (nur Lesen)

Kreise und Kreisbögen

n Profilen können Streckenzüge und Kreise und Kreisbögen verwendet werden. Ein Beispiel für ein Profil wo Streckenzüge und ein Kreisbogen vorkommen wäre ein Segmentbogenfenster.

Kreise (ARC)

Definition der Makrosprache:

kreis = ARC(Mittelpunkt, StartPunkt, Winkel in Radianten)

Winkel = PI/4  !8tel Kreis (45° Grad)

Winkel = PI     !Halbkreis

Winkel = 2*PI !Vollständiger Kreis

Kreis = ARC([0,0], [400,0], 2*PI)

Kreisbogen (ARC)

Definition in der Makrosprache:

kb = ARCFROMSTRINGH(Vektor 1, Vektor 2, Sehnenhöhe des Kreisbogens)

p1 = [ 0, 0]

p2 = [700, 0]

p3 = [700, 400]

p4 = [ 0, 300]

Bogen = ARCFROMSTRINGH(p3, p4, 100)

lstSegA = {SEGMENT(p1,p2),

SEGMENT(p2,p3), Bogen,

SEGMENT(p4,p1)}

Attribute von Kreisbogen und Kreissehnen

Attributname

Bedeutung

ARC.START

Anfangsvektor des Kreisbogens

ARC.CENTER

Zentrumsvektor des Kreisbogens

ARC.ENDP

Endvektor des Kreisbogens (wenn er verändert wird und dadurch außerhalb der Kreislinie liegt, wird nur die Bogenlänge geändert und der Endpunkt wieder auf die Kreislinie gesetzt)

ARC.ANG

Verlaufswinkel des Kreisbogens (ANG > 0 bei pos. Umlaufsinn, ANG < 0 bei neg. Umlaufsinn)

ARC.R

Radius des Kreisbogens = Länge der Strecke, die CENTER und START miteinander bilden

ARC.LENGTH

Länge des Kreisbogens

ARC.ARG

Richtungswinkel der Strecke, die CENTER und START miteinander bilden

ARC.STRINGH

Sehnenhöhe des Kreisbogens

Streckenzüge (SEGMENT)

Ein Streckenzug ist immer eine Linie die durch zwei Punkte (P1, P2) definiert ist.

Attributname

Bedeutung

SEGMENT.V1

Anfangsvektor (Punkt1) der Strecke

SEGMENT.X1

X-Koordinate des Anfangspunkts

SEGMENT.Y1

Y-Koordinate des Anfangspunkts

SEGMENT.V2

Endvektor (Punkt2) der Strecke

SEGMENT.X2

X-Koordinate des Endpunkts

SEGMENT.Y2

Y-Koordinate des Endpunkts

SEGMENT.V

Trägervektor der Strecke

SEGMENT.ARG

Richtungswinkel der Strecke

SEGMENT.MOD

Länge der Strecke

SEGMENT.NORM

orthonormaler Vektor der Strecke (Nur Lesen)

Definition in der Makrosprache:

strecke = SEGMENT(Punkt1, Punkt2)

Beispiel:

P1 = [10,10] : P2 = [40, 20]

segStrecke = SEGMENT(P1, P2)


War dieser Artikel hilfreich?

What's Next