srand()



  • Hallo Leute,

    c++ Anfänger hier.
    Ich bin aufgeschmissen, weil ich srand() mehr als einmal innerhalb einer Schleife aufrufen muss.
    Gibt es Alternativen für srand() oder kann man das Problem irgendwie geschickt umgehen, ohne unnötige Ressourcen zu verschwenden und die Performance zu verschlechtern.
    Relevanter Code-Abschnitt:

    void sfg(bool a[4][4], int anz) {
    	int k = 1, x, y;
    	while(k <= anz) {
    	x = gs2();
    	y = gs1();
    	if(a[x][y] != true) {
    		a[x][y] = true;
    		k++;
    	}
    }
    

    mfg,



  • Ich habe vergessen anzumerken, dass gs2() und gs1() Funktionen sind, bei der der Rückgabewert die vom RNG generierte Zahl ist.



  • srand() einmal zu Beginn des Programmes aufrufen, z.B.

    int main()
    {
        std::srand(...);
    ...
    }
    


  • Danke @hardware, kannst du mir vielleicht noch erklären warum es funktioniert?
    😉

    mfg,



  • Ne ist schon gut, sollte klar sein 😃



  • Ich kanns dir mal aus meiner Sichtweise erklären:

    Soweit ich weiß, initialisierst du den pseudo Zufallsgenerator beim Aufruf von srand. Und wenn der mal initialisiert wurde, dann funsts auch.

    Da gibst du einen so genannten seed (srand = seed rand ?), welchen der Algorithmus von rand() benutzt, um die pseudo Zufallszahlen zu generieren. Den seed "vergisst" rand dann auch nicht, also reicht es wenn du es einmal machst, befor du die Zahlen generieren willst.

    Damit du praktisch so gut wie immer verschiedene Zufallszahlen bekommst, wenn du dein Programm ausführst, nimmt man hier meistens einfach die aktuelle Systemzeit.



  • Alles klar, vielen Dank.


Log in to reply