WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Zufallsgenerator für einen Würfel in C (http://www.wcm.at/forum/showthread.php?t=106179)

Ezechiel 20.08.2003 16:21

Zufallsgenerator für einen Würfel in C
 
Ich bräuchte in C einen Würfelzufallsgenerator der mir bei jedem Aufruf der Funktion eine neue 4er Kette von Zufälligen Zahlen bringt die zwischen 1 und 6 liegen. Also praktisch wie bei einem Würfel. Meine bisherigen bemühungen mit random() %7 brachten leider immer die gleichen Zahlen zum Vorschein.

Who-T 21.08.2003 06:07

du musst den seed setzen.

schau dir srandom(int seed); an

wenn du den seed auf die systemzeit stellst, hast du jedesmal eine andere kette.

Ezechiel 21.08.2003 17:24

Das funktioniert ja alles sehr gut nur hab ich das Zeug in einer Funktion stehen und die Funktion führ ich einfach 4 mal durch eine Schleife aus. Jetzt hab ich zwar eine Zufallszahl aber 4x die gleiche. Es sollten aber 4 völlig unterschiedliche zwischen 1 und 6 Befindliche sein.

Meine Zufallsgeneratorfunktion sieht jetzt so aus:

Code:

srandom( time(0) );
        rate=rand() % 7;
        return rate;

Der Funktionsaufruf sieht dazu so aus:

Code:

for (x=0; x<4; x++)
                rate[x] = zufallsgenerator();


Dane 21.08.2003 18:39

folgendes, du musst "srand(7);" am anfang der funktion schreiben dann sollts gehn

Dane 21.08.2003 19:16

hab noch was gefunden und glei scanned

*edit: hoppla des mit dem anhängen von dateien funktioniert woll nicht!*

Dane 21.08.2003 19:23

noch ein versuch

*edit: es hat geklappt!!*

Who-T 22.08.2003 02:12

dein problem ist folgendes:

da die schleife innerhalb kürzester zeit ausgeführt wird, ändert sich time net.

dadurch setzt du innerhalb der funktion den seed (== ungefähr sowas wie der startpunkt der randomfunktion)

merksatz: seed einmal setzen, dann kriegt man mit rand() zufallszahlen.

Ezechiel 22.08.2003 13:09

Jetzt hab ichs so gemacht, dass ich srand(time(0)); einfach in die main Funktion gegeben hab noch vor des Schleifenaufrufs mit der Zufallsfunktion. Jetzt funktionieren das generieren der Zufallszahlen so wie es sollte nur sind ab und zu immer 0en drin was nicht sein sollte. Ich wollte rand() % 0+7 setzen aber das geht mit der 0 anscheinend nicht.

Jemand eine Lösung hierfür?

Dane 23.08.2003 00:08

Zitat:

Original geschrieben von Ezechiel
Jetzt hab ichs so gemacht, dass ich srand(time(0)); einfach in die main Funktion gegeben hab noch vor des Schleifenaufrufs mit der Zufallsfunktion. Jetzt funktionieren das generieren der Zufallszahlen so wie es sollte nur sind ab und zu immer 0en drin was nicht sein sollte. Ich wollte rand() % 0+7 setzen aber das geht mit der 0 anscheinend nicht.

Jemand eine Lösung hierfür?

und wenn du rand() % 1+7 eingibst was passiert dann?

Who-T 23.08.2003 04:56

Zitat:

The rand() function returns a pseudo-random integer between 0 and RAND_MAX.
rand()%7 = {0,1,2,3,4,5,6}

rand()%6 + 1 = {1,2,3,4,5,6}



@Dane

rand()%1 ergibt immer 0
rand()%1 + 7 => immer 7


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag