![]() |
Re: Zufallswörter
Zitat:
Für den ersten Buchstaben hast du die volle Auswahl von 9 Zeichen, für den nächsten nur noch 8, dann 7 usw. Das gibt dann einen Ausdruck der Art 9*8*7*...*1=9! (9 Fakultät). 9!=362880 :mrgreen: |
Re: Zufallswörter
Moin,
habe mich auch mal dran versucht...
Delphi-Quellcode:
Aber vorsicht bei langen Worten, dass kann dauern.
procedure TForm.ButtonClick(Sender: TObject);
var KombiListe:TStringList; begin KombiListe:=TStringList.Create; try kombi(KombiListe, 'abc'); // KombiListe enthält nun die Elemente finally KombiListe.free; end; end; procedure TForm.kombi(Liste:TStrings; variable:string; fest:string = ''); var i:integer; begin if length(variable) > 2 then begin for i:=1 to length(variable) do begin kombi(Liste, copy(variable, 1, i-1) + copy(variable, i+1, length(variable)), fest + variable[i]); end; end else begin if length(variable) > 0 then Liste.Append(fest + variable); if length(variable) > 1 then Liste.Append(fest + variable[2]+variable[1]); end; end; Wobei lang hier schon eine Zeichenkette mit 8 Zeichen ist! MfG Thorsten |
Re: Zufallswörter
So gehts:
Delphi-Quellcode:
Optimal ist es nicht, da die Funktion 'NthPermutation' die N.te Permutation einer Zeichenkette liefert und jedesmal von vorne anfängt, zu mischen. Aber egal.
Function NthPermutation (const aString : AnsiString; aCount : Integer) : AnsiString;
Var pos, i, n : Cardinal; chTemp : char; Begin n := Length(aString); result := aString; for i := n downto 2 do begin pos := acount mod i +1; //switch chTemp := result[i]; result[i] := result[Pos]; result[Pos] := chTemp; acount := acount div i; End; End; Procedure TForm1.Button1Click (Sender : TObject); Const sLetters = 'URLTKADPE'; f : Integer; Begin f := 1; For i:=2 To Length (sLetters) do f:=f*i; For i:=1 to f-1 do memo1.lines.add (NthPermutation (sLetters,i)); End; omata's version verwendet Rekursion, die hier mischt den String jedesmal nach einem festgelegten Muster. |
Re: Zufallswörter
@Toxman: Bei doppelten Kombinationen sind es sogar 9^9 Möglichkeiten, also 387420489 Möglichkeiten. Ein Bissel viel für ne Listbox, oder? Der arme User...
|
Re: Zufallswörter
@alzaimar:
Bei nur einem Zeichen kommt bei deiner Variante keine Möglichkeit heraus. Bei zwei Zeichen nur 1 Möglichkeit. Bei drei Zeichen nur 5 Möglichkeiten. irgendwie fehlt da immer eine, oder übersehe ist da jetzt was? Ausserdem sehe ich gerade das da das Schlüsselwort var fehlt und die Variablendeklaration von i. besser ist...
Delphi-Quellcode:
Es werden zusätzlich auch noch Warnungen ausgeschmissen.
procedure TForm1.Button2Click(Sender: TObject);
Const sLetters = 'URLTKADPE'; var f,i : Integer; besser ist...
Delphi-Quellcode:
Warum Integer, wenn negative Zahlen nicht vorkommen können?
Function NthPermutation (const aString : AnsiString; aCount : Cardinal) : AnsiString;
MfG Thorsten |
Re: Zufallswörter
Hupsa: Das war spät, gestern, so gehts aber:
Delphi-Quellcode:
Var
i, f : Integer; Begin f := 1; For i :=2 To Length (sLetters) do f:=f*i; For i:=0 to f-1 do memo1.lines.add (NthPermutation (sLetters,i)); End; |
Re: Zufallswörter
Ich hab was gefunden, wo man der permutation per word ne rechtschreibprüfung unterziehen kann:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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