zufallszahl zwischen 1 und ? !



  • Blake_MaX schrieb:

    ok, und wie bekomme ich das jetz hin, das er mir 5mal eine rand() zahl bestimmt? ohne das ich gleich 5 int mit rand() deklarieren muss?

    Schon einmal etwas von Arrays/Container und Schleifen gehört?



  • ja hab ich wenn ich das in ne while schleife lege, gibt er mir immer wieder die gleiche rand zahl aus! ich will aber verschiedene!

    mfg



  • Blake_MaX schrieb:

    ja hab ich wenn ich das in ne while schleife lege, gibt er mir immer wieder die gleiche rand zahl aus! ich will aber verschiedene!

    mfg

    ::srand ( static_cast<unsigned int> ( ::timeGetTime () ) );
    

    In die main packen und nur einmal aufrufen!



  • Blake_MaX schrieb:

    ja hab ich wenn ich das in ne while schleife lege, gibt er mir immer wieder die gleiche rand zahl aus! ich will aber verschiedene!

    du rufst sicher jedesmal srand() auf, richtig?
    lies dir dazu die beschreibung von srand durch



  • drakon schrieb:

    ::srand ( static_cast<unsigned int> ( ::timeGetTime () ) );
    

    wozu der static_cast? der sollte doch auf gefahr hinweisen. ich seh hier aber keine. gar keine.



  • bringt nichts! mein code sieht folgendermaßen aus:

    while(userrandcount < 6) {
    userrand = rand() % 8 + 1;
    srand ( static_cast<unsigned int> ( 1 ) );
    switch(userrand) {
    case 1: cout<<a1<<"a1"<<endl; userrandcount++; break;
    case 2: cout<<a2<<"a2"<<endl; userrandcount++; break;
    case 3: cout<<a3<<"a2"<<endl; userrandcount++; break;
    case 4: cout<<a4<<"a2"<<endl; userrandcount++; break;
    case 5: cout<<b1<<"a2"<<endl; userrandcount++; break;
    case 6: cout<<b2<<"a2"<<endl; userrandcount++; break;
    case 7: cout<<b3<<"a2"<<endl; userrandcount++; break;
    case 8: cout<<b4<<"a2"<<endl; userrandcount++; break;
    }
    }
    hab auch schon nur in der main gehabt bringt aber auch nichts! hab auch schon anstelle der 1 ne 0 eingefügt so wie auf http://www.cplusplus.com/reference/clibrary/cstdlib/srand.html



  • volkard schrieb:

    drakon schrieb:

    ::srand ( static_cast<unsigned int> ( ::timeGetTime () ) );
    

    wozu der static_cast? der sollte doch auf gefahr hinweisen. ich seh hier aber keine. gar keine.

    Ich mache den da einfach, weil timeGetTime ein DWORD (unsigned long) zurückgibt und srand ein unsigned int nimmt. Reine Gewohnheit, weil die Typen nicht übereinstimmen. Man kann es natürlich auch ohne cast machen.



  • Blake_MaX schrieb:

    bringt nichts! mein code sieht folgendermaßen aus:

    ...

    Du rufst da srand aber in einer Schleife auf. Die sollst du in der main genau ein einziges mal aufrufen!



  • Blake_MaX schrieb:

    bringt nichts!

    klar.
    srand ( static_cast<unsigned int> ( 1 ) );
    tut nicht gut sein.

    srand (time(0)); //nach #include <ctime>
    

    oder drakons

    ::srand ( static_cast<unsigned int> ( ::timeGetTime () ) ); //nach #include
    

    <windows.h>
    und das srand NUR EINMAL AM BESTEN AM ANGANG DER MAIN aufrufen.



  • wie gesagt das hatte ich schon vorher gemacht aber das war wohl irgendwie falsch danke für die hilfe!

    und jetzt noch eine letzt frage, um zu bestimmen, dass er immer verschiedene zahlen ausgibt, gibt es da auch einen extra befehl, oder muss ich mit if und so deklarieren?



  • die sind immer verschieden weil srand(uhrzeit()) den zufallszahlengenerator bei jedem programmstart mit der uhrzeit initialisiert. und du immer zu ner anderen uhrzeit startest.



  • h stimmt du hast recht! vielen dank!!



  • Ich würde empfehlen für Debuging Vorgänge feste Werte zu nehmen, oder zumindest die Werte mitzuloggen, da du ansonsten den Fehler kaum noch nachvollziehen kannst, wenn du den Wert, den du übergibst nicht kennst.



  • Du kannst auch innerhalb des Programmflusses srand() einsetzen, oder eben nicht - je nachdem, ob du die gleiche Zahlenfolge willst.

    Und ansonsten reicht ein "//" vor dem Aufruf. Übrigens gibt es in C++ keine Befehle, sondern Anweisungen und Funktionen.



  • Nexus schrieb:

    Übrigens gibt es in C++ keine Befehle, sondern Anweisungen und Funktionen.

    wobei aber funktionsaufrufe befehle sind.

    die frage "mit welcher funktion initialisiere ich den zufallszahlengenerator" beantwortet man mit "srand".
    die frage "mit welchem befehl initialisiere ich den zufallszahlengenerator" beantwortet man mit "srand(time(0));".



  • "Befehle" würde ich aber in C++ nicht verwenden, da das zu Missverständnissen führen kann. Meines Erachtens ist dieser Begriff eher in maschinennaher Programmierung (Assembler), bei der immer einzelne ALU-Befehle gemeint sind, gebräuchlich.

    Dass es keine Befehle "gibt" - da hast du Recht - war wohl zu strikt formuliert (es gibt ja auch Inline-Assembler etc)...


Anmelden zum Antworten