Zwei unterschiedliche zufallszahlen erzeugen.



  • Tim06TR schrieb:

    Nur mal so aus neugier...
    Ich hasse die rand() funktion und man hat hier, wenn ich mich nicht irre, mir gerade eine alternative dazu geboten. wie soll das mit shuffle den Funktionieren ? Denn rand(); kann man knicken.

    1. Wieso hasst du rand() ? Aus Prinzip, wegen Gerüchten, oder begründet? 😉
    2. std::random_shuffle() verwendet intern rand() , es sei denn, du übergibst ein spezielles Prädikat.
    3. Mehr Infos zu dieser Funktion unter http://www.cplusplus.com/reference/algorithm/random_shuffle/.

    Tim06TR schrieb:

    1. fängt immer mit selber zahl an und geht dann immer so weiter.

    Du hast aber von srand() gelesen?

    Tim06TR schrieb:

    2. natürlicher upper bound = 36??? das ist banane

    Wie kommst du denn auf sowas?

    Tim06TR schrieb:

    3. diese rand würde nur lohnen, wenn die anfangszahl immer unterschiedlich ist

    Überschneidet sich mit Punkt 1.

    Tim06TR schrieb:

    dieser "kontainer", ist das einfeich eine variable, die man definieren kann ?

    Du musst noch viel lernen. 🙂
    Container sind Sammlungen von mehreren Elementen gleichen Typs, also etwas Ähnliches wie Arrays.



  • http://www.cplusplus.com/reference/stl/
    Hier hast du alle Container die C++ bietet.
    Und hier eine beschreibung mit Beispiel zu std::random_shuffle()
    http://www.cplusplus.com/reference/algorithm/random_shuffle/



  • Nexus schrieb:

    Tim06TR schrieb:
    2. natürlicher upper bound = 36??? das ist banane
    Wie kommst du denn auf sowas?

    hab ich gelesen

    Nexus schrieb:

    Du musst noch viel lernen. 🙂

    richtig ! ich bin dabei.

    Nexus schrieb:

    Du hast aber von srand() gelesen?

    oookkkkaaaayyyy.
    ähm das ändert natürlich einiges, darauf bin ich erst in diesem thread gestoßen

    Nexus schrieb:

    3. Mehr Infos zu dieser Funktion unter http://www.cplusplus.com/reference/algorithm/random_shuffle/.

    ok das hilft sehr danke



  • Tim06TR schrieb:

    hab ich gelesen

    Wo denn? 🙂

    Obere Grenze von rand() sollte RAND_MAX entsprechen. Und das müsste grösser gleich 32767 sein.

    Tim06TR schrieb:

    ok das hilft sehr danke

    Ich würde mir www.cplusplus.com sowieso merken. Ich finde, diese Seite gibt einem eine sehr gute Übersicht über die Standardbibliothek. Wenn du etwas aus std nicht kennst, sollte das die erste Anlaufstelle sein.



  • Nexus schrieb:

    Tim06TR schrieb:

    hab ich gelesen

    Wo denn? 🙂

    Obere Grenze von rand() sollte RAND_MAX entsprechen. Und das müsste grösser gleich 32767 sein.

    na, so ziemlich das was Tim06TR sagt.



  • volkard schrieb:

    meine kristallkugel sagt mir, daß du

    srand(time(0));
    int x1=rand()%6+1;
    ...
    srand(time(0));
    int x2=rand()%6+1;
    

    machst.
    das ist falsch.

    richtig ist

    int main()
    {
       srand(time(0));//nur einmal im prog, nämlich am anfang der main()
    ...
    ...
    int x1=rand()%6+1;
    ...
    int x2=rand()%6+1;
    

    Hallo volkard,
    Danke für die Antwort. Leider lag deine Kristallkugel falsch.

    srand((unsigned) time(NULL));
    Real timeFirstEnemy = rand() % 5;
    int Position = rand() % 5;
    

    Die Sache ist die, das die beiden zahlen auch gerne mal gleich sein dürfen nur bekomme ich bei dieser Funktion immer das gleiche Ergebnis.
    Grüße



  • und was ist dein Real?



  • das ist vom Typ float. Könnte auch float da stehen.



  • Nexus schrieb:

    Wenn man allerdings plötzlich 1000 unterschiedliche Zufallszahlen zwischen 1 und 10000 haben will, sollte man sich ein effizienteres Verfahren überlegen, da der Rechenaufwand von oben genanntem sehr schnell ansteigt. Ein Ansatz wäre, alle Zahlen in einem Container zu speichern, diesen mit std::random_shuffle() durchmischen und die gewünschte Anzahl Zufallszahlen am Anfang oder Ende auszulesen.

    meinst du wirklich, ich bräuchte mit dem durchprobieren zehnmal so lang? glaub ich nicht. also ist random_shuffle doch langsamer.



  • Dreadis schrieb:

    Hallo volkard,
    Danke für die Antwort. Leider lag deine Kristallkugel falsch.

    war aber auch recht dicht dran.
    wie ist es, wenn du srand((unsigned)time(NULL)) an den anfang der main() auslagerst?



  • volkard schrieb:

    Nexus schrieb:

    Wenn man allerdings plötzlich 1000 unterschiedliche Zufallszahlen zwischen 1 und 10000 haben will, sollte man sich ein effizienteres Verfahren überlegen, da der Rechenaufwand von oben genanntem sehr schnell ansteigt. Ein Ansatz wäre, alle Zahlen in einem Container zu speichern, diesen mit std::random_shuffle() durchmischen und die gewünschte Anzahl Zufallszahlen am Anfang oder Ende auszulesen.

    meinst du wirklich, ich bräuchte mit dem durchprobieren zehnmal so lang? glaub ich nicht. also ist random_shuffle doch langsamer.

    Kann man doch ausrechnen, wie groß die Wahrscheinlichkeit ist, dass man ne Zahl tirfft die man schon hat. Ist doch ne richtig interessante Aufgabe, die hier sicher einer ausrechnen will.


Anmelden zum Antworten