WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 20.08.2003, 16:21   #1
Ezechiel
Senior Member
 
Registriert seit: 18.12.2001
Beiträge: 190


Standard 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.
Ezechiel ist offline   Mit Zitat antworten
Alt 21.08.2003, 06:07   #2
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard

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.
____________________________________
Whoever built humanity left in a major design flaw: it was the tendency to bend at the knees.
Who-T ist offline   Mit Zitat antworten
Alt 21.08.2003, 17:24   #3
Ezechiel
Senior Member
 
Registriert seit: 18.12.2001
Beiträge: 190


Standard

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();
Ezechiel ist offline   Mit Zitat antworten
Alt 21.08.2003, 18:39   #4
Dane
Master
 
Registriert seit: 12.01.2002
Beiträge: 640


Standard

folgendes, du musst "srand(7);" am anfang der funktion schreiben dann sollts gehn
Dane ist offline   Mit Zitat antworten
Alt 21.08.2003, 19:16   #5
Dane
Master
 
Registriert seit: 12.01.2002
Beiträge: 640


Standard

hab noch was gefunden und glei scanned

*edit: hoppla des mit dem anhängen von dateien funktioniert woll nicht!*
Dane ist offline   Mit Zitat antworten
Alt 21.08.2003, 19:23   #6
Dane
Master
 
Registriert seit: 12.01.2002
Beiträge: 640


Daumen hoch

noch ein versuch

*edit: es hat geklappt!!*
Dane ist offline   Mit Zitat antworten
Alt 22.08.2003, 02:12   #7
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard

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.
____________________________________
Whoever built humanity left in a major design flaw: it was the tendency to bend at the knees.
Who-T ist offline   Mit Zitat antworten
Alt 22.08.2003, 13:09   #8
Ezechiel
Senior Member
 
Registriert seit: 18.12.2001
Beiträge: 190


Standard

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?
Ezechiel ist offline   Mit Zitat antworten
Alt 23.08.2003, 00:08   #9
Dane
Master
 
Registriert seit: 12.01.2002
Beiträge: 640


Standard

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?
Dane ist offline   Mit Zitat antworten
Alt 23.08.2003, 04:56   #10
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard

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
____________________________________
Whoever built humanity left in a major design flaw: it was the tendency to bend at the knees.
Who-T ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:34 Uhr.


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