Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Gea Forumaš(ica)

Pridružen/a: 29. 08. 2004. (20:59:52) Postovi: (5)16
|
Postano: 13:02 pon, 6. 9. 2004 Naslov: int rand(void) |
|
|
int brojac[6];
int kocka () {
return (float) rand () / (RAND_MAX+1) * 6 + 1;
}
for (i = 0; i < n; i++) {
++brojac[kocka()-1];
}
Ovo su mi dijelovi programaza bacanje kocke. U polju brojac mi se broji koliko je puta pao odredjen broj. Npr. ako su u 3 kocke pali 2x4 i 1x2 to je brojac[2]=1 i brojac[4]=2.
Zanima me zasto kada u fji kocka napisem return rand () / (RAND_MAX+1) * 6 + 1;
dakle, bez casta u float, uvijek ispada da je pao broj 1, i zbog dalje programa onoliko puta koliko imam kockica. Pretp. zato sto je prototip randa int rand(void), ali zapravo ne kuzim :?
A posebno me zbunjuje kako mi se toliko puta moze ponoviti, kada sam i ukljucila srand. to bi mi kao trebalo osigurati da se ne bi uvijek generirali isri brojevi...Eto, molim ljude dobre volje da se oglase...thx
int brojac[6];
int kocka () {
return (float) rand () / (RAND_MAX+1) * 6 + 1;
}
for (i = 0; i < n; i++) {
++brojac[kocka()-1];
}
Ovo su mi dijelovi programaza bacanje kocke. U polju brojac mi se broji koliko je puta pao odredjen broj. Npr. ako su u 3 kocke pali 2x4 i 1x2 to je brojac[2]=1 i brojac[4]=2.
Zanima me zasto kada u fji kocka napisem return rand () / (RAND_MAX+1) * 6 + 1;
dakle, bez casta u float, uvijek ispada da je pao broj 1, i zbog dalje programa onoliko puta koliko imam kockica. Pretp. zato sto je prototip randa int rand(void), ali zapravo ne kuzim
A posebno me zbunjuje kako mi se toliko puta moze ponoviti, kada sam i ukljucila srand. to bi mi kao trebalo osigurati da se ne bi uvijek generirali isri brojevi...Eto, molim ljude dobre volje da se oglase...thx
_________________ The world is an ugly, bad dream and all night long you can hear me scream...
|
|
[Vrh] |
|
veky Forumaš(ica)

Pridružen/a: 09. 12. 2002. (19:59:43) Postovi: (5B0)16
Lokacija: negdje daleko...
|
Postano: 13:33 pon, 6. 9. 2004 Naslov: Re: int rand(void) |
|
|
[quote="Gea"]int brojac[6];
int kocka () {
return (float) rand () / (RAND_MAX+1) * 6 + 1;
}
for (i = 0; i < n; i++) {
++brojac[kocka()-1];
}
Ovo su mi dijelovi programaza bacanje kocke. U polju brojac mi se broji koliko je puta pao odredjen broj. Npr. ako su u 3 kocke pali 2x4 i 1x2 to je brojac[2]=1 i brojac[4]=2.
Zanima me zasto kada u fji kocka napisem return rand () / (RAND_MAX+1) * 6 + 1;
dakle, bez casta u float, uvijek ispada da je pao broj 1, i zbog dalje programa onoliko puta koliko imam kockica. Pretp. zato sto je prototip randa int rand(void), ali zapravo ne kuzim :? [/quote]
Sasvim u skladu s Covim pravilima za određivanje tipa.
rand vraća int. RAND_MAX+1 je int. Dakle / je cjelobrojno dijeljenje. Budući da je rezultat od rand po definiciji manji od RAND_MAX , rezultat cjelobrojnog dijeljenja je 0 . A 0*6+1 je 1 , uvijek. :-)
Gea (napisa): | int brojac[6];
int kocka () {
return (float) rand () / (RAND_MAX+1) * 6 + 1;
}
for (i = 0; i < n; i++) {
++brojac[kocka()-1];
}
Ovo su mi dijelovi programaza bacanje kocke. U polju brojac mi se broji koliko je puta pao odredjen broj. Npr. ako su u 3 kocke pali 2x4 i 1x2 to je brojac[2]=1 i brojac[4]=2.
Zanima me zasto kada u fji kocka napisem return rand () / (RAND_MAX+1) * 6 + 1;
dakle, bez casta u float, uvijek ispada da je pao broj 1, i zbog dalje programa onoliko puta koliko imam kockica. Pretp. zato sto je prototip randa int rand(void), ali zapravo ne kuzim |
Sasvim u skladu s Covim pravilima za određivanje tipa.
rand vraća int. RAND_MAX+1 je int. Dakle / je cjelobrojno dijeljenje. Budući da je rezultat od rand po definiciji manji od RAND_MAX , rezultat cjelobrojnog dijeljenja je 0 . A 0*6+1 je 1 , uvijek.
|
|
[Vrh] |
|
Gea Forumaš(ica)

Pridružen/a: 29. 08. 2004. (20:59:52) Postovi: (5)16
|
Postano: 15:12 pon, 6. 9. 2004 Naslov: |
|
|
hmmm,
ali kak to da ovo kaj si napisao
[quote]Budući da je rezultat od rand po definiciji manji od RAND_MAX , rezultat cjelobrojnog dijeljenja je 0 . A 0*6+1 je 1 , uvijek.
[/quote]
ne vrijedi i kada imamo onaj cast (float) ?
Btw, thx na brzom odgovoru...
hmmm,
ali kak to da ovo kaj si napisao
Citat: | Budući da je rezultat od rand po definiciji manji od RAND_MAX , rezultat cjelobrojnog dijeljenja je 0 . A 0*6+1 je 1 , uvijek.
|
ne vrijedi i kada imamo onaj cast (float) ?
Btw, thx na brzom odgovoru...
_________________ The world is an ugly, bad dream and all night long you can hear me scream...
|
|
[Vrh] |
|
ahri Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07) Postovi: (193)16
|
Postano: 21:46 pon, 6. 9. 2004 Naslov: |
|
|
kad kastas rand() u float (mozes i nazivnik), onda dijeljenje vise nije cjelobrojno...
pa je onda taj razlomak [0,1>, pa mnozen sa 6 daje broj [0,6>, sto plus jedan daje pak [1, 7>, sto pak "gledano cjelobrojno" je [1,6]
kad kastas rand() u float (mozes i nazivnik), onda dijeljenje vise nije cjelobrojno...
pa je onda taj razlomak [0,1>, pa mnozen sa 6 daje broj [0,6>, sto plus jedan daje pak [1, 7>, sto pak "gledano cjelobrojno" je [1,6]
_________________ 
|
|
[Vrh] |
|
Gea Forumaš(ica)

Pridružen/a: 29. 08. 2004. (20:59:52) Postovi: (5)16
|
|
[Vrh] |
|
ahri Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07) Postovi: (193)16
|
|
[Vrh] |
|
veky Forumaš(ica)

Pridružen/a: 09. 12. 2002. (19:59:43) Postovi: (5B0)16
Lokacija: negdje daleko...
|
|
[Vrh] |
|
ahri Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07) Postovi: (193)16
|
|
[Vrh] |
|
|