Zufallszahlen

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

 

Garfield12

Betreff: Zufallszahlen

BeitragDi, Mai 27, 2008 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Für Mathematik arbeite ich momentan mit Zufallszahlen unter C++. Ich habe jetzt aber schon ein kleines Problem. Ich lasse eine Zufallszahl zwischen 1 und 6 generieren und ausgeben. Aber es kommt immer erst fünf dann 6 dann 1 dann 2 usw. Ich arbeite mit dem Borland C++BuilderX Personal Edition

Mein Code:
Code: [AUSKLAPPEN]

#include <cstdlib>
#include <iostream>
using namespace std;

int main()
{

int iSecret, iGuess;

/* initialize random seed: */
srand ( time(NULL) );

/* generate secret number: */
iSecret = rand() % 6 + 1;


cout << iSecret;


return 0;

}


Ist das normal so oder ist da ein Fehler auf meiner Seite.

Ich habe schon in anderen Foren geposted aber die haben nix geantwortet.
Garfield

Smily

BeitragDi, Mai 27, 2008 16:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich geh mal davon aus, dass in C, genauso wie in fast jeder anderen Hochsprache, für die Zuffalsfunktion ein Zufallsgenerator intialisiert werden muss Wink

Edit2: Huch sry, machst du ja berreits.. ignoriere meinen post Smile
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org
 

ChristianK

BeitragDi, Mai 27, 2008 17:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab's mit VC++ 2005 kompiliert und es funktioniert einwandfrei. Es kommen nur zufällige Zahlen. Confused
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

E. Urbach

ehemals "Basicprogger"

BeitragDi, Mai 27, 2008 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Edit: Sorry, habe den Rückgabewert von time(NULL) nicht beachtet, vergesst mein Posting...

Code: [AUSKLAPPEN]
srand ( time(NULL) );

zu:
Code: [AUSKLAPPEN]
srand(MilliSecs());

Siehe srand.

MilliSecs für Windows:
Code: [AUSKLAPPEN]
//MilliSecs
inline DWORD MilliSecs()
{
   return GetTickCount();   //timeGetTime();
}

Für Linux:
Code: [AUSKLAPPEN]
//MilliSecs
inline int MilliSecs()
{
   struct timeval tv;
   gettimeofday(&tv, 0);
   return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}

Beide geben nicht dieselben Werte zurück, aber das ist irrelevant, da du nur einen variablen Wert brauchst.

Die folgenden BB-ähnlichen Funktionen kannst du möglicherweise auch gebrauchen:
Code: [AUSKLAPPEN]
const float RAND_MAX_FLOAT_INV = 1.0f / RAND_MAX;

//RandFloat
inline float RandFloat(float rangeStart, float rangeEnd)
{
   return (rand() * RAND_MAX_FLOAT_INV) * (rangeEnd - rangeStart) + rangeStart;   
}

Code: [AUSKLAPPEN]
//Rand
inline int Rand(int rangeStart, int rangeEnd)
{
   return rand() % (rangeEnd - rangeStart + 1) + rangeStart;
}
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik

The_Nici

BeitragDi, Mai 27, 2008 17:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Falsche Zufallsnetze können von starken Magnetfeldern in der Nähe verursacht werden. (Aufzüge in der Nähe?)

Blitzcoder

Newsposter

BeitragDi, Mai 27, 2008 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab gerade keine Zeit, deswegen ignoriere ich mal die Antworten meiner Vorposter und sage einfach mal, wie es nach meinen mangelnden C++-Kenntnissen funktionieren sollte:

Code: [AUSKLAPPEN]
srand (time(NULL));

// EIn paar Zahlen
for (int x=1;x<=6;x++)
{
  cout << rand()%6 << endl;
}


Ist natürlich kein lauffähiger Code, fehlt main(), die includes etc.

Und OpenSSL von Debian macht es etwa so Very Happy
Code: [AUSKLAPPEN]
int getRandomNumber() {
    return 3;
}
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

BtbN

BeitragDi, Mai 27, 2008 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganz so schlimm wars nicht, return getpid(); triffts eher. Trotzdem wars/ists ne Katastrophe.
 

Garfield12

BeitragMi, Mai 28, 2008 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Also es klappt bei einer Zahl schon richtig gut, aber jetzt hab ich das Programm erweitert:


Code: [AUSKLAPPEN]

//***********************************
//
// Kleines Programm zum ermitteln von 4 Zufallszahlen
// und Auswertung nach Abs. und Rel. Häufigkeit
//
//
// (C) Copyright by GoNevil Software Development
// More Information on www.gonevil.com
//
//***********************************



#include <cstdlib>
#include <ctime>
#include <iostream>

using namespace std;

int main()
{
   int loop;
   int eingabe;
   long b;
   long c;
   long d;
   long e;
   int six;
   int nox;


   cout << "Wie oft soll die vierer Reihe gewürfelt werden: " << endl;
   cin >> eingabe;



for(loop = 0; loop < eingabe; ++loop)
{
   // Initialisieren
   time_t sek;

   time(&sek);
   srand(sek);
   // Zufall ermitteln
   b = rand() % 6 + 1;
   c = rand() % 6 + 1;
   d = rand() % 6 + 1;
   e = rand() % 6 + 1;
   // Ausgeben
   cout << endl;
   cout << b;
if(b == 6)
{
  ++six;
}
else
{
  ++nox;
}
   cout << c;
   if(c == 6)
   {
     ++six;
   }
   else
   {
     ++nox;
   }

   cout << d;
   if(d == 6)
   {
     ++six;
   }
   else
   {
     ++nox;
   }

   cout << e;
   if(e == 6)
{
  ++six;
}
else
{
  ++nox;
}

   cout << endl;
   b == 0;
   c == 0;
   d == 0;
   e == 0;
}
// Ausgeben von richtig und Falsch
cout << endl;
cout << "Sechsen: " << six;
cout << endl;
cout << "Keine Sechsen: " << eingabe; - six;
cout << endl;





   // Abschluss des Programms
   cin.get();
   return 0;
}




Jetzt funktionieren die Zufallszahlen nicht mehr richtig.
Ausserdem möchte ich erfahren ob die in einer Reihe eine Sechs vorhanden ist. Und dann ausgeben ob mind. eine sechs in einer vierer Reihe ist. Nicht mehr. Man sieht ich habe schon experimentiert. Kann mir jemand einen Tipp zur Umsetzung geben?
Garfield

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group