19. Mengen-Typen
Mit dem Datentyp Set können Mengen mit bis zu 256 Elementen definiert werden. Die Elemente können von einem ordinalen Basistyp wie char sein, oder Teilbereiche von char, von integer oder von einem Aufzählungstyp. Als Konstante werden Mengen mit eckigen Klammern, z.B. ['a','e','i','o','u'], geschrieben.
Mengentypen sind eine Besonderheit von Pascal. Sie erlauben es viele Vergleiche und Abfragen prägnanter zu formulieren und minimieren damit Fehler.
Mögliche Verknüpfungen von Mengen sind:
| a + b | ergibt die Vereinigungsmenge a ∪ b. |
| a * b | ergibt die Schnittmenge a ∩ b. |
| a - b | ergibt die Differenzmenge a \ b. |
a ∪ b = { x | x∈a oder x∈b }
a ∩ b = { x | x∈a und x∈b }
a \ b = { x | x∈a und x ∉ b }
Folgende Bedingungen können abgefragt werden:
| e IN a | ergibt true, wenn e ∈ a, andernfalls false. |
| a = b | ergibt true, wenn a und b identsich sind. |
| a <> b | ergibt true, wenn a und b verschieden sind. |
| a <= b | ergibt true, wenn a ⊂ b, andernfalls false. |
| a >= b | ergibt true, wenn a ⊃ b, andernfalls false. |
Beispiel für die Mengenoperationen a + b , a * b und a - b :
unit Unit1;
interface
. . .
type
TMenge = set of char;
var
Form1: TForm1;
a, b : TMenge;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
a := ['a','b','c','d','e','f','g','h','i'];
b := ['a','e','i','o','u'];
end;
procedure TForm1.ausgeben(s:string; a:TMenge);
var i: Char;
begin
Memo1.Lines.Add('');
Memo1.Text := Memo1.Text + s + '= { ';
for i := ' ' to 'z' do
if i in a then
Memo1.Text := Memo1.Text + i + ' ';
Memo1.Text := Memo1.Text + '}';
Memo1.Lines.Add('');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ausgeben(' a ',a);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ausgeben(' b ',b);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ausgeben('a+b',a+b);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
ausgeben('a*b',a*b);
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
ausgeben('a-b',a-b);
end;
Eine nicht ganz ernst zu nehmende Anwendung der Abfrage mit dem Operator IN ist das Lied von den drei Chinesen
procedure TForm1.Button1Click(Sender: TObject);
var s: string;
i: integer;
begin
s := Memo1.Lines[0];
for i:=1 to Length(s) do
if s[i] in ['a','e','i','o','u','ä','ö','ü'] then
s[i] := Edit1.Text[1];
Memo1.Lines.Add(s);
end;
Delphi selbst verwendet Mengen beispielsweise bei der Eigenschaft Font.Style:
Font.Style := []; // keine Textauszeichnung Font.Style := [fsBold]; // Text in fett Font.Style := [fsBold, fsItalic]; // Text in fett und kursiv Font.Style := Font.Style + [fsUnderline] // zusätzlich unterstrichen Font.Style := Font.Style - [fsItalic] // kursiv wieder entfernt
Auch die Eigenschaft BorderIcons =[biSystemMenu,biMinimize,biMaximize,biHelp] ist eine Menge. Sie bestimmt welche Buttons in der Titelleiste des Formulars angezeigt werden. Setzt man
Einführung in das Programmieren mit DELPHI
