Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Rodney Junior JLI'ler
Anmeldedatum: 24.09.2003 Beiträge: 60
Medaillen: Keine
|
Verfasst am: 03.10.2003, 11:56 Titel: Zufallszahlen in C++ |
|
|
Hallo Leute,
alle Funktionen die ich zur Zufallszahlen-Erstellung in c++ nutze geben irgendwie immer diesselben Werte wieder.
Wenn man z.B. eine Zufallszahl zwischen 0 und 500 haben will, was muss ich da machen? wenn man eine Zufallsfunktion direkt 2mal hintereinander ausführt, bekommt man dann die gleichen Werte wieder??
Danke im Vorraus, RODNEY |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
|
Nach oben |
|
|
OLiver Super JLI'ler
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 03.10.2003, 12:31 Titel: |
|
|
Ich hab mir eine Headerdatei dafür gemacht:
Code: |
#ifndef aSCHALTER
#define aSCHALTER
#include <ctime>
#endif
#ifndef bSCHALTER
#define bSCHALTER
#include <cstdlib>
#endif
inline bool Quote(unsigned short Prozent=50)
{
unsigned short p;
static bool gerandet=0;
if(!gerandet) {
srand((unsigned)time(NULL)); gerandet = 1; }
p = rand() % 100+1;
if (p > Prozent)
return 0;
else
return 1;
}
inline unsigned long Rnd(unsigned long Obergrenze,unsigned long Untergrenze=0)
{
static bool gerandet=0;
if(!gerandet) {
srand((unsigned)time(NULL)); gerandet = 1; }
return (rand() %(1+ Obergrenze-Untergrenze)+Untergrenze);
}
|
_________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
|
Rodney Junior JLI'ler
Anmeldedatum: 24.09.2003 Beiträge: 60
Medaillen: Keine
|
Verfasst am: 03.10.2003, 12:34 Titel: |
|
|
auch wenn ich diese FUnktion nutze kommen bei mir nach dem Programmstart immer diesselben Ergebnisse! |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 03.10.2003, 12:37 Titel: |
|
|
Ach so, das meinst du.
Dann musst du den Anfangswert für die rand()-Funktion am Anfang des Programms initialisieren:
Code: | srand(timeGetTime()); |
oder so ähnlich. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 03.10.2003, 12:42 Titel: |
|
|
So gehts:
Code: | srand((unsigned)time(NULL)); // Beim Start der Anwendung den Zufallsgenerator einmalig initialisieren |
Code: | int nCurFigure;
nCurFigure = rand()%500; // Eine Zufallszahl zwischen 0 und 499 erzeugen |
|
|
Nach oben |
|
|
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 25.02.2004, 13:24 Titel: |
|
|
Ich habe jetzt folgenden Code:
Code: |
srand(0)
double random;
for(int i=0; i<n; i++)
{
random = rand() % 577;
cout << random << endl;
}
|
das liefert innerhalb eines Schleifendurchlaufs zwar unterschiedliche Ergebnisse, aber wenn ich diese Gesamte Schleife mehrfach ausführe, entsteht immer wieder dieselbe Reihenfolge... wie kann ich das unterbinden?
danke!
Felix
[EDIT]timeGetTime dürfte bei mir nichts nutzen, da ich unter LInux arbeite(n muss)[/EDIT]
[EDIT2]Alles klar, habe die Initialisierung mit srand(0)an eine andere Stelle im Programm verlegt. Ist zwar IMHO nicht ganz so elegant, aber läuft[/EDIT2] _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 25.02.2004, 15:14 Titel: |
|
|
indem du nicht srand(0); nutzt sondern srand(timeGetTime()); oder ähnliches. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
nigs Super JLI'ler
Anmeldedatum: 19.12.2002 Beiträge: 359
Medaillen: Keine
|
Verfasst am: 26.02.2004, 01:19 Titel: |
|
|
beser is noch Code: | srand(GetTickCount()); |
|
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 26.02.2004, 01:21 Titel: |
|
|
Oder so:
Code: |
srand(GetTickCount() + rand()%100000);
|
_________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
nigs Super JLI'ler
Anmeldedatum: 19.12.2002 Beiträge: 359
Medaillen: Keine
|
Verfasst am: 26.02.2004, 01:25 Titel: |
|
|
ja, das geht auch...... |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 26.02.2004, 01:27 Titel: |
|
|
Das soll angeblich schon Patentiert sein. tststs diese Amis _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
Verfasst am: 26.02.2004, 10:51 Titel: |
|
|
FallenAngel84 hat Folgendes geschrieben: | Das soll angeblich schon Patentiert sein. tststs diese Amis |
gut das die Logikpatente hier noch nicht gültig sind |
|
Nach oben |
|
|
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 26.02.2004, 11:31 Titel: |
|
|
und welche include-Datei brauche ich für GetTickCount()? habe schon <stdlib.h> und <ctime> probiert, kennt er aber immer noch nicht
cu Felix _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
|
nigs Super JLI'ler
Anmeldedatum: 19.12.2002 Beiträge: 359
Medaillen: Keine
|
Verfasst am: 26.02.2004, 16:56 Titel: |
|
|
ich zitier ausm buch : "Wenn sie die Funktion timeGetTime verwenden, müssen sie die header-datei mmsystem.h (......) und zusätzlich die Bibliothek winmm.lib hinzufügen."ich denke das man für timeGetTime keine anderen Libs+Headers wie für GetTickCount braucht.... |
|
Nach oben |
|
|
|