slumpgenerator i c++|Programmering / Grafisk formgivning|Forum|Nordichardware

Search
Forum Scope


Match



Forum Options



Minimum search word length is 3 characters - maximum search word length is 84 characters
Lost password?
The forums are currently locked and only available for read only access
sp_Feed sp_TopicIcon
slumpgenerator i c++
Öwall
Member
Medlem
Forum Posts: 4377
Member Since:
November 26, 2002
sp_UserOfflineSmall Offline
1
December 7, 2003 - 6:49 pm
sp_Permalink sp_Print

jag behöver lite hjälp med detta.
jag vet att man kan använda rand(), och min c++-bok jiddrar om srand() och time(), och jag fattar knappt någonting.

just nu kan jag få den att skapa ett ganska stort nummer som inte kommer ändras om jag låter den skriva det flera gånger.

Jag behöver en generator som ger mig ett nummer mellan 1 och fem, som jag kan använda flera gånger i samma program.

tackar på förhand

Starscream
Member
Medlem
Forum Posts: 7750
Member Since:
February 1, 2002
sp_UserOfflineSmall Offline
477348
December 7, 2003 - 7:06 pm
sp_Permalink sp_Print

Mjo.. tror det var så här...

Först så måste du inkludera time.h..

Du slänger in srand((unsigned)time(NULL)); i main och

med rand()%1; får du fram ett slumptal.

Starscream
Member
Medlem
Forum Posts: 7750
Member Since:
February 1, 2002
sp_UserOfflineSmall Offline
477354
December 7, 2003 - 7:11 pm
sp_Permalink sp_Print

Vilken bok har du föressten?

Inoxor
Siktar mot toppen
Medlem
Forum Posts: 68
Member Since:
December 2, 2001
sp_UserOfflineSmall Offline
477356
December 7, 2003 - 7:12 pm
sp_Permalink sp_Print
#include <ctime>
#include <cstdlib>
#include <windows.h>

using namespace std;

unsigned int InitRand()
{
unsigned int seed;
seed = time(0) + timeGetTime();
srand(seed);
return seed;
}

int RandomNumber(int Min, int Max)
{
int i = 1+(int) ((double)Max*rand()/(RAND_MAX+(double)Min));
while(true)
{
if(!(i > RAND_MAX - (RAND_MAX % (Max-Min))))
return i;
i = 1+(int) ((double)Max*rand()/(RAND_MAX+(double)Min));
}
}

Detta är vad jag använder (för windows dvs). Funkar perfekt tycker jag. Det enda du behöver göra är att anropa InitRand() innan du börjar använda RandomNumber. Enjoy 😉

Öwall
Member
Medlem
Forum Posts: 4377
Member Since:
November 26, 2002
sp_UserOfflineSmall Offline
477389
December 7, 2003 - 7:26 pm
sp_Permalink sp_Print

jag har en bok som heter C++ Programmering, gammal bok, men den enda jag hittade på biblioteket =/

får det inte att fungera, någon av metoderna tyvärr (kör inte windows)

Inoxor
Siktar mot toppen
Medlem
Forum Posts: 68
Member Since:
December 2, 2001
sp_UserOfflineSmall Offline
477407
December 7, 2003 - 7:47 pm
sp_Permalink sp_Print

Byt ut mot det här då, bör vara något mer random, för linux endast 😀

#include <cstdlib>
#include <fstream>

using namespace std;

unsigned int InitRand()
{
unsigned int seed;
ifstream tmp("/dev/urandom");
tmp.read(&seed, sizeof(unsigned int));
tmp.close();
srand(seed);
return seed;
}
Avatar
dae
Kommer du hit ofta?
Medlem
Forum Posts: 410
Member Since:
July 28, 2003
sp_UserOfflineSmall Offline
477941
December 8, 2003 - 10:51 am
sp_Permalink sp_Print

Starscream är nog inne på rätt spår:

srand(time(0)); // initierar random-generatorn
rand() % DITT_MAX_TAL; // Ger ett tal mellan 0 och DITT_MAX_TAL - 1.

Så vill du ha ett tal mellan 1 och 5 gör du:

(rand() % 5) + 1;

OBS! kör bara srand(time(0)) en gång!! T.ex. i början av programmet.

Starscream
Member
Medlem
Forum Posts: 7750
Member Since:
February 1, 2002
sp_UserOfflineSmall Offline
478195
December 8, 2003 - 3:55 pm
sp_Permalink sp_Print

dae wrote: Starscream är nog inne på rätt spår:

srand(time(0)); // initierar random-generatorn
rand() % DITT_MAX_TAL; // Ger ett tal mellan 0 och DITT_MAX_TAL - 1.

Så vill du ha ett tal mellan 1 och 5 gör du:

(rand() % 5) + 1;

OBS! kör bara srand(time(0)) en gång!! T.ex. i början av programmet.

Jao.. och RAND_MAX tror jag inte slumpade annorlunda tal, allså det går att räkna ut vilken sekund det blir ett specifikt nr.. på detta sätt räknar den från 1970 talet... (har jag för mig)

Öwall
Member
Medlem
Forum Posts: 4377
Member Since:
November 26, 2002
sp_UserOfflineSmall Offline
478341
December 8, 2003 - 6:32 pm
sp_Permalink sp_Print

tac så mycket för hjälpen, har fått det att fungera nu.

Forum Timezone: Europe/Stockholm
Most Users Ever Online: 1030
Currently Online:
Guest(s) 353
Currently Browsing this Page:
2 Guest(s)
Top Posters:
Andreas Galistel: 16287
Jonas Klar: 15897
ilg@dd: 10810
Nyhet: 10607
Mind: 10550
Ctrl: 10355
Gueno: 9881
Guest: 9344
Snorch: 8881
Callister: 8468
Newest Members:
PetrbonFU PetrbonFU
Karine Bembry
Dolores Mcdaniels
Anibal McLeish
Francisca Alt
Alfie Everhart
Lester Huitt
Orlando Jorgensen
Mikki Lundgren
Dakota Kozlowski
Forum Stats:
Groups: 11
Forums: 59
Topics: 146630
Posts: 1300967

 

Member Stats:
Guest Posters: 2
Members: 79425
Moderators: 0
Admins: 11
Administrators: nordicadmin, Henrik Berntsson, Anton Karmehed, Carl Holmberg, Joel Oscarsson, Mikael Linnér, Mikael Schwartz, Andreas Paulsson, Nickebjrk, Mattias Pettersson, EmxL