Zufallszahlen



  • CStoll schrieb:

    GPC schrieb:

    time_t t;
      time(&t);
      srand(t);
    };
    

    warum einfach, wenn's auch kompliziert geht 😉

    Sieht wichtiger aus 😉

    MfG

    GPC



  • Danke euch beiden 🙂

    noch ne nebenfrage,

    immer wenn "return 0;" bei mir hintendran steht, schließt das Fesnter automatisch.

    Erst wenn ich das return 0 entferne und ein "cin.get();" hinzufüge, bleibt das fenster offen.

    Ist das normal?

    Thx nochmal
    Gruß,
    Marc



  • Mit dem return hat das nichts zu tun, nur mit dem get(). Und JA, das ist normal. Es gibt aber Compiler wo das Fenster offenbleibt.



  • Das liegt an deiner IDE. Mit return 0 wird das Programm halt beendet und wenn deine IDE so konfiguriert ist, dass sie nach Beendigung des Programms das Konsolenfenster schließen soll, dann macht die das halt auch. Wenn du z.B. erst ne Eingabeaufforderung öffnest und dann darin das Prog. startest, dann bleibt die natürlich danach auch offen.

    mfg



  • man sollte bedenken, dass die unteren bits von rand() nicht sonderlich zufaellig sind und ausserdem die modulo-operation keine gleichmaessige zahlenverteilung liefert. und "rand() % 22 + 2" macht zufallszahlen zwischen 2 und 23.



  • Danke Bloops.

    ---

    Eben getestet und rumgespielt mit meinem neuen schönen Code und ne kleine while Schleife eingebaut und jetzt habe ich gemerkt, das er zwar von 2 anfängt, aber bis 22 geht und wenn ich bei dem Wert da dann 21 eingebe, geht er sogar bis 23!

    Weiss jemand wieso:

    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    
    using namespace std;
    
    int main() {
    
    //Random-Zeit generieren
    srand(time(0));
    
    int i=0;
    while(i<50)
    {
    cout << rand() % 22 + 2 << endl;
    i++;
    }
    
      cin.get();
    };
    


  • jup, ist "normal"...
    haste schonmal

    int main( )
    {
    
    // ...
    
       cin.get( );
       return 0;
    }
    

    versucht... obwohl, wenn ich mich recht entsinne, gibt main() per definition immer 0 zurück wenn sie nichts zurückgibt.

    [edit] mensch bin ich langsam...

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main( )
    {
        char ch = 0;
    
        srand( time( 0 ) );
    
        do {
    
            cout << rand( ) % 20 + 2 << endl;
            ch = cin.get( );
    
        } while( ch != 'q' );
    
        return 0;
    }
    

    wirft zufallszahlen 1 <= x <= 21.

    [/edit]

    Greetz, Swordfish



  • Zu deinem Zufallsbereich: Dort hast du auch die falschen Grenzen angegeben. "rand()%x" liefert Zahlen im Bereich [0..x-1], "rand()%x+y" im Bereich [y..x-1+y] - nun mußt du deine Werte so legen, daß du [2..21] triffst.

    ~Die Lösung lautet: x=20, y=2~



  • das ist geil mit dem enter und Q,

    vielen vielen dank dafür 😃



  • hellihjb schrieb:

    man sollte bedenken, dass die unteren bits von rand() nicht sonderlich zufaellig sind und ausserdem die modulo-operation keine gleichmaessige zahlenverteilung liefert. und "rand() % 22 + 2" macht zufallszahlen zwischen 2 und 23.

    wenn's etwas aufwendiger sein darf, dann liefer der von Erhard Henkes unter

    www.c-plusplus.net/forum/viewtopic-var-t-is-148737.html

    gegebene code sehr gleichmäsig verteile Zufallszahlen im Bereich. 🙂


Anmelden zum Antworten