zufällige Zahl von 1 bis 4
-
Hi, ich brauche eine Funktion die mir zufällig die Zahlen von 1 bis 4 ausgibt.
kann mir da jemannd weiter helfen, wie ich soeine Funktion programmiere.
-
Hallo
Forumssuche nach *random* benutzen.
bis bald
akari
-
Danke, aber aus den Einträgen werd ich net so richtig schlau. kann mir nicht mal jemand schnell sagen wie ich das programmiere.
Danke!!
-
Ja, im einfachsten Fall holst du dir per rand() eine Zufallszahl und skalierst sie auf deinen gewünschten Zahlenbereich.
-
silvermain1104 schrieb:
... kann mir nicht mal jemand schnell sagen wie ich das programmiere.
Danke!!
Bitte:
// -- File: Zufall.h #ifndef ZUFALL_H_INCLUDED_ #define ZUFALL_H_INCLUDED_ #include <cstdlib> // rand() #include <ctime> // time() void init_rand() { static bool randInitialized = false; if( !randInitialized ) { using namespace std; srand( time(0) ); rand(); randInitialized = true; } } template< typename T > class Zufall { public: typedef T value_type; Zufall( value_type von, value_type bis ) : m_start( von ) , m_faktor( (bis - von) / (1.0 + RAND_MAX) ) { init_rand(); } value_type operator()() { using namespace std; return m_start + value_type( rand() * m_faktor ); } private: value_type m_start; double m_faktor; }; #endif // ZUFALL_H_INCLUDED_
und die Anwendung:
#include "Zufall.h" #include <iostream> int main() { using namespace std; Zufall< int > z( 1, 5 ); // 1..4 := halboffenes Intervall [1;5) for( int n=10; n; --n ) // 10 Zufallszahlen cout << z() << endl; return 0; }
Gruß
WernerEdit: Bugfix - falls T ein int-Typ ist und 'von' < 0 war die Verteilung falsch.
Zeile 34 war vorher 'return value_type( m_start + rand() * m_faktor );'
-
Danke Werner hast mir echt geholfen.
-
Oder so:
#include <iostream> #include <ctime> using namespace std; int main() { srand(time(NULL)); //rand() erzeugt nur Pseudo-Zufallszahlen. //Hier setze ich den Start-Wert von rand() //Auf die aktuelle Zeit. cout<<rand() % 4 + 1; //der Modulo-Operator % Gibt den Rest einer //Ganzzahlen-Division zurück. //Man teile(modulo) rand() durch 4 und addiere //1, schon bekommt man ein Zahl von 1-4. return 0; }
-
danke ne0r,
das is ja noch besser.
-
silvermain1104 schrieb:
danke ne0r,
das is ja noch besser... das ist eine Frage des Gütekriteriums
Gruß
Werner
-
Werner Salomon schrieb:
silvermain1104 schrieb:
danke ne0r,
das is ja noch besser... das ist eine Frage des Gütekriteriums
Ich hätte es jetzt eher "Perlen vor die Säue" genannt, aber auch o.k.
Netter Artikel zu rand und ko: http://eternallyconfuzzled.com/arts/jsw_art_rand.aspx
-
int einsbisvier = (rand() >> (sizeof(int) * 8 - 2)) + 1;
-
Und falsch.
-
Stimmt ist falsch. Vom Prinzip aber richtig.
Muss man eben sizeof(int) * 8 durch die Position des hoechsten gesetzten Bits in RAND_MAX ersetzen - entweder als Konstate oder als Template das nacher niemand mehr versteht.