Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Muuttujien arvojen arvonta

Sivun loppuun

Gorthmog [17.04.2005 20:14:02]

#

Elikkäs ongelma on semmonen että ohjelmassa on 7 muuttujaa,
muuttujat saavat jokainen satunnaisen arvon väliltä 1-39 (ei varmaan tarvitse sanoa että homman nimi liittyy lottoamiseen). Miten lukuarvot saisi arvottua mahdottoman nopealla tavalla niin, että muuttujien arvoiksi ei muodostuisi koskaan samoja lukuja. Ehtolauseilla varsin työläs toteutettava...eli yksinkertaisesti sanottuna miten on järkevintä toteuttaa ohjelma joka arpoo lottorivin?

H3n3 [17.04.2005 20:31:28]

#

No eihän tohon nyt kovin montaa riviä ehtolauseilla menis... Mutta kai se on makuasia miten lyhyeks sen koodin haluaa.

sqwiik [17.04.2005 21:02:28]

#

Yksi keino on taulukoida arvot ja aina arvonnan jälkeen poistaa viimeksi arvottu luku, jonka jälkeen sitä ei enää arvota.

Antti Laaksonen [17.04.2005 21:03:40]

#

Kannattaa ensin panna kaikki mahdolliset numerot taulukkoon. Aluksi arvotaan numero väliltä 1 - 39 ja valitaan taulukosta vastaava numero (joka tietysti on sama). Sitten taulukon viimeinen numero siirretään arvotun kohdalle. Seuraavalla kierroksella arvotaan numero väliltä 1 - 38. Jne. Näin täytyy arpoa vain seitsemän numeroa, ja samaa numeroa ei kuitenkaan voi tulla.

Dim numerot(1 To 39) As Integer
Dim arvotut(1 To 7) As Integer
Dim i As Integer, a As Integer

' pannaan numerot 1 - 39 taulukkoon
For i = 1 To 39
    numerot(i) = i
Next

' alustetaan satunnaislukugeneraattori
Randomize Timer

' arvotaan seitsemän numeroa
For i = 1 To 7
    ' arvotaan taulukon kohta:
    '  1. kierroksella 1 - 39
    '  2. kierroksella 1 - 38 jne.
    a = Int(Rnd * (40 - i)) + 1
    ' arvottu numero talteen
    arvotut(i) = numerot(a)
    ' viimeinen numero arvotun tilalle
    numerot(a) = numerot(40 - i)
    ' näytetään arvottu numero
    MsgBox arvotut(i)
Next

Gorthmog [17.04.2005 22:03:37]

#

heh, kiitoksia paljon. Mutta tässäpä tulikin heti toinen probleema, eli miten nuo arvotut numerot saisi suuruusjärjestykseen? :) olen ihan käsi taulukoiden käsittelyssä, löytyykö VBstä kenties joku komento joka järjestää luvut suoraan pienimmästä suurimpaan tai päinvastoin?

tesmu [18.04.2005 09:22:36]

#

käytät < ja > merkkejä esim
if luku1 < luku2 then text1.text=luku1 else if luku2 < luku3 then text2.text=luku2

jne

BadSource [18.04.2005 10:04:57]

#

Bubble Sort:

Dim Siirto As Boolean
Dim Arvot(10) As String 'string join:n takia arvojen tulostamisessa
Dim i As Integer
Dim msg As String, abu As String

Randomize Timer

For i = 0 To 10
    Arvot(i) = CStr(CInt(Rnd * 9) + 1) 'arvo väliltä 1-10
Next i
msg = Join(Arvot, ", ")
Do
    Siirto = False
    For i = 0 To 9
        If CInt(Arvot(i)) > CInt(Arvot(i + 1)) Then
            abu = Arvot(i)
            Arvot(i) = Arvot(i + 1)
            Arvot(i + 1) = abu
            Siirto = True
        End If
    Next i
Loop While Siirto
MsgBox msg & vbCrLf & Join(Arvot, ", ")

Lumi-ukkeli [19.04.2005 08:30:53]

#

Tuon numerojärjestyksen minä oon tehny näin

Dim i as long
Dim j as long
Dim m as long
Dim arvotut(1 to 7) as long
Dim arvotut2(1 to 7) as long
m = 1
For j = 1 to 39
For i = 1 to 7
If arvotut(i) = j Then
arvotut2(m) = j
m = m + 1
End If
Next
Next

Sivun alkuun

Vastaus

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

Tietoa sivustosta