Einzelnen Beitrag anzeigen

ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Array / Alle Kombinationsmöglichkeiten ausprobieren

  Alt 12. Nov 2005, 18:43
Falls du es dennoch versuchen willst:
Delphi-Quellcode:
procedure resultready(x,y:integer;result:array of integer);
var
  a:array of array of integer;
  i,j:integer;
  text:string;
begin
  setlength(a,x,y);
  for i:=0 to length(result)-1 do
    a[i div x,i mod x]:=result[i];
  // Jetzt ist in a das Quadrat gespeichert. a[0,0] ruft die linke obere Ecke ab.
  // a[x-1,y-1] ruft die rechte untere Ecke ab.
  for i:=0 to x-1 do begin
    text:=text+#13'|';
    for j:=0 to y-1 do
      text:=text+inttostr(a[i,j])+'|';
  end;
  showmessage('got result:'#13+text);
end;

procedure dynamicalfor(x,y,calls,reps:integer;params:array of integer);
var
  paramsnew:array of integer;
  i:integer;
begin
  if calls>0 then begin
    setlength(paramsnew,length(params)+1);
    for i:=0 to length(params)-1 do
      paramsnew[i]:=params[i];
    for i:=1 to reps do begin
      paramsnew[length(paramsnew)-1]:=i;
      dynamicalfor(x,y,calls-1,reps,paramsnew);
    end;
  end else begin
    resultready(x,y,params);
  end;
end;

procedure startcall(x,y,zahlenmoeglichkeiten:integer);
var
  a:array of integer;
begin
  setlength(a,0);
  dynamicalfor(x,y,x*y,zahlenmoeglichkeiten,a);
end;
der Vorgang wird mit der Funktion startcall gestartet. In resultready können dann die einzelnen Ergebinsse verarbeitet werden. Über x/y wird die Rechtecksgröße angegeben, in deinem Fall also 9 und 9. In zahlenmöglichkeiten wird die Anzahl der Zahlen angegeben, di e eingesetzt werden. Bei dir sind das 1-9, also heisst es 9.

hm... der algo funzt nicht so... weiss jemand warum? [edit]mit dem neuen Code funktioniert's jetzt[/edit]

Diese rekursive Methode ist etwa 100 mal langsamer als die, die ich oben beschrieben habe, aber dafür kann sie für jede Zahl verwendet werden.
Michael Enßlin
  Mit Zitat antworten Zitat