Erzeugen von Zufallszahlen
-
Ich habe eine Funktion geschrieben zum Erzeugen von Zufallszahlen, aber aus irgendeinem Grund kann Dev-C++ sie nicht kompilieren.
Als Fehler kommt immer
[Linker error] undefined reference to `WinMain@16'Mein Programm:
#include <cstdio> #include <cstdlib> #include <time.h> #include <iostream> using namespace std; //zufälliges Ereignis void Zufallszahlen() { double ZufallsZ; bool ZufallA=false; srand ((unsigned) time (NULL)); ZufallsZ=(rand()%RAND_MAX); if(ZufallsZ< 0.000003) ZufallA=true; //Ausfall durch zufaelliges Ereignis else ZufallA=false; }
-
Du hast einen "Linker error", also wird die Datei sehr wohl kompiliert. Das Problem scheint der fehlende Einstiegspunkt main zu sein:
int main() { Zufallszahlen(); }So sollte dann auch das mit dem Linken klappen.
-
Ergänzung: Da der Linker nach einer WinMain() sucht, solltest du dein Projekt mal umstellen zu einer Konsolenanwendung.
-
D'oh.
Da hätte ich auch selbst draufkommen müssen. Vielen Dank.
-
Wie könnte ich das denn machen, wenn ich Zufallszahlen zwischen 0 und 1 will?
-
Modulo N + 1, wobei N die größte Zahl darstellt die du haben willst. In diesem Fall also Modulo 2:
ZufallsZ=(rand()%2);
-
Wenn du gebrochene Zahlen in diesem Bereich benötigst, dividier' den Rückgabewert von rand() lieber durch RAND_MAX:
double zahl = rand() / (double)RAND_MAX;
-
Jetzt kommt nur 1 oder 10 raus.
Ich brauche Zahlen zwischen 0 und 1, die ich hinterher als Prozentanteile nutzen kann.
-
Lass dir doch Zahlen zw. 0 und 10 geben und teil das Ergebnis durch 10.
-
Ok, danke. Ich habe jetzt auf jeden Fall mal Zahlen, wie ich sie möchte.
Allerdings liegen, die ja alle relativ nah beinander, gibt es eine Möglichkeit, die besser zu verteilen?
-
Nochmal langsam:
rand() liefert selber ganze Zahlen zwischen 0 und RAND_MAX (der Wert steht im Header <cstdlib>. Die mußt du noch auf den benötigten Bereich runterskalieren.Vellas' Methode (mit dem Modulo) liefert ebenfalls nur Ganzzahlen (rand()%2 also entweder 0 oder 1 in (mehr oder weniger) zufälliger Folge).
Um Gleitkommazahlen in deinem Bereich zu bekommen, bleibt noch die Möglichkeit mit der Division (siehe mein obiger Beitrag).
-
Ich dividiere jetzt durch RAND_MAX und bekomme also Zahlen zwischen 0 und 1. Das klappt also gut.