![]() |
"Schlossknack"-Algorithmus
Hallo DPler,
ich weiß nicht mehr weiter. :) Ich möchte sozusagen den "Schlossknack"-Algorithmus anwenden, d.h. eine Variable von 1 bis 9 hochählen, wenn 9, dann die nächste auf 1,... Nun hat mein "Schloss" aber x Stellen. Die einzige möglichkeit, die mir einfiel, war ein dyn. Array of Integer zu erstellen, ihm die Länge zu geben und dann die einzelnen Integer-Zahlen hochzuzählen. Will der Compiler aber nicht :evil: ... Gibts noch ne andere Möglichkeit? MfG Steffen //Edit: besserer Titel |
Re: for-Schleife x-Mal
Hi,
Verschachtelte for-schleifen? Oder versteh ich was falsch?
Delphi-Quellcode:
Gruß
var Schloss: Array[1..Stellen] of Integer;
for i:= 1 to Stellen do begin for j:= 1 to 9 do inc(Schloss[i]); end; Neutral General |
Re: for-Schleife x-Mal
Das Problem hatte ich auch mal. Die Lösung ist Rekursion. Du setzt eine globale Variable auf x. Dann erstellst du eine Funktion:
Delphi-Quellcode:
Edit: Neutral Generals Lösung scheint aber besser zu sein.
procedure schlossknack(laenge:integer);
begin //mach irgendwas mit globalen Variablen if laenge>1 then schlossknack(laenge-1); end; |
Re: for-Schleife x-Mal
@Neutral General:
Soweit ich sehe, zählt dieser Algorithmus einfach alle Variablen von 1 bis 9 hoch. Aber wenn die nächste eins hochgesetzt wird, sollte erst die ganz erste wieder von 1 bis 9 gezählt werden, so als wölltest du ein Schloss knachen. du versuchst es folgendermaßen (bei einem Schloss mit 3 Stellen:
Code:
1 1 1
2 1 1 3 1 1 ... 9 1 1 1 2 1 2 2 1 3 2 1 ... 8 9 3 9 9 3 1 1 4 2 1 4 ... |
Re: "Schlossknack"-Algorithmus
Nun, du musst eben bei jedem Aufruf der ersten for-Schleife die aktuelle Schlossvariable auf 0 setzen: Schloss[i]:=0;
Und der Stackbedarf ist deutlich besser als bei der Rekusrion, ich versuche mal, mein Prog, indem ich das durch Rekursion gelöst habe, zu beschleunigen. DANKE, NEUTRAL GENERAL!!! |
Re: for-Schleife x-Mal
Zitat:
111 112 113 ... Wieso einfach, wenns auch schwierig geht? ;) |
Re: "Schlossknack"-Algorithmus
@Torpedo: klaro, aber Start und Ende bei jeder Stelle sind dort, wo ich das Ganze brauche auch variabel :mrgreen:
@Apollonius: Werd mal überlegen :) |
Re: "Schlossknack"-Algorithmus
Zitat:
Oder ist das Problem wie man aus den einzelnen Stellen eine ganze Zahl macht? Ziffer1 = 2 Ziffer2 = 4 Ziffer3 = 6 Zahl = Ziffer1*100+Ziffer2*10+Ziffer3 |
Re: "Schlossknack"-Algorithmus
Du könntest auch einfach meine Komponente verwenden :mrgreen:
![]() |
Re: "Schlossknack"-Algorithmus
Ich nehme alles zurück!!! Neutral Generals Lösung funktioniert nicht, es sei denn, ich habe was falsch implementiert. Man muss ja sozusagen x ineinanderverschachtelte for-schleifen haben. Da fällt mir nichts anderes ein als die Rekursion, also:
Delphi-Quellcode:
Im Prinzip ist das eine Simulation von laenge ineineanderverschlachtelten for-Schleifen.
var schloss:array[1..stellen] of integer;
procedure angriff(laenge:integer); var i:integer; begin if laenge=1 then begin for i:=0 to 9 do begin schloss[laenge]:=i; knackdasschloss(schloss); end; end else begin for i:=0 to 9 do begin schloss[laenge]:=i; angriff(laenge-1); end; end; end; //Aufruf angriff(stellen); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz