PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : zufalls-zahl in bestimmten bereich?



Xerxes
18-08-2002, 13:00
wie bekomme ich in c eine zufallszahl in einem bestimmten bereich (0 bis 1000)?
In auf www.cppreference.com steht, dass die function rand() eine zufallszahl zweischen 0 und RAND_MAX zurückgibt. hab also das ursprüngliche RAND_MAX undefined und mir ein neues gemacht. trotzdem kommen da nur zu große zahlen raus... :(
was mach ich falsch?

#include <stdio.h>
#include <stdlib.h>

#ifdev RAND_MAX
#undef RAND_MAX
#endif
#define RAND_MAX 1000

//--------------------------------------------------------------------------

int main( int argc, char *argv[] )
{
int i = 0;

srand( time() );
for( i = 0; i < 5; i ++ )
{
printf( "No %2d %10d\n", i, rand() );
}

return 0;
}

tkortkamp
18-08-2002, 13:08
Guckmal in die man-Page von srand()

man 3 srand

Wenn du kein Unix/Linux benutzt dann kann ich dir die hier auch pasten.

c ya,
Tobias

Xerxes
18-08-2002, 17:09
doch. hab linux. danke :-)

*grmpf* Zitat: "Kein Eintrag vorhanden in man 3"
kannst doch mal pasten? ich versuch derweil irgendwo die man-pages her zu kriegen... ;)

tkortkamp
18-08-2002, 17:30
Klar hier ist sie:


RAND(3) Bibliotheksfunktionen RAND(3)



BEZEICHNUNG
rand, srand - Zufallszahlengenerator

ÜEBERSICHT
#include <stdlib.h>

int rand(void);

void srand(unsigned int seed);

BESCHREIBUNG
Die Funktion rand() liefert eine Pseudozufalls-Ganzzahl
(integer) zwischem 0 und RAND_MAX.

Die Funktion srand() setzt ihr Argument als Ursprung für
eine neue Reihe von Pseudozufalls-Ganzzahlen ein, welche
von rand() geliefert werden. Diese Sequenzen sind durch
Aufruf von srand() mit dem selben Ursprungswert wiederhol*-
bar.

Wenn kein Ursprungswert angegeben wird, wird 1 als
Ursprungswert für rand() angenommen.

RÜCKGABEWERT
Die Funktion rand() liefert einen Wert zwischen 0 und
RAND_MAX. Die Funktion srand() liefert keinen Wert
zurück.

ANMERKUNGEN
Die Versionen von rand() und srand() in der Linux C-Bib*
liothek benutzen den selben Zufallszahlengenerator wie
random() und srandom(), d.h. niederwerte Bits sind genauso
zufällig wie höherwertige Bits. Bei älteren Implementa*
tionen von rand() sind niederwerte Bits jedoch viel
weniger zufällig als höherwertige Bits.

In Numerical Recipes in C: The Art of Scientific Computing
(William H. Press, Brian P. Flannery, Saul A. Teukolsky,
William T. Vetterling; New York: Cambridge University
Press, 1990 (1st ed, p. 207)), finden sich die folgenden
Kommentare:
"Wenn Sie Zufalls-Ganzzahlen zwischen 1 und 10
erzeugen möchten, sollten Sie dies immer wie folgt
tun:

j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

und niemals auf folgene oder ähnliche Weise:

j=1+((int) (1000000.0*rand()) % 10);

(wodurch niederwerte Bits benutzt würden)."

Zufallszahlenerzeugung ist ein kompliziertes Thema. Das
Buch Numerical Recipes in C (siehe oben) liefert eine
exzellente Diskussion über praktische Zufallszahlenerzeu*
gung in Kapitel 7 (Zufallszahlen).

Für eine mehr theoretische Diskussion, die auch viele
praktische Aspekte behandelt, sehen Sie bitte Kapitel 3
(Zufallszahlen) in Donald E. Knuths The Art of Computer
Programming, volume 2 (Seminumerical Algorithms), 2nd ed.;
Reading, Massachusetts: Addison-Wesley Publishing Company,
1981.

KONFORM ZU
SVID 3, BSD 4.3, ISO 9899

SIEHE AUCH
random(3), srandom(3), initstate(3), setstate(3).




GNU 18. Mai 1996 RAND(3)

Xerxes
18-08-2002, 22:10
danke.
jetz ist auch mein erstes wirkliches c-programm fertig. ist vielleicht noch nicht optimal, aber immerhin :-)

tkortkamp
18-08-2002, 22:29
ähh... klappt nicht so ganz... :rolleyes:



Bitte gib deinen Namen ein: Tobias
Schön, Tobias. Wusstest du eigentlich schon, dass dein Name 6 Buchstaben hat?

Und jetzt gebe bitte dein Alter ein (nicht schummeln!): 17
Oh, noch nicht mal volljährig? Naja, dafür gibt's immerhin noch 15 Versuche.

Ermittle Zufallszahl zwischen 0 und 1000...

Du hast jetzt 15 Versuche um die Zahl im Bereich 0 bis 1000 zu erraten.
Versuch 1: 5
Die Zahl ist sehr, sehr viel größer als 5.
Versuch 2: 8
Die Zahl ist sehr, sehr viel größer als 8.
Versuch 3: 999
Die Zahl ist sehr viel größer als 999.
Versuch 4: 1000
Die Zahl ist sehr viel größer als 1000.
Versuch 5: 1002 <--:confused:
Die Zahl ist sehr viel größer als 1002.
Versuch 6:


EDIT:
Hab das nochmal laufen lassen:


Die Zahl ist sehr viel größer als 640.
Versuch 12: 641
Die Zahl ist sehr, sehr viel kleiner als 641.
Versuch 13: 640
Die Zahl ist sehr viel größer als 640.


Muss man jetzt auch noch Dezimalzahlen raten? :eek:

c ya,
Tobias

Xerxes
18-08-2002, 22:33
nanu. was ist denn da passiert? hm. werd morgen mal gucken, was ich da verbockt hab....die zufalls-zahl müsste aber eigentlich richig (also < 1000 )sein