Archiv verlassen und diese Seite im Standarddesign anzeigen : Random-Funktion für Borland C++
Johnny
2005-01-14, 21:08:36
Hallo Board, brauche schnell Hilfe!
Die normale "random(xxx)" reicht mir nicht. Brauche etwas, wo ich 2 Zahlen eingeben kann, zwischen den eine Zufallszahl generiert wird.
Danke.
loOsAa
2005-01-14, 21:54:22
sry, aber kannst du dich vielleicht deutlicher ausdrucken?
loOsAa
2005-01-14, 22:04:30
... oder naja, soweit ich verstehe:
entweder 5 oder 9:
int array[2] = {5, 9};
srand(1);
int zufall = array[rand()];
...sollte funktionieren
someone
2005-01-14, 22:05:02
#include <math.h>
srand(time);
zahl=rand()%zahl2;
zahl2 gibt die Obergrenze an. Alternativ drand48() benutzen
maximAL
2005-01-14, 22:17:10
Die normale "random(xxx)" reicht mir nicht. Brauche etwas, wo ich 2 Zahlen eingeben kann, zwischen den eine Zufallszahl generiert wird.
also wenn du dir das nicht selbst schreiben kannst...
Johnny
2005-01-15, 01:24:29
@maximAL. Nein, kann ich nicht.
@loOsAa. Habs so gemeint: ich übergebe als Parameter zwei Zahlen-eine als Untergrenze z.B. 8 und die zweite als Obergrenze z.B. 15. Als Rückgabewert möchte ich eine Zufallszahl zwischen 8 und 15 erhalten, z.B 12.
loOsAa
2005-01-15, 02:19:25
in diesem fall sollte das funktionieren:
int func( int zahl1, int zahl2 )
{
return ( (rand()%(zahl2-zahl1)) + zahl1 );
}
EDIT: ok ... jetzt habe ich. sieht vielleicht kompliziert aus aber sollte funktionieren
Johnny
2005-01-15, 11:43:41
in diesem fall sollte das funktionieren:
int func( int zahl1, int zahl2 )
{
return ( (rand()%(zahl2-zahl1)) + zahl1 );
}
EDIT: ok ... jetzt habe ich. sieht vielleicht kompliziert aus aber sollte funktionieren
Danke, Danke, Danke.
in diesem fall sollte das funktionieren:
int func( int zahl1, int zahl2 )
{
return ( (rand()%(zahl2-zahl1)) + zahl1 );
}
Das funktioniert, gibt aber keine gleichverteilten Zufallszahlen. Zumindest nicht für alle möglichen Eingaben.
Wenn Gleichverteilung wichtig ist:
int randint(int lower, int upper)
{
int range=upper-lower;
int rout;
do{
rout=(rand()/(RAND_MAX/range))
} while(rout>range)
return rout+lower;
}
Johnny
2005-01-21, 13:07:25
Das funktioniert, gibt aber keine gleichverteilten Zufallszahlen. Zumindest nicht für alle möglichen Eingaben.
Wenn Gleichverteilung wichtig ist:
int randint(int lower, int upper)
{
int range=upper-lower;
int rout;
do{
rout=(rand()/(RAND_MAX/range))
} while(rout>range)
return rout+lower;
}
Was meinst du mit gleichverteilung?
Gleichverteilung: Wenn man unendlich viele Zufallszahlen erzeugt kommt jede im Intervall gleich oft als Ergebnis.
Bei dem Code mit % (Modulo) ist das nicht sicher, es gibt Kombinationen von Zufallsgeneratoren und Grenzen, so dass bestimmte Werte doppelt so oft vorkommen wie andere...
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.