Programmiersprache Pascal

Mengendatentypen

Die explizite Unterstützung von Mengen ist nur in relativ wenigen Programmiersprachen vorhanden. Pascal gehört zu den Sprachen, die einen eigenen Mengendatentyp vorsehen.

Ein Mengendatentyp wird wie folgt deklariert:

  TYPE set_typ = SET OF basisdatentyp;
Die Werte von set_typ sind Elemente der Potenzmenge von basisdatentyp, d.h. jede beliebige Menge, die aus Werten des Basisdatentyps gebildet werden kann, ist als Wert von set_typ zulässig.

Der Basisdatentyp muß ordinal sein.
Die Kardinalität des Basisdatentyps muß kleiner oder gleich sein als die Wortlänge des verwendeten Rechners bzw. als ein geringfüges Vielfaches der Wortlänge.
Beschränkungen können z.B. bei 16, 32 oder 256 liegen.

Mengenwerte werden wie folgt angegeben:

  [ wert_x, ..., wert_y ]
wert_x und wert_y müssen dabei Werte des Basisdatentyps sein.
Die leere Menge wird wie folgt angegeben: [].

Beispiel:

  TYPE farbmenge = SET OF (rot, gruen, blau);

  VAR fm1, fm2, fm3 : farbmenge;

  fm1 := [];
  fm2 := [gruen];
  fm3 := [rot .. blau];    { entspricht fm3 := [rot, gruen, blau]; }
Operatoren

Folgende Operatoren sind für Mengendatentypen definiert:

Mengenoperatoren
binäre Operatoren, Operanden und Resultat sind Mengen

  *       Durchschnitt
  +       Vereinigung
  -       Mengendifferenz
Extended Pascal sieht einen weiteren Operator vor:
  ><      symmetrische Differenz
Vergleichsoperatoren
binäre Operatoren, Operanden sind Mengen, Ergebnis ist vom Typ BOOLEAN:
  =       Identität
  <>      Nichtidentität
  <=      Teilmenge (subset)
  >=      Obermenge (superset)
binärer Operator, linker Operand ist Wert aus Basisdatentyp, rechter Operand ist Menge, Ergebnis ist vom Typ BOOLEAN:
  IN      Einschließung (inclusion)
Variablen eines Mengendatentyps können weder eingegeben noch ausgegeben werden.

Beispiel:

  TYPE farbmenge = SET OF (rot, gruen, blau);

  VAR fm1, fm2, fm3, fm4 : farbmenge;
      fv1, fv2, fv3 : farbmenge;
      b1, b2, b3, b4, b5, b6 : BOOLEAN;

  fm1 := [];
  fm2 := [gruen];
  fm3 := [rot, blau];
  fm4 := [rot .. blau];

  fv1 := fm2 * fm3;           { [] }
  fv2 := fm2 + fm3;           { [rot, gruen, blau] }
  fv3 := fm4 - fm3;           { [gruen] }

  b1 := fm3 <= fm4;           { TRUE }
  b2 := fm3 >= fm4;           { FALSE }
  b3 := fm1 = fm2*fm3;        { TRUE }
  b4 := fm3 <> fm4;           { TRUE }

  b5 := rot IN fm3;           { TRUE }

  b6 := 12 IN [0 .. 255];     { liefert in Turbo Pascal TRUE }
  b6 := 12 IN [0 .. 256];     { liefert in Turbo Pascal Syntaxfehler
                                0..256 ist "zu groß" }
Extended Pascal stellt eine Funktion zur Verfügung, um die Kardinalität einer Menge zu bestimmen, d.h. die Anzahl der Elemente, die zur Menge gehören:
  anzahl := Card(menge);


P. Böhme, 08.09.1996