Autor Beitrag
Piper44
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Fr 12.01.07 01:46 
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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



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