Zufallsgenerator funktioniert nicht



  • Also erstmal poste ich mein Code 😉

    #include <iostream>
    #include <windows.h>
    using namespace std;
    
    int main()
    {
        cout<<"Jans MASTER MIND Spiel\n\n";
        int zufall[3];
        for (int i=0; i<4; ++i )
        {
        int MAXVALUE=8;
        srand(time(NULL)); //Zufallszahlengenerator initalisieren
        int zahl = rand() % MAXVALUE + 1; //Zufallszahl zwischen 1 und 9 erzeugen
        zufall[i]=zahl; //in array schreiben
        }
        cout<<zufall[0]; //einzelne positionen ausgeben
        cout<<zufall[1];
        cout<<zufall[2];
        cout<<zufall[3];
        Sleep(3600); //schlafen
    }
    

    Ich habe folgendes Problem:
    Ich bekomme 4mal die selbe Zahl. Ist das Zufall 😃
    Eher mal nicht. Ich habe herausgefunden das die Zahlen anhand der Zeit ermittelt werden und ich hab gedacht das dies bei meinen winzigen Programm einfach zu schnell geht. Ist das möglich ? ? ?

    P.S.: Bitte die Antworten nicht allzu kompliziert machen! :p



  • Ach Sorry,
    ich hab vergessen zu erwähnen, dass die 4 Zahlen die ich erhalte schon zufällig sind. Die 4 Zahlen sind halt nur gleich.



  • Sieht aus, als würde der Zufallsgenerator einwandfrei funktionieren, da 4 Zahlen in der gelichen Millisekunde erzeugt werden.

    Bye, TGGC (Das Eine, welches ist.)



  • Der funktioniert ja auch super, aber was möchte ich mit 4 gleichen Zahlen? Ich hab mal ein Sleep(600) function eingebaut und schon gings. Allerdings ist das ein wenig umständlich wenn der allein für 4 Zahlen 4sec braucht. Das muss doch auch besser gehen. 😕



  • Wie wärs wenn der Zufallsgenerator nur einmal initalisieren wird.

    Bye, Hmmkey ( )



  • #include <iostream>
    #include <cstdlib>
    #include <ctime>
    #include <windows.h>
    
    using namespace std;
    
    void initRandom() {
      time_t t;
      time(&t);
      srand(t);
    };
    
    int main() {
        cout<<"Jans MASTER MIND Spiel\n\n";
    
        //int zufall[3];  Du hast noch ein Problem: Array hat 3 Elemente, du arbeitest unten mit 4!
        int zufall[4];
    
        const int MAXVALUE=8;
    
        initRandom();  //Zufallszahlengenerator mit Systemzeit initialisieren
    
        for (int i=0; i<4; ++i ) {      
          int zahl = rand() % MAXVALUE + 1; //Zufallszahl zwischen 1 und -> 8 <- erzeugen, nicht 1 und 9
          zufall[i]=zahl; //in array schreiben
        }
    
        cout<<zufall[0]<<'\n' //einzelne positionen ausgeben
            <<zufall[1]<<'\n'
            <<zufall[2]<<'\n'
            <<zufall[3];
        Sleep(3600); //schlafen
    
        //Wenn du korrekterweise int main schreibst, könntest du auch was zurückgeben:
        return 0;
    }
    

    P.S.: Bitte die Antworten nicht allzu kompliziert machen! :p

    Einfacher geht's nicht.

    //edit:
    Btw. cpp Tags machen den Code auch hübsch farbig.

    MfG

    GPC



  • GPC schrieb:

    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    #include <windows.h>
    
    using namespace std;
    
    void initRandom() {
      time_t t;
      time(&t);
      srand(t);
    };
    
    int main() {
        cout<<"Jans MASTER MIND Spiel\n\n";
    
        //int zufall[3];  Du hast noch ein Problem: Array hat 3 Elemente, du arbeitest unten mit 4!
        int zufall[4];
    
        const int MAXVALUE=8;
    
        initRandom();  //Zufallszahlengenerator mit Systemzeit initialisieren
    
        for (int i=0; i<4; ++i ) {      
          int zahl = rand() % MAXVALUE + 1; //Zufallszahl zwischen 1 und -> 8 <- erzeugen, nicht 1 und 9
          zufall[i]=zahl; //in array schreiben
        }
    
        cout<<zufall[0]<<'\n' //einzelne positionen ausgeben
            <<zufall[1]<<'\n'
            <<zufall[2]<<'\n'
            <<zufall[3];
        Sleep(3600); //schlafen
    
        //wieder aufwachen :D 
        
        //Wenn du korrekterweise int main schreibst, könntest du auch was zurückgeben:
        return 0;
    }
    

    Sag ich doch



  • @hmmmmkey: Wer hat dir eigentlich erlaubt, meinen Avatar zu verwenden? Ich war das ganz bestimmt nicht. Und ich glaube auch nicht, daß du von jemand anderem die Genehmigung bekommen hast.



  • Hey vielen Dank Leute!
    Aber es ist doch zwischen 0 und 9! Da ich am Ende ja wieder +1 rechne, also erhöhe ich MAXVALUE sozusagen. Weil ich keine 0 haben möchte 😉



  • Wenn du eine Zufallszahl zwischen 1 und 9 erzeugen möchtest, dann mußt du auch MAXVALUE auf 9 setzen.
    rand()%9 erzeugt einen Wert zwischen 0 und 8.
    Da du ja dann um 1 erhöhst, erhälst du dann eine Zahl zwischen 1 und 9.



  • Mit rand() % 8 bekommst du Werte von 0 bis 7. Ein größerer Rest kann bei einer Division durch 8 ja nicht rauskommen.



  • Ja deswegen hab ich ja mit 1 erhöht.



  • Dann kommst du auf 1 bis 8, nicht 1 bis 9.



  • Ach lol ich bin so ein Rindvieh 😃
    Aber ich nochmal eine andere Frage. Wie kann man in C++ die Wurzel ziehen? 😕



  • sqrt() (die findest du im Header <cmath>)



  • ansonsten
    √x = x1/2
    wenn ich jetzt nicht total daneben lieg

    EDIT: verbessert
    EDIT2: wieso geht der wurzeltag nicht?



  • ich denke, du liegst daneben. Denn bei deiner Rechnung kommt für die Wurzel aus 9 dann 4.5 als Ergebnis raus 😃



  • habs auchgrad gemerkt 🙄 😃



  • 1310-Logik schrieb:

    wieso geht der wurzeltag nicht?

    Verwendet wohl niemand mehr, seit wir auch LaTeX haben.

    x=x12\sqrt{x}=x^{\frac{1}{2}}



  • Das Problem hab ich gelöst aber ich hab wieder ein anderes 😃
    Wie kann man in ein Array Kommazahlen schreiben? Ist das möglich?
    Oder das er mir automatisch soviele Variablen erzeugt wie ich brauch. Durchnummeriet oder wie auch immer. Weil eine andere Möglichkeit auser Array kenn ich nicht.



  • Hallo

    du kannst in ein Array auch Kommastellen schreiben, wenn der Typ des Arrays dafür passend ist. hast du ein Array über int, dann also nicht. hast du ein Array über float, dann ja.

    Und wenn du keine festen Grenzen für das Array angeben willst, dann verwende std::vector. Dazu findest du vieles schon über die Suchfunktion im C++ Subforum.

    bis bald
    akari


Anmelden zum Antworten