Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: VB, Numeroiden järjestäminen

Createman [24.03.2003 19:15:55]

#

Miten saa järjestettyä 7 numeroa lyhyimmällä tavalla pienimmästä suurimpaan? Nyt olen yrittänyt ratkaista asiaa tosi pitkällä if-lause sarjalla... =) Kyse on lotto numeroista eli numerot 1-39 ovat käytössä.

thefox [24.03.2003 19:18:06]

#

https://www.ohjelmointiputka.net/koodivinkit/23441-qb-quicksort-lajittelu
Tuolla olisi QuickSortti QB:lle, jonka varmasti saat helposti väänettyksi toimimaan myös VB:llä.

Createman [24.03.2003 19:30:51]

#

Miten korvaan tossa koodissa olevan SWAP:in?

Sami [24.03.2003 19:34:52]

#

korjaa tämä: SWAP t(b%), t(c%)

suunnilleen tällaisella:
valiaikaistieto = t(b%)
valiaikaistieto2 = t(c%)
t(c%) = valiaikaistieto
t(b%) = valiaikaistieto2

EDIT: Ainiin, en ole kokeillut tuota, joten se ei välttämättä toimi ...

thefox [24.03.2003 19:35:23]

#

No, SWAP vaan vaihtaa muuttujat keskenään. Melko erikoista muuten, että se on VB:stä jätetty pois. Jokatapauksessa, lisää tällainen funktio jonnekin:

Public Sub Swap (a As Variant, b As Variant)
  Dim c As Variant
  c = a
  a = b
  b = c
End Sub

trinit [24.03.2003 19:36:12]

#

lainaus:

Miten korvaan tossa koodissa olevan SWAP:in?

SWAP vaihtaa QB:ssa kahden muuttujan arvoja keskenään. Onnistuu ihan hyvin ilman erillistä funktiotakin, kierrätät vain toisen muuttujan arvon jonkin väliaikaisen muuttujan kautta.

a = 1
b = 2
tmp = -1

'Vaihdetaan a:n ja b:n arvot keskenään
tmp = a
a = b
b = tmp

edit: fawkz oli sitten nopeampi...

Antti Laaksonen [24.03.2003 19:37:51]

#

QuickSort on hyvä silloin kun lajiteltavia on paljon. Jos kuitenkin lyhyintä tapaa haetaan, niin se ehkä on kuplalajittelu, joka lottonumeroiden tapauksessa on ihan toimiva ratkaisu. Kirjoitin pienen esimerkin:

'lottonumeroiden kuplalajittelu

Dim maara As Integer, teksti As String
Dim i As Integer, j As Integer, t As Integer

'numeroiden määrä
maara = 7

'taulukko numeroille
ReDim numerot(maara - 1) As Integer

'arvotaan numerot: voi tulla samoja...
Randomize Timer
For i = 0 To maara - 1
    numerot(i) = Int(Rnd * 39) + 1
Next

'kulpalajittelu
For i = 0 To maara
    For j = 0 To maara - 2
        'jos numerot(j) on suurempi kuin numerot(j + 1),
        'vaihdetaan taulukon alkioiden paikkaa
        If numerot(j) > numerot(j + 1) Then
            t = numerot(j)
            numerot(j) = numerot(j + 1)
            numerot(j + 1) = t
        End If
    Next
Next

'muodostetaan merkkijono
teksti = numerot(0)
For i = 1 To maara - 1
    teksti = teksti & ", " & numerot(i)
Next

'näytetään numerot viesti-ikkunassa
MsgBox "Numerot ovat: " & teksti

Vastaus

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

Tietoa sivustosta