[Warning:Beginner] rand / srand ?



  • Hallo C++ Spezis!

    Ich habe eben die Funktion rand und srand gesehen und wollte mal
    wissen wozu man nun was nimmt. Mit srand wird initialisiert und
    mit rand dann eine Zufallszahl ermittelt?

    Zu was nutzt man z.B. auch sowas:

    char test[rand()%94];
    

    Da wird doch auch per Zufall was ermittelt, aber wozu die %94?

    Sorry ich beschäftige mich erst kurze Zeit mit c++ 😋



  • rand()%x liefert dir eine Zahl zwischen 0 und x-1



  • Btw, nach welchem C++ Standard ist es denn erlaubt, die Arraygröße zur Laufzeit zu berechnen? (ich kenne das nur von C99)



  • Um diese Frage zu beantworten ist wohl ein kurzer Abstecher in die Welt der Zufallsalgorithmen nötig:

    Vorweg sei schonmal gesagt das es keine 'realen' Zufallszahlen gibt. Denn jede Zufallszahl wird auf Basis einer anderen Zahl errechnet. Diese Zahl wird dann einfach durch irgendeinen mordskomplizierten mathematischen Algorithmus geschickt den keiner versteht =)... und voila hat man eine 'Zufallszahl'.

    Bei rand() wird diese Basiszahl einfach mit den aktuellen ticks ( = Millisekunden seit dem Systemstart ) initialisiert.

    Bei srand() kann man diese Basis selbst angeben (das s in srand() steht vermutlich für seed (=ursprung,saat)

    die Funtkion die du mit initialisieren meinst heißt übrigens randomize()

    char test[rand()%94] dürfte eig. nicht funktionieren...
    falls du mit deiner Frage auf das % ansprichst, das heißt modulo = Rest einer ganzzahligen division (in dem Fall der Rest aus der Division zufallszahl / 94). Modulo wirst du noch oft in Kombination mit rand() sehen da es versichert das der Ausdruck nicht größer wird als der divisor:

    z.b: ( rand() % 94 ) ==> dieser Wert dieses Ausdrucks kann nur von 0-93 gehen

    ich hoffe das hat dir geholfen,

    dex



  • DeX3 schrieb:

    Bei rand() wird diese Basiszahl einfach mit den aktuellen ticks ( = Millisekunden seit dem Systemstart ) initialisiert.

    Nicht automatisch, also muss man schon selber machen.



  • DeX3 schrieb:

    Bei rand() wird diese Basiszahl einfach mit den aktuellen ticks ( = Millisekunden seit dem Systemstart ) initialisiert.

    Bei srand() kann man diese Basis selbst angeben (das s in srand() steht vermutlich für seed (=ursprung,saat)

    die Funtkion die du mit initialisieren meinst heißt übrigens randomize()

    Nicht ganz: rand() berechnet einen neuen Zufallswert auf Basis des aktuellen Seed (und aktualisiert letzteren), srand() setzt einen neuen Seed als Startwert für weitere Berechnungen.



  • CStoll schrieb:

    DeX3 schrieb:

    Bei rand() wird diese Basiszahl einfach mit den aktuellen ticks ( = Millisekunden seit dem Systemstart ) initialisiert.

    Bei srand() kann man diese Basis selbst angeben (das s in srand() steht vermutlich für seed (=ursprung,saat)

    die Funtkion die du mit initialisieren meinst heißt übrigens randomize()

    Nicht ganz: rand() berechnet einen neuen Zufallswert auf Basis des aktuellen Seed (und aktualisiert letzteren), srand() setzt einen neuen Seed als Startwert für weitere Berechnungen.

    SRY... MANN MANN MANN ich bring sämtliche sprachen durcheinander 😡


Anmelden zum Antworten