Entwickler-Ecke
Sonstiges (Delphi) - Zufallszahl ohne Dublette
Piper44 - Fr 12.01.07 01:46
Titel: Zufallszahl ohne Dublette
Ich möchte z.B. eine Zufallszahl von 1...6 ausgeben. Kommt dann als erstes die 3, so soll sie bei dem nächsten Buttonclick nicht mehr kommen, d.h. die möglichen Zahlen, aus denen die neue Zufallszahl gebildet wird, nehmen um 1 ab, bis keine mehr vorhanden ist.
Das Grundprinzip ist mir klar - wie kann ich jedoch die Dubletten vermeiden und eine Zahl die schonmal erschienen ist nicht mehr ausgeben lassen. Danke für die Hilfe.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var Form1: TForm1; Zufall: Integer;
procedure TForm1.Button1Click(Sender: TObject); begin randomize; Zufall:= random (5)+1; Label1.Caption:=IntToStr (Zufall); end; end. |
Moderiert von
UGrohne: Beitragsformatierung überarbeitet.
Narses - Fr 12.01.07 02:19
Moin!
Die Lösung für das Problem ist sehr einfach durch "Umdenken" (im wahrsten Sinne des Wortes :lol:) zu finden: Du schreibst in das Array die Werte von 1 bis 6 und "schüttelst" dann durch. ;) Das geht optimal mit dem Miller-Yates-Algorithmus.
MILLER YATES :mahn:
cu
Narses
Chryzler - Fr 12.01.07 17:01
Weil ich das öfters brauche und mir nie was richtig gutes einfällt, mach ich das so: Ich nimm ein Array wo alle Zahlen von 1 bis x drinstehen, wähle ein Paar zufällig aus, und vertausche die. Das mach ich dann so ungefährt 3 * x, dann sind die Zahlen schön durchgemischt. Ich seh mir jetzt grad den Miller Yates Algo an, der ist warscheinlich effizienter.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!