Zufallszahlen
-
hi
brauche eine Funktion, die mir 10 verschiedene zufallszahlen zwischen 3 und 5 (einschließlich) ausgibt.
bei mir wird es 10mal dieselbe ... allerdings ändert sie sich bei jedem neustart was mir aber nicht viel bringt
-
Hast du das Random Objekt auch initialisiert mit einem Seed?
Z.b.
System::Random rnd(GetTickCount());
und dann eben:
10 mal rnd.Next(3,5) aufrufenBR
-
wo kommt System::Random rnd(GetTickCount()); hin ?
-
war so geplant dass ich eine funktion hab, die wenn ich sie aufrufe jedesmal ne neue zufallszahl hergibt, meine bisherige gibt immer dieselbe zurück
-
Bonzy schrieb:
war so geplant dass ich eine funktion hab, die wenn ich sie aufrufe jedesmal ne neue zufallszahl hergibt, meine bisherige gibt immer dieselbe zurück
Zeig mal wie du das bisher machst.
BR
-
int zufall void()
{int x;
for(int i=0;i<=10;++i)
{
srand(time(NULL));
x=(rand()%3+3);
}return x;
}
-
int zufall void() { int x; for(int i=0;i<=10;++i) { srand(time(NULL)); x=(rand()%3+3); } return x; }
xD
-
wenns geht bitte jetzt antworten ... muss off
-
Du darfst das "srand" nur *einmal* zur Laufzeit Deines Programmes ausführen!!!
-
könntest du mir sagen was ich stattdessen schreibe oder mir direkt die funktion richtig reinschreiben ?
danke im vorraus
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
void zufall(void) { int x; srand((unsigned int)time(NULL)); for(int i=0;i<10;++i) // willst du 10 Zufallszahlen? dann i < 10! { x = rand()%3+3; printf("%d", x); } //return x; // return x bringt nichts, da immer nur die letzte Zufallszahl zurückgegeben wird }
Es gibt tausende Seiten zu diesem Thema und ich wette, du hast weder in die FAQ geschaut noch Google mit "Zufallszahlen C rand()" gefüttert....
-
ich habe durchaus nach funktionen gesucht, die mit zufallszahlen zusammenhängen, doch ich hab keine gefunden die mir was gebracht hat und auch deine funktioniert leider nicht weil ich immer wieder dieselben 10 zufallszahlen bekomme, wenn ich die funktion mehrfach aufrufe
und sollte eine funktion nicht dazu da sein, sie mehrmals aufzurufen ?
-
Hallo
Rufe srand nur einmal am Programmbeginn auf. Was bedeutet deine Signatur?
chrische
-
aber wenn ich srand nur einmal aufrufe bekomme ich doch auch nur eine zufallszahl oder ?
tja was soll sie bloß bedeuten :p
-
... wie gesagt, srand() darf nur einmal aufgerufen werden. Wenn Du Deine Funktion zu schnell hintereinander mehrmals aufruft, kann ggf. der Initialwert bei srand() identisch sein!
Deshalb die folgende kleine Modifikation:
void zufall(void) { static int firstflag; int x; if (firstflag == 0) { firstflag = 1; srand((unsigned int)time(NULL)); } for(int i=0;i<10;++i) { x = rand()%3+3; printf("%d", x); } }
-
Hallo
Bonzy schrieb:
aber wenn ich srand nur einmal aufrufe bekomme ich doch auch nur eine zufallszahl oder ?
tja was soll sie bloß bedeuten :p
Nein. srand initialisiert nur den Zufallsgenerator. Zufallszahlen selber liefert die Funktion rand();
chrische
-
also ich schildere das problem nochmal von vorn :
ich brauche eine funktion, die mir immer wenn ich sie abrufe eine neue zufallszahl zwischen 3 und 5 (einschließlich) gibt.
momentan gibt meine funktion in einem gewissen zeitraum immer dieselbe her.
also wenn ich sie innerhalb von 10 sekunden 5 mal aufrufe kommt 5 mal dieselbe zahl.
in den nächsten 10 sekunden zwar eine andere dafür aber wieder 5 mal dieselbe.
das liegt wohl daran, dass sich die zufallszahlen an der zeit orientieren.
gibt es überhaupt eine lösung für dieses problem ??
-
Hallo
Wenn du öfters srand mit demselben Parameter initialisierst, bekommst du auch immer die gleichen Zahlen. Also musst du srand am Anfang des Programms aufrufen und dann erst die Funktion zur Ermittlung der Zufallszahlen.
chrische
-
Danke jetzt klappts !