Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: satunnaisluvut?

dungeon86 [21.09.2004 14:34:55]

#

miten c:ssä alustetaan satunnaisluku generaattori entä miten saadan muuttujalle luku arvoksi joku alueelta 1-1000 entä mihin kirjastoon nämä komennot kuuluvat?

hunajavohveli [21.09.2004 16:29:52]

#

Stdlib.h:sta löytyy random()-funktio. Sulkujen väliin tulee numero n, sen ja nollan väliltä generoidaan. Generaattori alustetaan randomize():lla.

Metabolix [21.09.2004 16:48:43]

#

hunajavohveli:
Mitä kääntäjää oikein käytät? Ei tuommoisia Visual C++:ssa ole!

#include <stdlib.h>
rand() antaa luvun 0 .. RAND_MAX (0 .. 0x7fff)
srand() asettaa siemenluvun annettuun arvoon.

#include <time.h>
time() palauttaa ajan.

srand((unsigned)time(0)); asettaa siemenluvun ajan mukaan; hyvä tapa alustaa generaattori.

(X * rand() / RAND_MAX) antaa satunnaisen luvun 0 <= n < X.

hunajavohveli [21.09.2004 18:19:47]

#

Metabolix kirjoitti:

Mitä kääntäjää oikein käytät? Ei tuommoisia Visual C++:ssa ole!

Borland C++ 5.0. Tuommoiset löytyy sen stdlib:stä. En minä Visual C++:sta tiedä. Eikä dungeon86 kertonut, mitä kääntäjää käyttää.

thefox [21.09.2004 22:46:05]

#

Fakta on kuitenkin, että standardikirjastoon kuuluuvat rand() ja srand(), *ei* random() ja randomize(). Kannattaa myös muistaa, ettei RAND_MAX:n saa olettaa olevan aina 0x7fff.

Yksi tapa generoida satunnaisluku väliltä [0, n - 1] on "rand() % n".

Metabolix [21.09.2004 23:13:45]

#

Borlandista nuo löytyvät, koska Pascal sisältää vakiona Random ja Randomize-funktiot ja C++Builder on yritetty tehdä yhteensopivaksi Delphin, Borlandin tärkeämmän tuotteen, kanssa.

ja fawkz:
Tuo tapa on siinä mielessä huonompi, että esim rand() % 0x7F9B antaa lukuja sataan asti kaksinkertaisesti muihin nähden. Toisaalta, harvoinpa sillä on niin merkitystä.
Ja tosiaan, RAND_MAX on muuttuva vakio, ja siksi juuri kirjoitinkin sulkuihin sen lukuarvon.

dungeon86 [22.09.2004 14:02:33]

#

ongelma on selvä, löytyi ihan tuolta oppaista vastaus

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta