Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Eine Frage zur Random-Funktion


Transmechanicus - Di 03.06.03 18:59
Titel: Eine Frage zur Random-Funktion
Ich habe eine Frage zur Random-Funktion. Selbige soll ja angeblich Zufallszahlen erzeugen - blöderweise bekomme ich in 90% der Fälle lauter "gleiche" Zufallszahlen.

Folgender Auszug aus meinem Programm sollte EIGENTLICH zufällig aus einer Ini-Datei bestimmte Werte auslesen um so ein zufälliges Gedicht zu erstellen.

Hier der Quelltext:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
inhalt:=worte.ReadString('Einleitung',inttostr((random(i))+1), '-')+' ';
randomize;
inhalt:=inhalt+worte.ReadString('Verben', inttostr(random(i)+1), '-')+' ';
randomize;
inhalt:=inhalt+worte.ReadString('Adjektive', inttostr(random(i)+1), '-')+' ';
randomize;
inhalt:=inhalt+worte.ReadString('Nominative', inttostr(random(i)+1), '-')+' ';
randomize;
inhalt:=inhalt+worte.ReadString('Endreim', inttostr(random(i)+1), '-');

Bei zwei durchläufen erhalte ich folgende Zufallszahlen:
4
4
4
4
4
4
4
8

Ach ja: die Variable i hat den Wert 9

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.


Terra23 - Di 03.06.03 19:08

Dann mußt du dem Programm doch lediglich sagen, daß nach jedem Durchlauf die Zufallszahlen gespeichert werden sollen, sprich wenn deine erste Zahl die 4 ist, soll er danach nur eine Zufallszahl ausgeben, die nicht die 4 ist. Wenn du sagst, das Programm darf keine Zahlen doppelt lesen, mußt du es auch dem Programm mitteilen. Es kann ja nicht ahnen, daß es dir nicht paßt. :mrgreen: Und das so oft die 4 vorkommt, nenne ich Zufall. :-)


Phantom1 - Di 03.06.03 19:13

du darfst den zufallsgenerator (Randomize) nur ein mal initialisieren zb. in der FormCreate !!!!


Transmechanicus - Di 03.06.03 19:51

Wow viele Dank - letzteres war das Problem!


Delete - Mi 04.06.03 01:30
Titel: Re: Eine Frage zur Random-Funktion
Transmechanicus hat folgendes geschrieben:
Ich habe eine Frage zur Random-Funktion. Selbige soll ja angeblich Zufallszahlen erzeugen - blöderweise bekomme ich in 90% der Fälle lauter "gleiche" Zufallszahlen.

Falls du blind tippen solltest, solltest du trotzdem mal deinen Blick auf die Tastatur senken und der F1 Taste mal 5 Minuten deiner kostbaren Zeit schenken:
Zitat:

Randomize initializes the built-in random number generator with a random value (obtained from the system clock). The random number generator should be initialized by making a call to Randomize, or by assigning a value to RandSeed.

Do not combine the call to Randomize in a loop with calls to the Random function. Typically, Randomize is called only once, before all calls to Random.

Man beachte die Hervorhebungen im zweiten Absatz. :roll: