PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : rand()


pate33
20.09.2002, 13:09
und gleich nochmal nerven ... :D

wie funtzt das mit rand() dass ich immer andere zahlen bekomme? hab es mit srand versucht, mit der function time, aber das script ist so schnell, dass die zeit gleich ist ...

es sollen auch nur zahlen von 1 bis 99 generiert werden ...

thanks


Schaf
20.09.2002, 13:20
immer andere? du kriegst also immer dieselben ... dann probier


randomize(); //muss nur einmal im prog aufgerufen werden
nZuffi = rand(98) + 1;

pate33
20.09.2002, 13:35
so kenn ich das vom Borland ... aber unter msvcpp geht es net. :(

DerWolf
20.09.2002, 15:53
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void main( void )
{
int i;

/* Seed the random-number generator with current time so that
* the numbers will be different every time we run.
*/
srand( (unsigned)time( NULL ) );

/* Display 10 numbers. (1-99)*/
for( i = 0; i < 10;i++ )
printf( " %d\n", rand()%99+1);
}

xOOn
20.09.2002, 16:56
@Patrick Heneise

du scheinst ja auf druck C++ zu lernen:p :p


also rand liefert einfach der reihe nach eine liste von zahlen!
deshalb kommen auch bei jedem progsstart die selben zahlen, mit DerWolf's routine versetzt zu einfach die aktuelle position der liste, und das in abhaengigkeit der zeit!

pate33
23.09.2002, 11:26
jo, hardcode c++ learning. :D

will das endlich mal hinbekommen. leider hab ich eben keinen borland. mit dem waer das einfacher ... :rolleyes:

wgn. rand() ... sind aber nun immernoch die selben zahlen. :(

hier der source:


int math::GetValue() {

int i;

/* Seed the random-number generator with current time so that
* the numbers will be different every time we run.
*/
srand( (unsigned)time( NULL ) );

/* Display 10 numbers. (1-99)*/
i = rand()%99+1;

return i;
}

int main()
{
math *calc = new math ();
cout << "Math v1 by -leliel-\n\n\n";
cout << "Aufgabe: ";
cout << calc->GetValue() << " + ";
cout << calc->GetValue() << "\n\n";
delete calc;
return 0;
}

Jan Krüger
23.09.2002, 11:37
du solltest srand() nicht vor jedem abrufen benutzen, sondern nur beim ersten mal. denn der generator wird mit der momentanen zeit initialisiert und die ändert sich halt nur jede sekunde. ;)

xOOn
23.09.2002, 11:38
time( NULL )
das hat die time funktion nicht so gerne du musst ihr was geben wo sie reinschreiben kann :p

schrieb alles am besten so! du setzt srand nur mehr beim anlegen der klasse:

math::math ()
{
time_t x;
srand( (unsigned)time( &x ) );
}

int math::GetValue() {
int i;

/* Seed the random-number generator with current time so that
* the numbers will be different every time we run.
*/


/* Display 10 numbers. (1-99)*/
i = rand()%99+1;

return i;
}

int main()
{
math *calc = new math ();
cout << "Math v1 by -leliel-\n\n\n";
cout << "Aufgabe: ";
cout << calc->GetValue() << " + ";
cout << calc->GetValue() << "\n\n";
delete calc;
return 0;
}

in der klassendef musst du logisch auch noch den constructor dazufuegen

class math:
....
public:
....
math ();

dann funkts auch!

auszug aus der time-help

Header File

time.h

Category

Time and Date Routines

Prototype

time_t time(time_t *timer);

Description

Gets time of day.

time gives the current time, in seconds, elapsed since 00:00:00 GMT, January 1, 1970, and stores that value in the location pointed to by timer, provided that timer is not a NULL pointer.

Return Value

time returns the elapsed time in seconds.


-------------
PS damit aenderst du auch das was JaST richtigerweisse angedeutet hat

pate33
23.09.2002, 13:02
in der klassendef musst du logisch auch noch den constructor dazufuegen

class math:
....
public:
....
math ();

dann funkts auch!


eventuell kannst mir das nochmal genauer erklaeren, da ich das mit den konstruktoren und destruktoren noch nicht so ganz kapiert habe ... :rolleyes:

xOOn
23.09.2002, 13:15
also der konstructor hat immer den selben namen wie die klasse und wird zu 99,9 % im public-teil definiert er hat keinen rueckgabewert und kann mehrere parameter zur uebergabe haben!

der destructor hat den namen der klasse nur mit dem ~ voran.

zB.

class math
{
public:
math (); // der constructor
~math (); // der destructor

int math::GetValue()
};

so nun muesste das klar sein, ich hoffe du weisst was constructor und destructor sind, weil das zu erklaeren das kann dauern...
**dann ich ein buch schreib **

pate33
23.09.2002, 13:29
ne, so ganz ist es mir nich klar. aber ich hab hier thinking in c++ rumliegen, das werd ich mir mal noch durchlesen. danke erstmal. :)

xOOn
23.09.2002, 13:32
kleinere schachen kannste logisch fragen aber bitte nicht sowas wie:

was ist obejektorientierung :p:mauer:

pate33
23.09.2002, 13:34
jo, schon klar ... :D

wie gesagt, werd jetzt erst mal ein paar kapitel weiterlesen ...