Zufallszahlen?



  • Hy.
    Habe hier erst nen Thread aufgemacht. Also bin mit meinen Kenntnissen immernoch am aufbauen 😉

    Habe da noch ein Problem mit Zufallszahlen.

    Ich habe einen Würfel, der zufällig eine Zahl zwischen 1 und 6 ausspucken soll.
    Ich habe dies folgendermaßen umgesetzt. Nur bin ich misstrauisch, ob die Zahlen wirklich zufällig sind. Also das jede Zahl von 1 bis 6 eine gleichhohe Wahrscheinlichkeit hat getroffen zu werden:

    #include <stdio.h>
    #include <ctype.h>
    #include <time.h>
    #include <stdlib.h>
    
    #define rand() (z=z*1194695065+534534, z&0x7fff)
    #define srand(s) z=s
    #define WURF rand()%6+1
    
    int main(void)
    {
    	int w;
    	unsigned long int z = 1;
    	srand(time(NULL));
    ...
    

    jeder Wurf wird dann später aufgerufen mit...

    w = WURF;
    

    Ich hoffe Ihr könnt meine Konstruktion nachvollziehen :D.

    Dankeschön schonmal im voraus!



  • Wer kommt schon auf die Idee, rand() selber nachzubauen? Nutz' doch einfach die entsprechende(n) Funktion(en) der Standard-Bibliothek (da reicht ein '#include <stdlib.h>' aus). Und falls dir die Werte nicht zufällig genug sind, im Magazin findest du einen Artikel von Marc++us zum Thema Zufallszahlen 😉



  • puh, und die wären? Habe nur das Wissen, was unser Professor uns seit beginn des Semester vorgaugelt 🙂

    kannst du mir evtl das kurz genauer erläutern?



  • Die heissen schockierenderweise srand() und rand() 😉



  • d.h. ich kann die definitionen einfach weglassen?

    brauch ich dann nurnoch
    #define WURF rand()%6+1
    und
    srand(time(NULL));

    ?

    hab grad den adrtikel "zufälle gibts" durchgelesen. aber da sind noch echt zu heftige sachen drinnen. das erschlägt mich ein wenig. bin noch echt am anfang halt x)



  • ex.aveal schrieb:

    d.h. ich kann die definitionen einfach weglassen?

    brauch ich dann nurnoch
    #define WURF rand()%6+1
    und
    srand(time(NULL));

    Du machst dir - wie CStoll schon anmerkte - nur unnötige Arbeit damit, die bereits als Teil der C Standard Library implementierten Funktionen srand( ) und rand( ) selbst als Makro zu realisieren.

    Einfach anwenden:

    #include <time.h> // time( )
    #include <stdlib.h> // srand( ), rand( )
    #include <stdio.h> // printf( )
    
    int main( void ) {
    
    	unsigned int i;
    
    	srand( (unsigned) time( 0 ) ); // Zufallszahlengenerator mit der Systemzeit initialisieren.
    
    	for( i = 0; i < 20; ++i ) { // 20 Mal...
    
    		printf( "Gewürfelt: %d\n", ( rand( ) % 6 ) + 1 );
    	}
    }
    

    greetz, Swordfish


Anmelden zum Antworten