So ein ähnliches Programm musste ich vor einiger Zeit für KI in Prolog schreiben, da ist das gar nicht so kompliziert ;c)
So könnte man es machen:
Delphi-Quellcode:
program DPZusammenRechnen;
uses
Windows, SysUtils;
{$R *.RES}
type ISet = set of Byte;
var
numbers: Array Of Byte;
results: ISet;
i: Integer;
procedure AddArray(current: Array Of Byte; var result: ISet);
var i, j: Integer; next: Array Of Byte; sum: Byte;
begin
sum := 0; // Aktuelle Summe initialisieren (für current)
SetLength(next, High(current));
// Summieren
for i := 0 to High(current) do begin
sum := sum + current[i];
// Alle Zahlen in current außer current[i] in next kopieren
for j := 0 to High(current) do begin
if j < i then begin
next[j] := current[j];
end else if (j > i) then begin
next[j - 1] := current[j];
end;
end;
// Wenn next ein oder mehrere Werte enthält, das ganze von neuem
if (Length(next) > 0) then
AddArray(next, result);
end;
// Aktuelle Summe der Ergebnismenge hinzufügen
result := result + [sum];
end;
begin
// Array füllen
SetLength(numbers, 6);
for i := 0 to High(numbers) do begin
numbers[i] := 1 shl i;
WriteLn(numbers[i]);
end;
WriteLn;
AddArray(numbers, results);
// Ergebnismenge ausgeben
for i := 0 to 255 do begin
if i in results then begin
WriteLn(IntToStr(i));
end;
end;
ReadLn;
end.
Ich hab' allerdings außer für das Ergebnis jetzt nur Arrays verwendet, aber vom Prinzip her geht's mit Mengen ja so ähnlich.