Random zum x-ten mal...Sorry



  • Ich hab jetzt schon alle FAQ zu dem Thema gelesen ,versucht die Sourcecodes für meine primitiven Zwecke umzuschreiben, aber ich schaffe es einfach nicht...

    Im prinzip will ich einfach nur ein Programm das per zufall 0 oder 1 ausgibt mehr nicht. Aber ich komme mit dieser rand funktion einfach nicht zurecht.
    Bitte schreibt mir nochmal diesen Quellcode. Ich komm mit den allgemeinen Beschreibungen in Büchern einfach nicht zurecht 😡



  • NullOderEins = rand()%2;



  • cool, danke für die schnelle Antwort!
    Nun hab ich das Problem das immer nur 0 rauskommt...ich meine es kann statistisch sein aber 15 mal wars nun hintereinander 0 nachdem ich das prog aufgerufen hab 😞

    #include <stdio.h> 
    #include <stdlib.h> 
    
    int rand(void);
    main()
    {
    	int x;
    	x=rand ()%2;
    	printf("%d\n",x);
    }
    


  • vorher initialisieren mit srand()



  • Du musste immer eine neue Seed erzeugen:

    srand(time(0));
    

    Füge das mal vor rand ein. Allerdings ändern sich das auch jede Sekunde, ist also berechnbar. Guck mal nach was besserem....



  • ähmmmm....damit sind wir wieder da angelangt das ich nicht genau weiß wie ich das einbinden muß.... 😕

    #include <stdio.h> 
    #include <stdlib.h> 
    
    int rand(void);
    main()
    {
    
    	int x;
    	srand(0);
    	x=rand ()%2;
    	printf("%d\n",x);
    }
    

    so oder mit srand(1) bleibts bei meiner "0"... 😞



  • @carstenj
    alles klar, danke jetzt klappts, wie du gesagt hast mit der Sekundenregel 😉
    Wo kann ich da nach ws besserem suchen? Hätte das gerne in μs...



  • ok, bn selber drauf gekommen, falls es jemanden interessiert:

    #include <stdio.h> 
    #include <stdlib.h> 
    
    #include <sys/time.h>
    
    int rand(void);
    int main()
    {
    	FILE *result;
    	int x;
    	struct timeval currentTime;
    
    	/* needed since UNIX X */
    	_main();
    
    	/* get the time since 1.1.1970 in seconds and microseconds */
    	gettimeofday(&currentTime, (void *) NULL);
    
    	/* print the time for debugging purposes */
    	printf("time: %ld seconds, %ld microseconds\n", 
    	       currentTime.tv_sec, currentTime.tv_usec);
    
    	/* initialize the random number generator by using the microseconds */
    	srand((unsigned int) currentTime.tv_usec & 0x7FFF); 
    
    	/* random number generator*/
    	x=rand();
    	printf("RANDOM: %d\t", x);
    
    	/* select bit #0 */
    	x &= 1; 
    	printf("--> %d\t", x);
    
    	result = fopen("result.txt","a");
    	fprintf(result, "%d\n",x);
    	fclose(result);
    
    	return(0);
    }
    

    Bin über die epoch-Zeit an die usec gekommen.



  • Jo, klappt ja, bis auf _main() :D.

    Allerdings ist das Programm...
    a - nicht mehr portabel
    b - etwas zu aufwändig

    Wenn es wirklich nur um 0 oder 1 geht, dann sollten ja eigentlich die Sekunden reichen. Wobei das Ansichtssache ist, kommt ja auch immer drauf an, wofür du das brauchst. Wie auch immer, wenn es das richtig tut, was es tun soll, isses gut. 🙂



  • Da ich speicherchips initalisiere (das Prog ist noch nicht fertig) um auszulesen ob die power up sequenz funktioniert wollte ich ein randomprogramm (Pass oder failed)das in etwa auf gleichem Zeitniveau arbeitet.
    Das _main() braucht man wie beschrieben ab UNIX 10, aber da auch nur um kein genörgel vom Commpiler zu erhalten. 😃


Anmelden zum Antworten