Einzelnen Beitrag anzeigen

OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#6

Re: Hilfe en algorithmus zu entwickeln...

  Alt 22. Jan 2005, 11:13
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.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat