Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: VB6: Arpoo saman luvun vain kerran

hunajavohveli [10.07.2004 22:46:54]

#

Ohjelma arpoo taulukosta vuorotellen jokaisen luvun, muttei koskaan arvo samoja lukuja uudelleen. Keksin toimintaperiaatteen itse, mutta se on niin yksinkertainen, että joku on luultavasti keksinyt sen jo aikaisemmin.

Menetelmä on seuraava: Ensin arvotaan taulukkoon luvut. Sitten luodaan silmukka jota toistetaan niin monta kertaa kuin taulukossa on lukuja. Joka kierroksella arvotaan taulukosta yksi luku Rnd-funktiolla. Tämä luku voi olla väliltä 1-lukujen määrä. Joka kierroksella korkein mahdollinen luku pienenee yhdellä, joten jos lukuja olisi 200, ensimmäisellä kierroksella arvotaan luku väliltä 1-200, toisella väliltä 1-199, kolmannen väliltä 1-198 jne. Näin arvottavien lukujen ulkopuolelle kuitenkin jää aina taulukon viimeinen luku, mutta se ei haittaa sillä tuo luku kopioidaan juuri arvotun luvun paikalle, jolloin juuri arvottua lukua ei myöskään voi arpoa enää uudelleen.

Tässä esimerkissä visualisoidaan algoritmin toimintaa käyttämällä arvottavina lukuina ruudun koordinaatteja. Näin ohjelmaa piirtää ruudun täyteen satunnaisia pikseleitä, muttei koskaan arvo samaa pikseliä kahta kertaa.

Private Sub Form_Load()

Dim Pikseli(1 To 250000, 1 To 2) As Integer   'alustetaan

For y = 0 To 499
For x = 0 To 499
  i = i + 1
  Pikseli(i, 1) = x    'tallennetaan taulukkoon jokaisen pikselin koordinaatit
  Pikseli(i, 2) = y
Next x
Next y

Form1.Width = 8000
Form1.Height = 8000
Form1.Show            'näytetään formi
Form1.ScaleMode = 3     'pixelit käyttöön

For a = 250000 To 1 Step -1
  i = Int(Rnd * a) + 1         'arvotaan taulukosta pikseli
    PSet (Pikseli(i, 1), Pikseli(i, 2))    'piirretään pikseli

  Pikseli(i, 1) = Pikseli(a, 1)   'kopioidaan taulukon viimeinen pikseli
  Pikseli(i, 2) = Pikseli(a, 2)   'äsken piirretyn tilalle, jotta voidaan
                                  'huoletta poistaa viimeinen pikseli
Next a

End Sub

makeuu [11.07.2004 23:20:22]

#

kävevä

Antti Laaksonen [11.07.2004 23:37:40]

#

Joo, juuri tällä tekniikalla kannattaa tehdä esim. lottonumeroiden arpominen.

sooda [12.07.2004 10:34:15]

#

Kätevä systeemi.

Jakke1 [22.11.2007 23:09:19]

#

Keygenin alku. :p

Vastaus

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

Tietoa sivustosta