Antworten und Tipps zur Frage

SMS-Frage
12

C++ : ich brauche eine möglichkeit, ganz schnell und mehrmals hintereinander 6 zufallszahlen zu generieren. srand(time(NULL)) aktualisiert sich nur 1x pro sek.

Frage von Sechem (18.03.2009 | 19:38)
Antwort wurde versendet

Moment! Mit srand() initialisierst Du Deinen ZZGenerator (z.Bsp. beim Programmstart). Mit rand() kannst Du bel. viele Zufallszahlen erzeugen

Quelle: Antwort von HannesB (18.03.2009 | 20:35) und Bestätigung von winni300 (18.03.2009 | 20:36)
Bewertung: positiv
Kommentar: Hab ich mich falsch ausgedrückt ;)

Ergänzungen

  1. Sechem schrieb am (18.03.2009 | 20:42):
    Trotzdem aktualisiert sich dieser Generator nur einmal in der Sekunde..!

    Aber ich hab jetzt eine Methode: statt srand(time(NULL)) einfach srand(clock)) nehmen. Ansonsten ganz normal rand() benutzen.

    So klappt es, aber ich verstehe nicht ganz warum. Weißt Du das?

    Und muss ich eigentlich irgendwie time.h oder stdlib.h includen? hab nämlich nichts davon gemacht, aber die beiden Zufallsgeneratoren funktionieren trotzdem.. Verstoß melden
  2. HannesB schrieb am (18.03.2009 | 20:43):
    Also nochmals: srand() kannst Du irgendwann aufrufen (z.Bsp. beim Programmstart oder auch gar nicht). Wenn Du 6 Zufallszahlen benötigst, rufst Du einfach sechsmal rand() auf . Funktioniert das nicht? Verstoß melden
  3. HannesB schrieb am (18.03.2009 | 20:45):
    Sicher, bitte sehr:

    void srand ( unsigned int seed ); <cstdlib>

    Initialize random number generator

    The pseudo-random number generator is initialized using the argument passed as seed.

    For every different seed value used in a call to srand, the pseudo-random number generator can be expected to generate a different succession of results in the subsequent calls to rand.
    Two different initializations with the same seed, instructs the pseudo-random generator to generate the same succession of results for the subsequent calls to rand in both cases.

    If seed is set to 1, the generator is reinitialized to its initial value and produces the same values as before any call to rand or srand.

    In order to generate random-like numbers, srand is usually initialized to some distinctive value, like those related with the execution time. For example, the value returned by the function time (declared in header <ctime>) is different each second, which is distinctive enough for most randoming needs.


    Parameters
    seed
    An integer value to be used as seed by the pseudo-random number generator algorithm.

    Return Value
    (none) Verstoß melden
  4. HannesB schrieb am (18.03.2009 | 20:47):
    srand() und rand() sind in der stdlib.h deklariert. Wenn Du die nicht inkludierst, bekommst Du halt eine Compilerwarnung und die Funktionen werden als (int) angenommen. Verstoß melden
  5. Sechem schrieb am (18.03.2009 | 20:48):
    Also das Prinzip und die Funktionsweise hab ich eig. schon verstanden!

    Aber was ist denn der Unterschied zwischen time(NULL) und clock()?

    Und zu dem Einbinden von z.B. time.h oder stdlib.h, kann es sein, dass man das in c++ gar nicht mehr machen muss? weil es ja auch so funktioniert! Verstoß melden
  6. Sechem schrieb am (18.03.2009 | 20:50):
    Und ich kriege keine Kompilierwarnunf ;-) Verstoß melden
  7. HannesB schrieb am (18.03.2009 | 20:55):
    time() zählt die Sekunden seit Beginn der C-Epoche, clock() die seit Start Deines Programms. Beide übrigens in time.h deklariert und auch hier gilt wieder: (int) wird angenommen, falls nicht inkludiert und trotzdem verwendet.

    Na, schön für Dich. Dann haste die Warnung halt ausgeschaltet. Ist ja wie gesagt auch nur eine "Warnung". Verstoß melden
  8. Sechem schrieb am (18.03.2009 | 21:02):
    Nö, habe gar keine Warnung ausgeschaltet^^

    Aber wenn sich doch sowohl clock() als auch time() sozusagen nur sekündlich aktualisieren, warum klappt es dann mit clock(), nicht aber mit time()? Verstoß melden
  9. HannesB schrieb am (18.03.2009 | 21:20):
    0:2 für Werder übrigens zur Halbzeit.

    Mit so einer allgemeinen Aussage/Frage "Warum klappt es nicht?" ist leider wenig anzufangen. Welchen Algorithmus möchtest Du implementieren? Wie sieht Dein Sourcecode aus? Welche Ausgabe erwartest Du? Welche Ausgabe bekommst Du stattdessen? Welche Schritte hast Du bereits unternommen, um die Ursache der beobachteten Abweichung zu finden? Verstoß melden
  10. Sechem schrieb am (18.03.2009 | 21:25):
    Ok, es klappt doch mit time() wenn man das nur genau ein mal initialisiert, hat sich also erledigt!

    Nur das eine frage ich mich noch, nämlich warum es offenbar nicht notwendig ist, time.h zu includen. Ich bekomme keine Warnung, habe auch keine Warnung ausgeschaltet (jedenfalls nicht dass ich wüsste) und der Zufallsgenerator klappt trotzdem einwandfrei.. Verstoß melden
  11. HannesB schrieb am (18.03.2009 | 21:34):
    Wie gesagt: Beim Aufruf nicht deklarierter Funktionen werden diese zunächst (vom Compiler) als int XXX(...) angenommen. Du solltest Dir das aber besser gar nicht erst angewöhnen und alle Funktionen prinzipiell vorher deklarieren (bspw. durch Einbinden der Headerdatei mit der Deklaration). Verstoß melden
  12. Sechem schrieb am (18.03.2009 | 21:37):
    Ok danke nochmal, dann binde ichs halt ein, schadet ja nix :) Verstoß melden

Ergänzung schreiben:

Spiegel Stern Welt PC Welt Handelsbaltt Hamburger Abendblatt Deutsche Startups Giga

loading...