Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zufallswörter (https://www.delphipraxis.net/57457-zufallswoerter.html)

Nikolas 21. Nov 2005 18:55

Re: Zufallswörter
 
Zitat:

Gibt es denn nicht nur 81 (9*9) Möglichkeiten, wie die Buchstaben angeordnet sind? Oder vertu ich mich da gerade?
Du vertust dich gerade :)

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:

omata 21. Nov 2005 19:04

Re: Zufallswörter
 
Moin,

habe mich auch mal dran versucht...

Delphi-Quellcode:
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;
Aber vorsicht bei langen Worten, dass kann dauern.
Wobei lang hier schon eine Zeichenkette mit 8 Zeichen ist!

MfG
Thorsten

alzaimar 21. Nov 2005 19:11

Re: Zufallswörter
 
So gehts:
Delphi-Quellcode:
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;
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.

omata's version verwendet Rekursion, die hier mischt den String jedesmal nach einem festgelegten Muster.

3_of_8 21. Nov 2005 19:14

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...

omata 21. Nov 2005 19:17

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:
procedure TForm1.Button2Click(Sender: TObject);
Const
  sLetters = 'URLTKADPE';
var f,i : Integer;
Es werden zusätzlich auch noch Warnungen ausgeschmissen.
besser ist...
Delphi-Quellcode:
Function NthPermutation (const aString : AnsiString; aCount : Cardinal) : AnsiString;
Warum Integer, wenn negative Zahlen nicht vorkommen können?


MfG
Thorsten

alzaimar 22. Nov 2005 07:42

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;

joel93 24. Jul 2006 17:37

Re: Zufallswörter
 
Ich hab was gefunden, wo man der permutation per word ne rechtschreibprüfung unterziehen kann:
Rechtschreibprüfung (ich glaub 10. von oben)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr.
Seite 2 von 2     12   

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