Hvorfor generer rand()% samme tal..

Tags:    c++

<< < 12 > >>
Hej.. er nybegynder men sidder og leger lidt med C++ programering. er så løbet ind i det problem at jeg ikke ved, hvorfor rand() generer det samme tal 2 gange i forløbet, når srand(time(0)) kaldes først. Her er mit program..:
Fold kodeboks ind/udKode 

Håber der er en der vil hjælpe mig. på forhånd tak. Niels Erik.



Har ikke lige tjekket koden, men ummidelbart skal du så vidt jeg ved lave en srand() hver gang du har brugt rand() funktionen. Derfor skal du placerer den inden i din do-while løkke.



Har ikke lige tjekket koden, men ummidelbart skal du så vidt jeg ved lave en srand() hver gang du har brugt rand() funktionen. Derfor skal du placerer den inden i din do-while løkke.




Hej ...nu prøvede jeg lige og flytte
srand(time(0))ind i den allerinderste do-while lykke... det gav tallet 36 som tal og i samtlige rækker..så prøvede jeg at flytte
srand(time(0)) ud i den yderste do-while løkke... det gav forskellige tal på de 7 pladser men de 7 tal gentaget i alle 10 rækker.. hmm.. den fostår jeg ikke.



Hey Niels,
det er sådan at srand står for Seed random, dvs. du stikker din random generator et 'seed' den bruger til at generere det næste tal.

Det er sådan at computeres 'random' ikke er random, men en algoritme der finder det næste tal, på baggrund af det forrige / seed.

Dvs. hvis du bruger det samme seed, vil du ALTID få det samme tal. :)



http://www.random.org/

^Dét er random. De genererer tal ud fra atmosfærisk støj..



Hej ken...tak for forklaringen..så må jeg lige se om jeg forstår det... har forstået at
rand()%48 generer at tal mellem 0 og 48. og for at rand() ikke skulle generere det samme tal.. skulle man først kalde srand(time(0)). men du nævner "seed".. så spørger jeg måske lidt dumt, men er det så 48 der er mit "Seed" eller er det time(0). håber ikke det virker for begynder agtigt. Niels Erik.



Hej ken...tak for forklaringen..så må jeg lige se om jeg forstår det... har forstået at
rand()%48 generer at tal mellem 0 og 48. og for at rand() ikke skulle generere det samme tal.. skulle man først kalde srand(time(0)). men du nævner "seed".. så spørger jeg måske lidt dumt, men er det så 48 der er mit "Seed" eller er det time(0). håber ikke det virker for begynder agtigt. Niels Erik.


Nej. Dit seed er det tal som du giver med til srand(), og idit tilfælde er det nuværende tidspunkt som returneret af time(NULL).
Det vil også sige, at hvis du kalder programmet to gange inden for samme sekund, så får du stadig samme "tilfældige" talrække.

srand() skal kun kaldes én gang.



Hej ...så forstår jeg lidt mere.. men kalder jeg f.eks srand(100) en gang.. og
tal=rand()%48 .. 7 gange. og udskriver Tal.. genererer den stadig samme tal 2 gange.




Hej

Med rand kan man få det samme tal flere gange i træk, prøv at smide en terning 100 gange og du vil se at f.eks kan 2 forekomme 1-n gange i træk ;)

Prøv dette:
Fold kodeboks ind/udKode 




Hej Ossi. tak for rådet. har prøvet dit foreslag... men får bare "vector" & "itr" ikke erklæret i dette scope.. samt fejlen "expected primary expression before <unsigned>". måske jeg ikke helt har forstået dit eksempel så. Håber du lige giver lyd fra dig. niels erik.



<< < 12 > >>
t