![]() |
Zufallswörter
Halli Hallo!
Ich bin gerade am raten. Das kann doch garnich so schwer sein so etwas zu programmieren aber ich kriegs einfach net hin! Ich habe 9 Buchstaben zur verfügung U R L T K A D P E . Aus diesen Chars soll man ein Wort bilden. Meine Synapsen reichen dafür ncih emrh aus. Ich randomize mir hier einen zurecht aber kireg das ncih auf die reihe. der soll alle buchstaben irgendwie kombinieren und in ne list box reinhauen! dann guck man halt durch ob was vernünftiges dabei is. So is der Plan. Kann mir mal bitte einer en denkanstoß geben? Mfg Patrick |
Re: Zufallswörter
[wird überarbeitet *g*]
|
Re: Zufallswörter
Hi.
Mit Zufall hat das ja nicht unbedingt was zu tun... Du willst wohl eher alle Möglichkeiten durchprobieren, oder? Ich würde es so machen (Pseudocode):
Code:
[b]Konstante[/b] Bv [i]{ Buchstabenvorrat }[/i] = ('U', 'R', 'L', 'T', 'K', 'A', 'D', 'P', 'E');
[b]Variable[/b] b1, b2, b3 [i]{, ...}[/i] ; [b]für alle[/b] b1 [b]in[/b] Bv [b]tue[/b] [b]für alle[/b] b2 [b]in[/b] (Bv [b]ohne[/b] (b1)) [b]tue[/b] [b]für alle[/b] b3 in (Bv [b]ohne[/b] (b1, b2)) [b]tue[/b] [i]{ ... bis schlussendlich: }[/i] ZuListboxHinzufügen(NeuerString(b1, b2, b3, ...)); |
Re: Zufallswörter
Hat dir dein Lehrer ein Wörerbuch gegeben, um die Worte auf Sinngehalt zu prüfen?
Bei den Buchstaben wird es das einfachste sein, einen String aus allen Zeichen zu nehmen und dann ein paar Mal zwei Buchstaben zufällig auszutauschen. Wenn du das ein paar Hundert mal machst, wirst du an alle Möglichkeiten kommen. Wenn du alle Möglichkeiten brauchst, könntest du es so machen, dass du alle Permutationen der Zahlen 1-9 anzeigen lassen und die Zahlen dann durch Buchstaben ersetzen. |
Re: Zufallswörter
Zitat:
Denn, wieso "ein paar hundert Mal" machen, wenn 81 mal reichen? Wenn man trotzdem Zufall einbauen will, sollte man auch Buchstaben zufällig austauschen. Dabei aber bekannte Kombinationen merken und ausschließen ;) |
Re: Zufallswörter
Zitat:
|
Re: Zufallswörter
Zitat:
|
Re: Zufallswörter
Stichwort: Permutationen. Benutze die Suchfunktion hier oder im Delphi-Forum. Ich (und Andere) haben uns darüber ausgelassen.
|
Re: Zufallswörter
Zitat:
|
Re: Zufallswörter
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Patrick,
ein Denkanstoss wäre das anhängende Beispiel, aber es sind Zufallswörter, die keinen Sinn ergeben ... bye Claus |
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 15:58 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