Archiv verlassen und diese Seite im Standarddesign anzeigen : rand()
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
immer andere? du kriegst also immer dieselben ... dann probier
randomize(); //muss nur einmal im prog aufgerufen werden
nZuffi = rand(98) + 1;
so kenn ich das vom Borland ... aber unter msvcpp geht es net. :(
#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);
}
@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!
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. ;)
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
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:
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 **
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. :)
kleinere schachen kannste logisch fragen aber bitte nicht sowas wie:
was ist obejektorientierung :p:mauer:
jo, schon klar ... :D
wie gesagt, werd jetzt erst mal ein paar kapitel weiterlesen ...
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.