Es soll die Potenzmenge einer gegebenen Menge ermittelt werden.
Lösung in Delphi - Quelltext und Ausgabe
procedure TForm1.bPotenzmengeClick(Sender: TObject);
type
TMenge = set of char;
TPMenge = array of TMenge;
const
M : TMenge = ['a','b','c','d'];
var
PM : TPMenge;
i,n : integer;
function MengeToString(M : TMenge) : string;
var
s : string;
i : integer;
begin
s := '[';
for i := 0 to 255 do
if char(i) in M then s := s + char(i)+',';
if M <> [] then s := copy(s,1,Length(s)-1);
s := s + ']';
result := s;
end;
function erstesElement(M : TMenge) : char;
var
i : integer;
gefunden : boolean;
begin
i := 0; gefunden := false;
while (i < 255) and (not gefunden) do
begin
Inc(i);
gefunden := (char(i) in M);
end;
result := char(i);
end;
procedure ermittelePotenzmenge(M : TMenge; var PM : TPMenge);
var
Element : char;
R : TMenge;
PM1 : TPMenge;
n,i : integer;
begin
Element := erstesElement(M);
if Element = char(255)
then
begin
SetLength(PM,1);
PM[0] := [];
end
else
begin
R := M-[Element];
ermittelePotenzmenge(R,PM1);
n := Length(PM1);
SetLength(PM,2*n);
for i := 0 to n-1 do PM[i] := PM1[i];
for i := n to 2*n-1 do PM[i] := PM1[i-n]+[Element];
SetLength(PM1,0);
end;
end;
begin
ermittelePotenzmenge(M,PM);
mAusgabe.Lines.Add('Menge = '+MengeToString(M));
mAusgabe.Lines.Add(' ');
mAusgabe.Lines.Add('Potenzmenge enthält:');
mAusgabe.Lines.Add(' ');
n := Length(PM);
for i := 0 to n-1 do
MAusgabe.Lines.Add(MengeToString(PM[i]));
end;