Zufallszahl



  • Es liegt nicht an der Hardware, deine Standardbibliothek unterstützt das nicht.
    Du brauchst also eine andere/neuere Version davon.



  • Welche den? Link?



  • Du brauchst random_device nicht zwingend.
    Nimm zum Seeden einfach time(nullptr), das sollte ausreichen™.



  • Chechen65 schrieb:

    Welche den? Link?

    Um es in deiner Sprache zu sagen: Deine C++ ist zu alt. Hier gibts ein aktuelleres.

    Nathan schrieb:

    Nimm zum Seeden einfach time(nullptr), das sollte ausreichen™.

    time(0) ist das Problem, nicht die Lösung.



  • #include <iostream>
    #include <ctime>
    using namespace std;
    
    int main(void)
      {
        srand(time(nullptr));              /* Zufallsgenerator initialisieren */
    
          cout << rand() % 50 + 1;     /* Wuerfeln */
      }
    

    Meinst du so? Denn so ist das falsch 😃



  • nwp3 schrieb:

    Nathan schrieb:

    Nimm zum Seeden einfach time(nullptr), das sollte ausreichen™.

    time(0) ist das Problem, nicht die Lösung.

    Ich bezweifle, dass chechen Programme schreibt, bei denen es darauf ankommt.



  • Ich nutze das Visual Studio 2013 Ultimate!
    Und random_device rd; funktioniert bei mir nicht. Ich nehme an ein roter Punkt neben der Zeile meint das 🙂

    Was kann ich machen? Nathan ich weis nicht wie ich time(nullptr) einsetzen soll?!
    Da müsstest du mir genauer sagen.



  • bei visual studio ist ein roter punkt neben dem code ein breakpoint.



  • Ja in der Zeile ist ein Fehler random_device rd funzt nicht, was tun?



  • Wenn es wirklich nicht kompiliert (und ich mein nicht, wenn IntelliSense das unterschlängelt oder so, wenn es nicht kompiliert), dann machst du folgendes:

    int main(){
        using namespace std;
        mt19937 mt(time(nullptr));
        uniform_int_distribution<int> dist(1, 50);
        cout << dist(mt);
    }
    


  • Erstens: Dein OP gibt mir unter Win8 und dem GCC folgende Zufallszahlen:

    37
    22
    5
    41
    26
    26
    26
    9
    9
    45
    45
    45
    30
    13
    13
    13
    13
    13
    49
    49
    49
    34
    34
    34
    34
    17
    17
    17
    2
    

    Jede einzelne durch eine Programmaufruf erzeugt. Sieht recht zufällig aus und vor allem NICHT auf- oder absteigend.

    Zweitens:
    Lies dir die Referenzseiten zum Thema Zufallsgeneratoren durch, da wird alles erklärt. Und zum Thema srand/rand gibt es auch hier im Forum genug Threads, heute mittag wurde mal wieder einer der aktuellen gelöst.

    Drittens: Wie lernst du C++? Buch, Youtube oder Try&Error?

    Viertens: Wasdeine IDE sagt ist egal, es kommt drauf an, was der Compiler sagt.



  • Ich weis nicht welchen Quellcode du genomen hast, aber ich glaube diesem trifft komisch zu 🙂

    Mein Buch : C++: Objektorientiertes Programmieren von Anfang an
    Link: http://www.amazon.de/C-Objektorientiertes-Programmieren-von-Anfang/dp/3499600773/ref=sr_1_2?ie=UTF8&qid=1395861514&sr=8-2&keywords=c%2B%2B+Programmieren+von+Anfang+an+b%C3%BCcher

    Jetzt erst sehe ich wie "alt" mein C++ ist 🙂
    Visual verlangt das ich anstatt getch(); _getch. schreibe....

    Ich habe sehr viel nur mit Dev-C++ gearbeitet und komme mit Visual Studio nicht klar.

    Visual Studio erstellt einen Ordner mit vielen Dateien drinnen.
    Und ich weis nicht mit z.B. Externe Abhängigkeiten, Headerdateien, Ressourcendateien anzufangen...
    Wo lerne ich das?

    Ich fange jetzt an mich mit der Seite C++ reference zu beschäftigen was von euch Vorgeschlagen wurde.

    Nochmal danke an euch 🙂



  • Chechen65 schrieb:

    Jetzt erst sehe ich wie "alt" mein C++ ist 🙂
    Visual verlangt das ich anstatt getch(); _getch. schreibe....

    Das hat nichts mit alt zu tun. getch ist keine Standard-Funktion, bei dem einen Compiler heißt sie getch, beim nächsten _getch und der nächste hat sie überhaupt nicht.

    Visual Studio erstellt einen Ordner mit vielen Dateien drinnen.
    Und ich weis nicht mit z.B. Externe Abhängigkeiten, Headerdateien, Ressourcendateien anzufangen...
    Wo lerne ich das?

    Kannst du erstmal ignorieren. Oder löschen.



  • Chechen65 schrieb:

    volkard schrieb:

    Dagegen macht man

    #include <iostream>
    #include <ctime>
    using namespace std;
    
    int main(void)
      {
        time_t t;
        time(&t);
        srand((unsigned int)t);rand();//Beim Initialisieren ein gleich einmal rand()
    
        cout << rand() % 50 + 1;
      }
    

    Die generierten Zahlen sind irgendwie komisch.

    Ja, sie sind zufällig. Zufälligere wirste erstmal nicht finden. Was genau stört Dich? Mach mal %6 und schreib sie auf und nimm einen echten Würfel und schreib sie auf. Sind die echten nund komischer oder die unechten?



  • Nathan schrieb:

    int main(){
        using namespace std;
        mt19937 mt(time(nullptr));
        uniform_int_distribution<int> dist(1, 50);
        cout << dist(mt);
    }
    

    Hast du es ausprobiert? von eins bis 6 zeigt es Zahlen wie schon gesagt aufsteigend an. Ist es so schwer einen Zahlengenerator zu schreiben?

    Ich habe gewürfelt und es waren echt zufälligere als bei dem Quellcode 😃
    Ich hab alles ausprobiert und man kann immer erahnen welche Zahl generiert werden wird von 1 - 6.
    Was ich sagen kann ist das mit dem Quellcode z.B. die chance eine 1 zubekommen nicht 1 zu 6 steht.



  • Was hast du überhaupt vor?
    Ein Programm zu schreiben, was exakt eine "Zufalls-"Zahl ausgibt und mehr nicht macht??



  • Ein Zufallsgenerator ist nur gut, wenn du eine fortlaufende Sequenz erzeugst. Nicht wenn du ihn ständig neu initialisierst. Wurde aber schon mehrmals im Bezug auf srand() gesagt, hier ist die gleiche Problematik.

    Wenn du pro Programmaufruf eine Zufallszahl willst, speichere den Zustand des Zufallsgenerators in eine Datei.



  • Chechen65 schrieb:

    Nathan schrieb:

    int main(){
        using namespace std;
        mt19937 mt(time(nullptr));
        uniform_int_distribution<int> dist(1, 50);
        cout << dist(mt);
    }
    

    Hast du es ausprobiert? von eins bis 6 zeigt es Zahlen wie schon gesagt aufsteigend an. Ist es so schwer einen Zahlengenerator zu schreiben?

    Ich habe gewürfelt und es waren echt zufälligere als bei dem Quellcode 😃
    Ich hab alles ausprobiert und man kann immer erahnen welche Zahl generiert werden wird von 1 - 6.
    Was ich sagen kann ist das mit dem Quellcode z.B. die chance eine 1 zubekommen nicht 1 zu 6 steht.

    http://ideone.com/kWiOQi
    sieht für mich fair aus.

    edit:
    http://en.wikipedia.org/wiki/Clustering_illusion



  • Das hängt vor allem von der Testmenge ab. Wenn du sechs mal würfelst heißt das ja nicht, dass jede Augenzahl ein mal vorgekommen ist, nur weil die Wahrscheinlichkeit 1:6 ist. Würfel ein paar tausend Mal und guck, wie dann die Verteilung aussieht.

    #include <ctime>
    #include <ctime>
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        srand( time( 0 ) );
        unsigned int Counter[6] = { 0,0,0,0,0,0 };
        for( unsigned int i = 0; i < 100000; ++i )
        {
           Counter[rand() % 6]++;
        }
        for( unsigned int i = 0; i < 6; ++i )
        {
           cout << "Augenzahl " << i +1 << " wurde " << Counter[i] << " gewürfelt\n";
        }
    }
    

    Sieht bei mir nicht "komisch" aus...



  • DocShoe schrieb:

    #include <ctime>
    #include <ctime>
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        srand( time( 0 ) );
        unsigned int Counter[6] = { 0,0,0,0,0,0 };
        for( unsigned int i = 0; i < 100000; ++i )
        {
           Counter[rand() % 6]++;
        }
        for( unsigned int i = 0; i < 6; ++i )
        {
           cout << "Augenzahl " << i +1 << " wurde " << Counter[i] << " gewürfelt\n";
        }
    }
    

    Sieht bei mir nicht "komisch" aus...

    Änder mal die 100000 in 6 um, starte das Programm paar mal und schau dir die Zahlen an. Also ich hab ja schon 20 Mal gestartet und sie zeigt mir nicht einmal die 6.

    DocShoe schrieb:

    Wenn du pro Programmaufruf eine Zufallszahl willst, speichere den Zustand des Zufallsgenerators in eine Datei.

    Ich denke du weist das ich Anfänger bin? 🙂
    Wie den?


Anmelden zum Antworten