[ Syberbob @ 12.07.2009. 11:02 ] @
Kako da u sledecem kodu dodam mogucnost da preskoci odredjene brojeve???

Code:
Public Function Rand(ByVal Low As Long, _
                     ByVal High As Long) As Long
                    
    Randomize
  Rand = Int((High - Low + 1) * Rnd) + Low
  
  
End Function


Hvala!
[ Aleksandar Vasic @ 12.07.2009. 11:06 ] @
Proveravaj u toku funkcije sa IF koju vrednost varijabla Rand ima, pa ako je vrednost neki od brojeva koji ne zelis, vrati f-ju na pocetak.
[ Syberbob @ 12.07.2009. 11:46 ] @
Da ali sta ako funkcija ponovo generise isti broj?
[ Aleksandar Vasic @ 12.07.2009. 12:03 ] @
Pa ako bude generisala isti broj vrtece se u krug dok ne napravi odgovarajuci :)

Code:
Public Function Rand(ByVal Low As Long, _
                     ByVal High As Long) As Long
FunctionStart:                    
    Randomize
  Rand = Int((High - Low + 1) * Rnd) + Low

  If Rand = 3 Then Goto FunctionStart
  
End Function


Evo ti primer, ako je broj 3, vraca se na pocetak
[ captPicard @ 12.07.2009. 12:07 ] @
Šta baš moraš koristiti goto naredbu? :-D
[ Aleksandar Ružičić @ 12.07.2009. 12:10 ] @
goto, 2009. godina, wtf??
Code:

Public Function Rand(ByVal Low As Long, _
                     ByVal High As Long) As Long

  ' Randomize <-- ovo prebaci u entry point aplikacije (Sub Main, ili Sub Form_Load)

  Dim ret As Long

  Do
     ret = Int((High - Low + 1) * Rnd) + Low
  While ret = 3

  Rand = ret
  
End Function
[ Aleksandar Vasic @ 12.07.2009. 12:11 ] @
Jes da GoTo nije fensi, al to mi prvo palo na pamet :D
[ Syberbob @ 12.07.2009. 12:27 ] @
Code:
Pa ako bude generisala isti broj vrtece se u krug dok ne napravi odgovarajuci :)

Posto ima 42 broja sanse da se dobije rezultat su mozda 1:1000 :D.
Code:

Public Function Rand(ByVal Low As Long, _
                     ByVal High As Long) As Long

  ' Randomize <-- ovo prebaci u entry point aplikacije (Sub Main, ili Sub Form_Load)

  Dim ret As Long

  Do
     ret = Int((High - Low + 1) * Rnd) + Low
  While ret = 3

  Rand = ret
  
End Function

Probacu ovo tnx!
[ Syberbob @ 12.07.2009. 12:39 ] @
I ovo mi isto ne funkcionise. Kompjuter ponavlja funkciju pokusavajuci da dobije kombinaciju, sto je prakticno nemoguce i program samo blokira. Treba mi neko resenje koje ce iskljuciti mogucnost izbacivanja brojeva koje unesem.
[ Aleksandar Ružičić @ 12.07.2009. 15:14 ] @
pazi, da ne izbacuje ponekad iste rezultate algoritam ne bi bio random, zar ne? (tj pseudo-random, u ovom slucaju) pod random se podrazumeva da moze da vrati bilo koji broj.

ako sam razumeo sta hoces, tebi u stvari treba niz brojeva koji je nasumicno izmesan (shuffle-ovan), to mesanje radis otprilike ovako (mozda ne proradi iz prve, odavno nisam nista radio u vb):
Code:

Sub ShuffleArray(ByRef numbers() AS Long)
  Dim min As Long
  Dim max As Long
  Dim tmp As Long
  Dim i As Long
  Dim k As Long
  min = LBound(numbers)
  max = UBound(numbers)
  For i = min To max
    k = Int((max - min + 1) * Rnd) + min
    tmp = numbers(k)
    numbers(k) = numbers(i)
    numbers(i) = tmp
  Next
End Sub

samo prosledis niz ovoj metodi i ona ce da ga promesa, posle iz tog niza vadis brojeve pomocu nekog brojaca koji ide od LBound do UBound tog niza, kad dodjes do kraja, mozes da promesas ponovo niz, ili da generises novi...
[ Syberbob @ 13.07.2009. 11:54 ] @
Hvala na pomoci uspeo sam ovo da uradim.