AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schleifen-Verschachtelungs-Problem

Ein Thema von TheGame1492 · begonnen am 16. Apr 2010 · letzter Beitrag vom 16. Apr 2010
Antwort Antwort
Benutzerbild von TheGame1492
TheGame1492

Registriert seit: 31. Jul 2004
Ort: Berlin
84 Beiträge
 
Delphi XE2 Professional
 
#1

Schleifen-Verschachtelungs-Problem

  Alt 16. Apr 2010, 16:52
Ich möchte eine verschachtelte Schleife schreiben, wo die Tiefe der Schleife dynamisch sein soll, also als Beispiel

Delphi-Quellcode:
_begin:=1;
_end:=3;

list := TStringList.Create;

for i := _begin to _end do
  for j := _begin to _end do
    for k := _begin to _end do
      for l := _begin to _end do
        begin
          list.Add(IntToStr(i)+'|'+IntToStr(j)+'|'+IntToStr(k)+'|'+IntToStr(l));
        end;

Ergebnis:
---------

1|1|1|1
1|1|1|2
1|1|1|3
1|1|2|1
1|1|2|2
1|1|2|3
.
.
.

bis

.
.
.
3|3|2|3
3|3|3|1
3|3|3|2
3|3|3|3


Dies wäre eine Tiefe von 4. Dazu benötigt werden 4 For-Schleifen, wie kann ich das jetzt aber machen, wenn ich zB eine Tiefe von 10 haben möchte,


beispiel:
1|1|1|1|1|1|1|1|1|1
1|1|1|1|1|1|1|1|1|2
1|1|1|1|1|1|1|1|1|3
1|1|1|1|1|1|1|1|2|1
1|1|1|1|1|1|1|1|2|2
1|1|1|1|1|1|1|1|2|3
.
.
.


ohne jetz 10 For-Schleifen zu benutzen, irgendwie steh ich da auf dem Schlauch
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#2

Re: Schleifen-Verschachtelungs-Problem

  Alt 16. Apr 2010, 16:58
Was genau hast du denn damit vor?
Dein Problem lässt sich sicherlich lösen, aber der Ansatz ist falsch/nicht der beste, denke ich.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Schleifen-Verschachtelungs-Problem

  Alt 16. Apr 2010, 17:01
Einfacher als mit For-Schleifen wird es wohl nicht funktionieren.
Alle anderen Schleifentypen sind dafür IMHO umständlicher.
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: Schleifen-Verschachtelungs-Problem

  Alt 16. Apr 2010, 17:04
Am Einfachsten du nutzt ein paar rekursive Aufrufe einer Funktion.

Delphi-Quellcode:
procedure Test(Start, Ende, Rekursion: Integer; SL: TStrings);
  procedure Aufruf(Start, Ende, Rekursion: Integer; SL: TStrings; const S: String);
  var
    i: Integer;
  begin
    if Rekursion <> 0 then
    begin
      for i := Start to Ende do
        Aufruf(Start, Ende, Rekursion - 1, SL, S + IntToStr(i));
    end else
      SL.Add(S);
  end;

begin
  Aufruf(Start, Ende, Rekursion, SL, '');
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  Test(1, 3, 4, Memo1.Lines);
end;
PS: Bei einem Memo könnte ein BeginUpdate eventuell auch nicht schaden.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von TheGame1492
TheGame1492

Registriert seit: 31. Jul 2004
Ort: Berlin
84 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Schleifen-Verschachtelungs-Problem

  Alt 16. Apr 2010, 17:13
Supi thx

mit der rekursion funzt es
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#6

Re: Schleifen-Verschachtelungs-Problem

  Alt 16. Apr 2010, 17:14
Falls es sich bei dem gezeigten erwünschten Ergebnis nicht nur um ein dahergeholtes Beispiel handelt, geht das ganze auch (ganz unrekursiv) damit .

Delphi-Quellcode:
var
  BruteForce: TBruteForce;
begin
  BruteForce := TBruteForce.Create;
  BruteForce.NodeCount := 5; // oder 6 oder 7 oder was auch immer...
  BruteForce.ElementList := BFConstToDynArray(Numeric);
  
  // über "Ergebnisse" iterieren
  Memo1.Lines.Add(BruteForce.Value);
  while not BruteForce.Finished do begin
    Memo1.Lines.Add(BruteForce.NextValue);
  end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz