Zufallszahl
-
C++, Zufallszahl?
Wie?
-
Hättste die Board-Suche benutzt, hättste noch weniger tippen müssen.
-
Board-Suche??
-
-
Ja, oben rechts. Da findest du viele, viele Links. Dort wo Logout[<Nickname>], direkt darüber in der Mitte, dort findest du "Suchen". Oder c++eus Link verwenden.
Nebenbei gibt es noch die FAQ weiter unten im Forum, dort wirste das nach einiger Zeit suchen auch finden.Code-Hacker
-
ach da,
das ist aber auch schwer zu finden, wenn man nicht weiss wo es ist
-
Ungefähr an EXACT der Stelle steht das Suchen bei 99% aller mir bekannten Bulletin Boards
-
hab ich das jetzt richtig verstanden?
rand() liefert mir eine Zufallszahl
und mit srand(...) initiallisiere ich den zufafallsgenerator
um die funktionen zu benutzen muss ich stdlib.h einbindenwelchn Typ hat das argument von srand? und welchen Zielbereich hat rand() ?
-
Schau mal in Die Hilfe deines Compilers, da steht bestimmt was über rand() und srand()
und wenn cniht, gibts ncoh msdn(weiß nciht ob sowas da sthet) oder so was ähnliches.
Maxi
-
Das hab ich auch mal damit probiert. Hab aber nur zufällig Zahlen zwischen 0 und 32xxx erhalten und damit konnte ich nix anfangen ^^
zwischen [0 < x < 1[ wäre es besser.
MfG
-
Zufallszahl zwischen x und y:
float x,y,zufall; srand(1); zufall=x+(rand()/(RAND_MAX*y));
Zumindest sollte es so klappen wenn ich keinen Denkfehler drin habe
Und man x und y entsprechende Werte zugewiesen hat
-
#include <conio.h> #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int Zufallsgenerator(int max); int main(int argc,char argv[]){ int Zufallswert; Zufallswert=Zufallsgenerator(1000); cout << Zufallswert<<endl; getch(); return 0; } int Zufallsgenerator(int max){ #ifndef _ZufallsgeneratorCalled_ #define _ZufallsgeneratorCalled_ srand(static_cast<unsigned>(time(0))); #endif return rand()%max; }
cu max
-
Master_Max schrieb:
int Zufallsgenerator(int max){ #ifndef _ZufallsgeneratorCalled_ #define _ZufallsgeneratorCalled_ srand(static_cast<unsigned>(time(0))); #endif return rand()%max; }
Das funktioniert so nicht. Die Präcompiler-Anweisungen werden zur Compilezeit ausgewertet, und nicht wenn die Funktion aufgerufen wird.
-
Aha, danke.
-
Naja, Du seedest den Generator ja auch jedesmal mit einer neuen Zeit, alleine deswegen macht der schon neue Zufallszahlen... Aber durch das ewig neue seeden braucht er wesentlich mehr CPU-Zeit
Ich würde das dann eher so machen:
int Zufallsgenerator(int max){ static int ZufallsgeneratorCalled if !(ZufallsgeneratorCalled) { srand(static_cast<unsigned>(time(0))); ZufallsgeneratorCalled=1; } return rand()%max; }
*edit* cpp-Tag geschlossen
-
weiß eigentlich jemand wie ein computer eine zufallszahl erstellt. die muss ja auch berechnet werden, die cpu kann sich ja nicht einfach was ausdenken, aber das ist doch dann nicht wirklich zufällig.
-
Jo, die wird nach irgeinder Methode berechnet. Dabei wird von einem Startwert ausgegangen und die Zahlenfolge berechnet. Deshalb muss man ja auch den Zufallsgenerator initialisieren, wenn man nicht immer die selben Zufallszahlen will.
Aber oft braucht man das, dass man eine Folge von "Zufallszahlen" rekonstruieren kann.
Wenn nicht, kann man ja die Zeit als Startwert nehmen. Es ist recht unwahrscheinlich, dass das Programm immer zur gleichen Millisekunde gestartet wird.
-
ja, aber es muss ja auch gewährleistet sein, damit jede zahl die gleichen chancen hat "errechnet" zu werden. ich stelle mir das schon ziemlich kompliziert vor.
-
Nein, ist es nicht. rand() erzeugt doch irgendeine extrem lange Zahl und mit % bleibst du im gewünschten Wertebereich. Und bekanntlich sind die verschiedenen Restwerte gleichmäßig verteilt, sie steigen ja immer um 1 an, bis zum Divisor.
EDIT: Es gibt Formeln dafür, ich hab auch mal selber einen Zufallsgenerator geschrieben, weil ich einen für die Logik und einen für die Grafik brauchte.
-
Ich habe mal eine Klasse auf der Basis von rand geschrieben die halbwegs korrekt Grenzen anpasst (ohne Schieflage).
// Random.hpp: #pragma once class Random { public: Random(); ~Random(); static const int RandMax; int Next() const; int NextMin(int min) const; int NextMax(int max) const; int NextRange(int min, int max) const; }; // Random.cpp: #include <cstdlib> #include <ctime> #include ".\Random.hpp" const int Random::RandMax = RAND_MAX; Random::Random() { // Nur einmal seed für alle Instanzen static bool seed = false; if(!seed) { srand(static_cast<unsigned>(time(0))); seed = true; } } Random::~Random() { } int Random::Next() const { return rand(); } int Random::NextMin(int min) const { return NextMax(RandMax - min) + min; } int Random::NextMax(int max) const { int r, mr = RandMax - (RandMax % max); do { r = rand(); } while(r >= mr); return r % max; } int Random::NextRange(int min, int max) const { return NextMax(max - min) + min; }