Thema: Delphi Frage zur Rekursion

Einzelnen Beitrag anzeigen

Hannes22549

Registriert seit: 16. Nov 2005
Ort: Potsdam
20 Beiträge
 
Delphi 7 Professional
 
#1

Frage zur Rekursion

  Alt 8. Nov 2007, 15:15
Hi, also ich suche eine Prozedur, die die Zahlen aus einer ListBox in Zweiergruppen anordnet. D.h. in der ListBox stehen die Zahlen 1, 3, 5, 7. Dann soll in dem Arry festgehalten werden: [1,3 ; 5,7] [1,5 ; 3,7] [1,7 ; 3,5]. Also jedes mit jedem. Mein Code sieht dazu so aus:

Delphi-Quellcode:
procedure TForm1.BitBtn2Click(Sender: TObject);
var wahr:array[1..100] of boolean;
    zahl:array[1..100] of real;
    merk:array[1..50,1..2,1..1280] of real;
    max:Integer;
    i,l:Integer;
    zaeler:Integer;

  procedure rek(wahr:array of boolean;tiefe:integer);
  var l:Integer; //Prüfvariable
      i,ii:Integer;
  begin
    ShowMessage('Tiefe '+IntToStr(tiefe));
    l:=0;
    for i:=1 to max do
      if wahr[i]
        then l:=l+1;
    if l<2 //Prüfung ob noch 2 leere vorhanden sind
      then begin
        zaeler:=zaeler+1;
        exit;
      end
        else begin
          for i:=1 to max-1 do begin
            if wahr[i] then begin //wenn der Platz noch frei ist...
              wahr[i]:=false;
              ShowMessage('Max'+IntToStr(max));
              ShowMessage('1.'+IntToStr(i));
              for ii:=i+1 to max do begin
                if wahr[ii] then begin
                  wahr[ii]:=false;
                  ShowMessage('2.'+IntToStr(ii));
                  merk[tiefe,1,zaeler]:=zahl[i]; //Zahlenpaar merken
                  merk[tiefe,2,zaeler]:=zahl[ii];
                  rek(wahr,tiefe+1);
                end;
              end;
            end;
          end;
        end;
  end;

begin
  max:=ListBox1.Count;
  for i:=1 to max do begin
    zahl[i]:=StrToFloat(ListBox1.Items.Strings[i-1]);
    wahr[i]:=true;
  end;

  zaeler:=0;
  rek(wahr,1);
end;
Wo ist mein Fehler? Es kommt Stacküberlauf...

Danke schon mal im Voraus!

P.S.: Sorry, ich bin noch Anfänger...
Achtung!!! Anfänger am Start!!!
  Mit Zitat antworten Zitat