Želel bi naključno premešati naravna števila od 0 do m. Npr:3,2,5,4,1,0
Napisal sem tudi makro - se mi pa zdi zelo okoren, deluje pa. Prosim za kakšno bolj elegantno rešitev.
Sub Naklj_vrsta_03()
Randomize
a = Round(Rnd * 2, 0)
b = a
While b = a
b = Round(Rnd * 2, 0)
Wend
c = a
While c = a Or c = b
c = Round(Rnd * 2, 0)
Wend
Cells(3, 1) = a
Cells(3, 2) = b
Cells(3, 3) = c
End Sub
PS : Tudi jaz želim pohvaliti ta forum, posebno ..., če bi lahko, bi tudi bolj aktivno sodeloval, ampak premalo znam.
LP Alan
Vrsta naključnih števil
Re: Vrsta naključnih števil
Najpreprostejši algoritem sem vam zapisal spodaj. dodal sem tudi komentarje, tako, da je (mislim da) takoj vidno kaj se dogaja. Preprosto najprej napolnimo celotno vrstico s števili od 0 do m in nato po dve celici naključno menjujemo večkrat...
Makro seveda poženete tako, da mu podate želeno število m:
Hvala za pohvale, se trudimo... Če se želite naučiti še več, pa vam je odsedaj dalje na voljo tudi blog, kjer ravno tako objavljam zanimive stvari
Koda: Izberi vse
'
' www.matjazev.net
' november 2010
'
Sub nakljucno(m As Integer)
' če je m večji kot je na trenutnem listu
If (m >= ActiveSheet.Columns.Count) Then m = ActiveSheet.Columns.Count - 1
' napolni tretjo vrstico s števili od 0 do m
Dim i As Integer
For i = 0 To m
Cells(3, i + 1) = i
Next
' naključno zamenjuj števila 10*m (več kot je števil, dlje jih bomo menjevali)
Dim j As Integer, k As Integer, t As Integer
For i = 1 To 10*m
j = Int((m + 1) * Rnd) + 1
k = Int((m + 1) * Rnd) + 1
t = Cells(3, j)
Cells(3, j) = Cells(3, k)
Cells(3, k) = t
Next
End Sub
Koda: Izberi vse
nakljucno 30
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Re: Vrsta naključnih števil
Super deluje, pa seveda se splača, če imamo daljšo vrsto, pa tista spremenljivka t je poučna - zelo zvito, hvala. Če pa ta makro večkrat poženemo, bomo opazili, da nam da naslednjič spet iste naključne vrste - kriva je funkcija rnd, ki je zabetonirana, če je ne premešamo znova - vseeno kje moramo dodati funkcijo randomize - tako so začetni pogoji za funkcijo rnd vedno novi.
LP Alan
LP Alan