Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zufallswort erzeugen - verhindern dass Wort 2x hintereinande (https://www.delphipraxis.net/46355-zufallswort-erzeugen-verhindern-dass-wort-2x-hintereinande.html)

Assun 23. Mai 2005 16:08


Zufallswort erzeugen - verhindern dass Wort 2x hintereinande
 
Hi !

so erzeuge ich zufallswörter :
Delphi-Quellcode:
Var Namen : TStringList;
Zahl : integer;
begin
Randomize;
Namen := TStringList.Create;
Namen.Add('Eros');
Namen.Add('Herbert');
Namen.Add('Anton');
Namen.Add('Hugo');
Namen.Add('Fabian');
Namen.Add('Niemand');
ShowMessage(Namen.Strings[Random(Namen.count)]);
end;
doch wie kann ich verhindern, dass ein Wort doppelt vorkommt ?

Vielen Dank im Voraus !

Gruß Assun

Dax 23. Mai 2005 16:10

Re: Zufallswort erzeugen - verhindern dass Wort 2x hinterein
 
Die Worte, die du bereits benutzt hast, aus der Liste löschen ;)

Sharky 23. Mai 2005 16:16

Re: Zufallswort erzeugen - verhindern dass Wort 2x hinterein
 
Zitat:

Zitat von Dax
Die Worte, die du bereits benutzt hast, aus der Liste löschen ;)

Eine Alternative wäre die Verwendung von einem der vielen Lotto-Funktionen die in der DP herumliegen.
Mit ein/zwei änderungen können die genau das was Du möchtest.

Assun 23. Mai 2005 16:20

Re: Zufallswort erzeugen - verhindern dass Wort 2x hinterein
 
hmmm

Wenn man die Wörter aus der Liste löscht sind sie doch net mehr verfügbar oder ?

kann mal jemand vllt n kleines beispiel machen ? Danke !

marabu 23. Mai 2005 16:23

Re: Zufallswort erzeugen - verhindern dass Wort 2x hinterein
 
Hallo Sebastian,

was hältst du hiervon:

Delphi-Quellcode:
procedure RandomizeStrings(sl: TStrings);
var
  i: integer;
begin
  for i := 1 to sl.Count - 1 do
    sl.Exchange(Pred(i), Pred(i + Random(sl.Count - i)));
end;
Grüße vom marabu

Obergrenze von i optimiert

CalganX 23. Mai 2005 17:05

Re: Zufallswort erzeugen - verhindern dass Wort 2x hinterein
 
Hi,
manchmal fördert auch die Suche, erstaunliches [dp="doppelte einträge löschen"]zu Tage[/dp]. :roll:

Chris

Phoenix 23. Mai 2005 18:05

Re: Zufallswort erzeugen - verhindern dass Wort 2x hinterein
 
Ganzt einfach indem Du Dir z.B. die letzte Zahl merkst und so lange eine neue generieren lässt bis Du eine andere hast:

Delphi-Quellcode:
function getName(lastone: integer) : integer;
var
   Namen : TStringList;
   Zahl : integer;
begin
   Randomize;
   Namen := TStringList.Create;
   Namen.Add('Eros');
   // weitere Namen

   zahl := lastone;
   while (zahl=lastone) do
      zahl := Random(Namen.count)
   ShowMessage(Namen.Strings[zahl]);
   result := zahl
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 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