Zufallszahlen
-
Hallo,
ich weiß die Fragen über die Zufallszahlen gehen euch langsam auf die Nerven, aber ich komme einfach nicht weiter. Meine Zufallszahl soll unter 11 sein, was ich auch hin kriege, aber sie wiederholt sich immer wieder. Ich weiß auch, dass ich srand benutzen muss, aber irgendwie klappt das nicht, da ich auch nicht weiß, wie ich es genau anwenden muss.
Brauche ich dafür eine bestimmte library?
Ist mir auch ein wenig peinlich, aber ich raff es einfach nicht
-
Mit srand wird der Zufallsgenerator neu initialiesiert.
Wenn srand also immer mit der gleichen Zahl aufgerufen wird, dann wird auch immer
die gleiche Zahlenfolge von rand zurüchgegeben.
srand sollte nur einmal am Anfang des Programmes aufgerufen werden.
-
wer sucht der findet...
-
Ich bin zwar noch noob, aber ist es denn nicht folgendermaßen:
wenn man srand mit dem argument time(NULL) anwendet, ist die zahl doch nicht immer die gleiche, da time doch die aktuelle zeit zurück gibt, d.h. man kann
srand(time(NULL)) ruhig mehrmals verwenden.
trotzdem bin auch ich der meinung, dass man srand am anfang von main/WinMain nur einmal benutzen sollte...
cya
-
Tetris Fan schrieb:
Ich bin zwar noch noob, aber ist es denn nicht folgendermaßen:
wenn man srand mit dem argument time(NULL) anwendet, ist die zahl doch nicht immer die gleiche, da time doch die aktuelle zeit zurück gibt, d.h. man kann
srand(time(NULL)) ruhig mehrmals verwenden.
trotzdem bin auch ich der meinung, dass man srand am anfang von main/WinMain nur einmal benutzen sollte...
cyanee, nee, nee.
time(0) gibt die tzeit in sekunden an. also hätte man ne sekunde lang den gleichen zufall.
stell dir ein 4-gewinnt-spiel vor, wo nur noch in eine spalte geworfen werden darf. und nen dummen zufallscomputergegner.#define retrun return int wuerfele() { srand(time(0));//aua aua aua aua aua int z=rand()%7; return z; } int machZug() { int z=wuerfele(); while(!istGueltig(z)) z=wuerfele(); retrun z; }
wegen der gekennzeichnneten zeile braucht der rechner durchschnittlich mehr als 3 sekunden pro zug statt ner mikrosekunde.
und ausnahmsweise kann man durch kaufen eines schnelleren rechners die zeit nicht unter 3 sekunden drücken, wie bei so vielen anderen programmierfehlern.
-
Danke, bin jetzt schon sehr viel weiter gekommen, aber habe noch nicht ganz verstanden, wie ich den Minimalwert angeben kann.
Die Zz soll zwischen 11 und 32 sein.folgendes habe ich geschrieben, habe es mir aus irgendeinem Forum abgeguckt:
srand(static_cast<unsigned>(time(0)));
Zz = (rand() %(32-11+1)-11;Er zeigt mir aber immer einen Fehler an.
-
Sorry, aber: Wer lesen kann, hat mehr vom Leben.
Bei deinem Code fehlt eine schließende Klammer. Das steht aber garantiert auch in der Fehlermeldung.
Hast du verstanden, wann (und wie oft) man srand aufruft?
-
So sollte es z.B. aussehen:
int Zufallszahl(int untereGrenze, int obereGrenze) { return (rand() % (obereGrenze - untereGrenze + 1)) + untereGrenze; } int main() { srand(static_cast<unsigned>(time(0))); // Jetzt geht dein Programm los und srand wird jetzt nie wieder aufgerufen. std::cout << Zufallszahl(11, 32); }
Beachte bitte, wo srand steht.
-
Achso,
ich habe srand mehrmals verwendet. Gut zu wissen. Jetzt ist mir ein Licht aufgegangen.
Hatte vor lauter Klammern den überblick verloren. Peinlich.
Super, danke danke danke.
-
cd9000 schrieb:
So sollte es z.B. aussehen:
srand(static_cast<unsigned>(time(0)));wozu das viele casten?
-
#define retrun return
Du magst deine schreibfehler ???
-
volkard schrieb:
cd9000 schrieb:
So sollte es z.B. aussehen:
srand(static_cast<unsigned>(time(0)));wozu das viele casten?
Der Compiler spuckt sonst eine Warnung aus, da time_t beim VC++ als (signed) long definiert ist.