Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: Oisko...(vb.net)

Sivun loppuun

TuGi [04.03.2004 18:58:32]

#

Teen tässä pientä matopeliä ja olen siinä vaiheessa että pitäisi kirjoittaa koodi joka arpoo "ruuan" paikkan, mutta mitä muita tapoja on arpoa "ruuan" paikkan kuin: cstr(int(rnd() * 300)) siis sellaisia joissa "ruoka" ei arpoituisi aina samaan paikkaan.

sooda [04.03.2004 19:01:41]

#

ranodomize ohjelman alkuun

kenkku [04.03.2004 19:02:37]

#

No eihän se aina tule samaan paikkaan jos kerran randomilla pistelet. Muistathan laittaa ennen arpomista randomize timer?

TuGi [04.03.2004 19:59:36]

#

"randomize timer", hä?

sooda [05.03.2004 12:43:33]

#

niin, randomize timer. nii ja huono otsikko... :P
randomize timer
ruuanpaikka=int(rnd() * 300)

Antti Laaksonen [05.03.2004 22:46:31]

#

VB.NETissä riittää tämä rivi ohjelman alussa:

Randomize()

Meitzi [06.03.2004 19:40:58]

#

Ja vielä varmistuksena, randomize komentoa ei saa "antaa" kuin kerran ohjelman alussa. Ei koskaan useammin.

Antti [07.03.2004 10:42:03]

#

Tuota, köh köh

Itse asiassa Randomize komennon saa antaa juuri niin monta kertaa kuin haluaa koodissa.

Randomize alustaa satunnaislukugeneraattorin ja ottaa järjestelmäkellosta uuden siemenluvun. Jos laitat komentoon numeron perään satunnaislukugeneraattori käyttää sitä siemenlukuna. Esim: Randomize 123

Meitzi [07.03.2004 14:32:09]

#

lainaus:

Itse asiassa Randomize komennon saa antaa juuri niin monta kertaa kuin haluaa koodissa.

Väärin!

lainaus:

Randomize alustaa satunnaislukugeneraattorin ja ottaa järjestelmäkellosta uuden siemenluvun. Jos laitat komentoon numeron perään satunnaislukugeneraattori käyttää sitä siemenlukuna. Esim: Randomize 123

Tämä taas on oikein.

Kuten sanoit, randomize ALUSTAA satunnaislukugeneraattorin. Jos annat AINA komennon randomize 123 enne arvontaa saat AINA saman arvontatuloksen. (hieman yksinkertaistettu) Mikä arvonta se sellaine on joka antaa aina saman tuloksen?

Jos annat vain randomize komennon, se alustaa, kuten sanoit, satunnaislukugeneraattorin järjestelmänkellon mukaan. Jos teet aina tuon alustuksen, voi olla että saat esim 1000 luvun arvonnasta aina tuloksen alle 500. Jokatapauksessa jos vähän mittailet tuolla tavalla arvottuja tuloksia niin ne eivät ole satunnaisia.

Valitettavasti en tähän hätään löytäny hirmu tarkkaa selostusta, mutta tämä kelvannee alkuun:
http://www.vbexplorer.com/VBExplorer/random/random_numbers_1.asp
"Use Randomize to initialize VB's random number generator. This is called seeding. To avoid generating the same sequence of psuedo-random values, call Randomize before you call Rnd; but this only has to be done once. A good place to seed the psuedo-random number generator is in the Form's Load event."

Blaze [07.03.2004 15:42:36]

#

lainaus:

lainaus:

Itse asiassa Randomize komennon saa antaa juuri niin monta kertaa kuin haluaa koodissa.

Väärin!

Eipäs ole. Saa Randomizen antaa juuri niin monta kertaa, kuin huvittaa. Se, onko siinä mitään järkeä, on toki kokonaan toinen asia...

rndprogy [07.03.2004 15:56:34]

#

Onhan siitä se hyöty että siemen luku voi halutessa vaihtaa. Jos meinaan haluaa vielä satunnaisemman luvun. Kun siinä on vissiin aina jonkin verran säännöllisyyttä.

nomic [07.03.2004 15:56:38]

#

eipä kannata mitään randomize timeriä tunkee silmukoiden sisään ennemmin ohjelman rungon alkuun tai jonnekkin jne...
ihan vain sen takia että jos on monta randomoijaa niin se randomoi ja miinustaa varmuutta olla satunnainen, jos on vain yksi ainut randomoija niin se pitää yllä koko satunnaisuutta joka ei sinänsä koneessa koskaan tapahdu sattumalta :)

Meitzi [07.03.2004 15:58:20]

#

Ohjelma tehty VB6:lle

Private Sub Form_Activate()
  Dim I As Long
  Dim Nolla As Long
  Dim Yksi As Long

  Randomize 'Randomize vain kerran
  Nolla = 0
  Yksi = 0
  For I = 0 To 1000000
    If Int(2 * Rnd) = 0 Then Nolla = Nolla + 1 Else Yksi = Yksi + 1
  Next I
  MsgBox "Ykkösiä " & Yksi & vbCrLf & "Nollia " & Nolla

  Nolla = 0
  Yksi = 0
  For I = 0 To 1000000
    Randomize 'Randomize aina
    If Int(2 * Rnd) = 0 Then Nolla = Nolla + 1 Else Yksi = Yksi + 1
  Next I
  MsgBox "Ykkösiä " & Yksi & vbCrLf & "Nollia " & Nolla
End Sub

Tietysti joku voi väittää että "toi toinen antaa parempia tuloksia koska vaihtelu on isompi", ei pidä paikkansa vaan se antaa vääristettyjä tuloksia. Huomatkaa että voitte vaihtaa tuon alemman luupin ekaksi, ei muuta mitään.


Sivun alkuun

Vastaus

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

Tietoa sivustosta