Zufallsgen in C++

-starter-

Neuling
Thread Starter
Mitglied seit
18.03.2002
Beiträge
306
Hi leutz!

ich brauche einen Zufallsgenerator in C++ als Funktion, die int-Zahlen z.B. zwischen 1 und 10 liefert. Mit der Standart-Funktion rand() kombiniert mit srand() klappt's bei mir nicht so recht.

Es sollte auch keine 'only Visual'-Funktion (wie es 'random()' glaube ich ist) sein.

Danke schon mal!
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Was klappt den genau nicht?
Wenn du zahlen bis zu einem x-beliebigen Wert nur haben möchtest, musst du das Ergebniss von rand() nochmal zusätzlich bearbeiten. Halt am besten mit dem Modulo (%) Operator.

Code:
#include <iostream>
#include <time.h>

using namespace std;


int main(void)
{
	int i;

	cout << "Zufaellige Zahl zwischen 1-10\n" << endl;

	srand( time(NULL) );
        for( i = 0; i < 10; i++ )
	{
		printf("Zufaellige Zahl: %d\n", (rand()%10)+1 );
	}

	return 0;
}
 
Zuletzt bearbeitet:
Das ist natürlich ein Argument!

Ich lern grad C++ und bin deshalb garnicht draufgekommen, dass man das mit dem Modulo machen kann.

Danke!
 
In der Int-Fkt ging's aber als Fkt hats bei mir doch nicht geklappt. Da komt dann immer nur zB. 4 raus


#include <iostream>
#include <time.h>

using namespace std;


int zufall(){
srand( time(NULL) );
return ((rand()%6)+1);
}


int main(){
for(int h=0; h<20; h++){
cout << "Zufallszahl: " << zufall() << endl;
}
}
 
Setz das srand() aus der Funktion heraus.

Mit srand() setzt du den Startwert, womit rand() dann Rechnerisch eine "Zufallszahl"ausgibt. Als Startwert setzt du ja immer die aktuelle Uhrzeit.

Du rufst nun in deiner main Funktion 20 mal die Funktion zufall() auf. Jedoch wird der Startwert immer wieder gleich gesetzt. Die Zeitangabe ist nur sekundengenau. Und das ganze Programm, hat ja nichtmal eine Laufzeit von 1 Sekunde.

Von daher geht dein Programm folgende Schritte.

Es geht in die for Schliefe. Es wird zufall() aufgerufen. Dort wird der Startwert initialisiert mit srand() und mithilfe von rand() wird die nächste Zahl berechnet. Und bei dir zurück gegeben.

Danach wird "h" um eins erhöht und es wird wieder zufall() aufgerufen. Nun wird der Startwert aber wieder auf auf die Uhrzeit gesetzt. Da es aber nur Sekundengenau ist, hat sich an der Uhrzeit nichts geändert. Mit rand() wird dann wieder eine Berechnung ausgeführt. Da die Berechnung immer gleich ist, kommt auch hier wieder die selbe Zahl heraus.


Setz ganz einfach srand() vor deiner for Schleife in deiner main Funktion.


Aber verstehe nicht genau warum du für rand() eine extra Funktion bauen möchtest. Weil das letztendlich nur ein Einzeiler ist, und dafür eine Funktion eigentlich nur Rechenzeit verschwendung ist.


Code:
#include <iostream>
#include <time.h>

using namespace std;


int zufall()
{
	return ((rand()%6)+1);
}


int main()
{
	srand( time(NULL) );
	for(int h=0; h<20; h++)
		cout << "Zufallszahl: " << zufall() << endl;
}

oder besser schreibe es gleich so.

Code:
#include <iostream>
#include <time.h>

using namespace std;


int main()
{
	srand( time(NULL) );
	for(int h=0; h<20; h++)
		cout << "Zufallszahl: " << (rand()%6)+1 << endl;
}
 
Zuletzt bearbeitet:
alles klar.:drool:

Ich nehme lieber eine Fkt, weil ich da noch ein paar Sachen drin checken will; z.B. soll eine bestimmte Zahl nicht returnt werden etc. D.h. es wird dann schon noch ein Mehrzeiler.
 
Okay, ab jetzt ist es halt Geschmacksache ob du nun eine Funktion nimmst, oder nicht. Sofern du z.B. nur eine Zahl nicht ausgeben möchtest, also wirklcih etwas kleines ist, würde ich trotzdem keine Funktion benutzen. ;)

Code:
#include <iostream>
#include <time.h>

using namespace std;


int main()
{
	int i;
	int zahl;

	srand( time(NULL) );

	for(i=0; i<20; i++)
	{
		zahl = (rand()%10)+1;

		if ( zahl == 5 )
			continue;

		cout << zahl << endl;
	}

	return 0;
}
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh