Autor Beitrag
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: So 09.02.03 21:33 
Chris1308 hat folgendes geschrieben:
Das ist aber ein Problem von der random-Funktion!
Ich bin sowieso dafür, dass Borland eine neue Funktion schreibt...
Und ich wäre dafür, daß Du erstmal beginnst mit dem Vorhandenen richtig umzugehen. Borland hat sich da schon seine Gedanken gemacht.

@Waldmeister: *Lach* Der Lehrer würde sicher staunen. Funktioniert zwar, aber ist GARANTIERT nicht das was er sehen will. (Sofern er es versteht)
Ist zwar cool. Aber ziemlich mit Kanonen auf Spatzen geschossen, oder ?

Dabei geh ich mal davon aus, daß Du Zahlen[Zahl1] und Zahlen[Zahl2] gemeint hast. Also hier mal richtiger:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
for i:=1 to 10000 do begin 
  zahl1:=Random(49)+1
  zahl2:=Random(49)+1
  tausch:=Zahlen[zahl1]; 
  Zahlen[zahl1] := Zahlen[zahl2]; 
  Zahlen[zahl2] := tausch; 
end;


Moderiert von user profile iconDeCodeGuru: Code- durch Delphi-Tags ersetzt

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
Brueggendiek
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 304

Win 98, Win98SE, Win XP Home
D5 Std
BeitragVerfasst: Mo 10.02.03 01:03 
Hallo Leute!

Da soll ein Programm zur Lottoziehung geschrieben werden und man bricht sich die Finger bei der Random-Auswahl.

Kleiner Tip: baut euch doch die Ziehungsmaschine und legt los!

Realisierung: Eine Stringlist nehmen, die Zahlen von 1 bis 49 zeilenweise als String eintragen.
Dann mit Random(liste.Count) eine Kugel auswählen, den Wert in das Array schreiben und die Kugel (Zeile) aus der Stringlist entfernen.

Dadurch gibt es jede Zahl garantiert nur einmal und man muß nicht suchen, ob die Zahl schon gezogen wurde.
Obendrein wäre hiermit ein Sytem möglich, wo z.B. jedes Element mehrfach vorkommt (z.B. Black Jack, Schwarzer Peter) oder nichtnumerische Werte gezogen werden (alle Kartenspiele)
Diese Methode ist besonders geeignet, wenn man alle Zahlen von a bis b in zufälliger Reihenfolge benötigt.

Alternative: Zahl ziehen, mit allen schon gezogenen Zahlen vergleichen, bis nicht gefunden. Nachteil hier: bei vielen Zahlen (andere Anwendungen mit z.B. 5 aus 6) dauert es am Ende sehr lange, bis der Zufall eine der verbleibenden Zahlen trifft.

Fazit: Bei kleiner Zahl gezogener Werte (wie Lotto) kann man jede Zahl ziehen und prüfen, ob sie gültig ist. Bei vielen Zahlen sollte auf jede Fall die Stringlist her - benötigt pro gezogenem Wert nur 1 Random.

Gruß

Dietmar Brüggendiek
waldmeister
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 136

Win XP
D7 Enterp
BeitragVerfasst: Di 11.02.03 18:47 
zugegeben, mein system is vielleicht nicht das einfachsteste für dieses problem aber sicherlich doch effektiv und es funktioniert auf jeden fall!

_________________
der wald....der meister....der meister des waldes....der waldmeister
nGerrit
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 24.02.04 21:00 
hi also ich hab hier gerade nochmal drin rumgesucht, weil n freund n ähnliches problem hat. und ich hab dann später meinen alten funktionierenden code gefunden.. dachte ich poste den einfach mal fröhlich hier rein :)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
for
  index:=1 to 7
do
  Lottozahlen[index]:=Random(49)+1;
repeat
  ungleich:=true;
  for
    index:=1 to 7
  do
    for
      index2:=1 to 7
        do
          if
           (index<>index2) and (Lottozahlen[index]=Lottozahlen[index2])
          then
            begin
              Lottozahlen[index2]:=Random(49)+1;
              ungleich:=false;
            end;
until ungleich=true;

have fun

nGerrit @2004

Moderiert von user profile iconDeCodeGuru: Code- durch Delphi-Tags ersetzt