Vrsta naključnih števil

Pomoč pri izdelavi makrov
Odgovori
alan07
Prispevkov: 22
Pridružen: To Apr 17, 2007 4:44 am

Vrsta naključnih števil

Odgovor Napisal/-a alan07 »

Ž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
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Vrsta naključnih števil

Odgovor Napisal/-a admin »

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...

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
Makro seveda poženete tako, da mu podate želeno število m:

Koda: Izberi vse

nakljucno 30
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 ;)
lp,
Matjaž Prtenjak
Administrator
alan07
Prispevkov: 22
Pridružen: To Apr 17, 2007 4:44 am

Re: Vrsta naključnih števil

Odgovor Napisal/-a alan07 »

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
Odgovori