Zufallszahlen



  • wer sucht der findet...



  • Ich bin zwar noch noob, aber ist es denn nicht folgendermaßen:
    wenn man srand mit dem argument time(NULL) anwendet, ist die zahl doch nicht immer die gleiche, da time doch die aktuelle zeit zurück gibt, d.h. man kann
    srand(time(NULL)) ruhig mehrmals verwenden.
    trotzdem bin auch ich der meinung, dass man srand am anfang von main/WinMain nur einmal benutzen sollte...
    cya



  • Tetris Fan schrieb:

    Ich bin zwar noch noob, aber ist es denn nicht folgendermaßen:
    wenn man srand mit dem argument time(NULL) anwendet, ist die zahl doch nicht immer die gleiche, da time doch die aktuelle zeit zurück gibt, d.h. man kann
    srand(time(NULL)) ruhig mehrmals verwenden.
    trotzdem bin auch ich der meinung, dass man srand am anfang von main/WinMain nur einmal benutzen sollte...
    cya

    nee, nee, nee.
    time(0) gibt die tzeit in sekunden an. also hätte man ne sekunde lang den gleichen zufall.
    stell dir ein 4-gewinnt-spiel vor, wo nur noch in eine spalte geworfen werden darf. und nen dummen zufallscomputergegner.

    #define retrun return
    int wuerfele()
    {
       srand(time(0));//aua aua aua aua aua
       int z=rand()%7;
       return z;
    }
    int machZug()
    {
       int z=wuerfele();
       while(!istGueltig(z))
          z=wuerfele();
       retrun z;
    }
    

    wegen der gekennzeichnneten zeile braucht der rechner durchschnittlich mehr als 3 sekunden pro zug statt ner mikrosekunde.
    und ausnahmsweise kann man durch kaufen eines schnelleren rechners die zeit nicht unter 3 sekunden drücken, wie bei so vielen anderen programmierfehlern.



  • Danke, bin jetzt schon sehr viel weiter gekommen, aber habe noch nicht ganz verstanden, wie ich den Minimalwert angeben kann.
    Die Zz soll zwischen 11 und 32 sein.

    folgendes habe ich geschrieben, habe es mir aus irgendeinem Forum abgeguckt:

    srand(static_cast<unsigned>(time(0)));
    Zz = (rand() %(32-11+1)-11;

    Er zeigt mir aber immer einen Fehler an. 😮



  • Sorry, aber: Wer lesen kann, hat mehr vom Leben. 😉

    Bei deinem Code fehlt eine schließende Klammer. Das steht aber garantiert auch in der Fehlermeldung.

    Hast du verstanden, wann (und wie oft) man srand aufruft?



  • So sollte es z.B. aussehen:

    int Zufallszahl(int untereGrenze, int obereGrenze)
    {
      return (rand() % (obereGrenze - untereGrenze + 1)) + untereGrenze;
    }
    
    int main()
    {
      srand(static_cast<unsigned>(time(0)));
    
      // Jetzt geht dein Programm los und srand wird jetzt nie wieder aufgerufen.
      std::cout << Zufallszahl(11, 32);
    }
    

    Beachte bitte, wo srand steht.



  • Achso,

    ich habe srand mehrmals verwendet. Gut zu wissen. Jetzt ist mir ein Licht aufgegangen. 💡

    Hatte vor lauter Klammern den überblick verloren. Peinlich. 🙄

    Super, danke danke danke. 👍



  • cd9000 schrieb:

    So sollte es z.B. aussehen:
    srand(static_cast<unsigned>(time(0)));

    wozu das viele casten?



  • #define retrun return
    

    Du magst deine schreibfehler ???



  • volkard schrieb:

    cd9000 schrieb:

    So sollte es z.B. aussehen:
    srand(static_cast<unsigned>(time(0)));

    wozu das viele casten?

    Der Compiler spuckt sonst eine Warnung aus, da time_t beim VC++ als (signed) long definiert ist.


Anmelden zum Antworten