Bereichsangabe bei Rand()
-
Hallo,
ich habe folgendes Problem. Ich möchte bei meiner Rand() Funktion den Zahlenbereich der Zufallszahlen nicht immer bei 0 anfangen lassen, sondern
auch sagen können daß ich Zahlen in dem Bereich z.B. von 73 bis 142 oder
-27 bis 44 haben. Wie füge ich daß in meien Funktion ein?Habe bis jetzt nur so gearbeitet:
values[i] = rand() % zahlenweite;Danke
yellow1
-
#define randrange(a,b) ((a) + rand() % ((b)-(a)) )
oder
int randrange(int a, int b) { return a + rand() % (b-a); } // tippfehler korrigiert, es muss ein % und kein & seinzufallszahl im bereich [a,b[
Edit: tippfehler...
-
Vielen Dank erstmal für die schnelle Antwort.
Aber ich bin noch Anfänger und kann leider nicht
wirklich viel mit dieser Antwort anfangen.
Weiß nicht so genau wo was davon hingeschrieben wird.Meine jetzige Funktion lautet:
void feldfuellen(double * values, double count, int randrange) //Funktion zum Array füllen
{
for (int i=0; i < count; i++)
{
values[i] = rand() % randrange;Danke
-
yellow1 schrieb:
Habe bis jetzt nur so gearbeitet:
values[i] = rand() % zahlenweite;
ab jetzt geht das so:
int randrange(int a, int b) { return a + rand() % (b-a); } ... ein stueckchen weiter unten (z.b. in main())... values[i] = randrange(untergrenze, obergrenze);
du hast eine neue funktion namens randrange(), die du ueber der main halten solltest (es geht auch unter der main, wenn du prototypen/vorwaertsdeklarationen benutzt).
sorry, in meinem letzten post war ein tippfehler. das & sollte ein % sein.
-
So, habe doch alles verwenden können.
Funktion läuft.Vielen Dank
-
wieso nicht einfach so?
ist das gleiche wie was du schon hast, nur eben in eine funktion ausgelagert...values[i] = randrange(0, randrange);
was war noch gleich die frage?
-
Ich verzeifle gerade an nem ähnlichen Problem... ich will zufallswerte zwischen - 0.25 und + 0.25 erstellen...
also ich dachte mir erstmal ich mach am besten zahlen zwischen 0 bis 1/2 erzeuge und dann - 1/4 rechne ...also zahlen zwischen 0 und 1/2 :
r = (double)rand() / ( (double)RAND_MAX+(double)1 ) *1/2
?? funktioniert irgendwie nicht... zumindest kommen nur positive werte raus, wenn ich dann noch - 1/4 rechne !!! Kann man denn wirklich nur ganze Zahlen mit rand() erzeugen oder was is der grund ?? Hat irgendwer irgendeine Idee wie ich das lösen kann !! Ist dringend !!!hab schon vieles versucht.. hoffe jemand hier kann mir helfen.
ich wär über möglichst schnelle antwort sehr dankbar !!!!
-
jellyfish schrieb:
Ich verzeifle gerade an nem ähnlichen Problem... ich will zufallswerte zwischen - 0.25 und + 0.25 erstellen...
also ich dachte mir erstmal ich mach am besten zahlen zwischen 0 bis 1/2 erzeuge und dann - 1/4 rechne ...Also, ich würde das so machen... :
(rand()%10000) * (1.0/(2*10000.0)) - 1.0/4.0
So erhältst du zumindest 10000 zufällige Werte zwischen -1/4 und 1/4 (falls du mehr brauchst, die 10000 einfach mit einer anderen Zahl ersetzen).
Beispielprogramm (in c++... sorry, weiß, dass ich im C-Forum bin, aber ich kenn' mich halt besser mit c++ aus und das cout kann man ja auch relativ einfach mit printf ersetzen, genauso wie die entsprechenden header):
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { srand(time(NULL)); cout << (rand()%10000) * (1.0/(2*10000.0)) - 1.0/4.0 << endl; cout << (rand()%10000) * (1.0/(2*10000.0)) - 1.0/4.0 << endl; cout << (rand()%10000) * (1.0/(2*10000.0)) - 1.0/4.0 << endl; cout << (rand()%10000) * (1.0/(2*10000.0)) - 1.0/4.0 << endl; cout << (rand()%10000) * (1.0/(2*10000.0)) - 1.0/4.0 << endl; cout << (rand()%10000) * (1.0/(2*10000.0)) - 1.0/4.0 << endl; cout << (rand()%10000) * (1.0/(2*10000.0)) - 1.0/4.0 << endl; cout << (rand()%10000) * (1.0/(2*10000.0)) - 1.0/4.0 << endl; cout << (rand()%10000) * (1.0/(2*10000.0)) - 1.0/4.0 << endl; cout << (rand()%10000) * (1.0/(2*10000.0)) - 1.0/4.0 << endl; cout << (rand()%10000) * (1.0/(2*10000.0)) - 1.0/4.0 << endl; cout << (rand()%10000) * (1.0/(2*10000.0)) - 1.0/4.0 << endl; return 0; }
PS: kann sein, dass es auch einfacher geht, aber das war jetzt mein erster Gedanke, es so zu machen.