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 user profile iconUGrohne: 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. Suche in: Delphi-Forum, Delphi-Library 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.