PDA

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.

Trap
2005-01-15, 14:27:52
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?

Trap
2005-01-21, 14:46:18
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...