[ zormar @ 07.05.2007. 19:57 ] @
Kako napraviti slucajan izbor brojeva
Code:
for i=1 to 5
A(i)=int(rnd*10)+1 
next i
uz uslov da je zbir izabranih brojeva jednak broju upisanom u Textbox.
[ dennycd2 @ 08.05.2007. 17:30 ] @
Ne znam da li si ovo tražio, ali pogledaj može ti pomoći.

Code:

Option Explicit

Private Sub Command1_Click()
    
    Dim a(5) As Integer
    Dim i As Integer
    Dim b As Integer
    Dim x As Long

    x = 0
    
    If Val(Text1.Text) < 5 Or Val(Text1.Text) > 50 Then
        MsgBox "Izabrao si prevelik ili premali broj!", vbCritical
        Text1.Text = ""
        Text1.SetFocus
        Exit Sub
    End If
    
    Do
        Randomize
        b = 0
        x = x + 1
        For i = 1 To 5
            a(i) = Int(Rnd * 10) + 1
            b = b + a(i)
        Next i
        DoEvents
    Loop Until Val(Text1.Text) = b
    
    MsgBox "Zbir " & a(1) & "+" & a(2) & "+" & a(3) & "+" & a(4) & "+" & a(5) & " = " & b & " jednak je trazenom!" & vbCrLf & "Broj pokusaja: " & x, vbInformation
    Text1.Text = ""
    Text1.SetFocus
    
End Sub
[ zormar @ 08.05.2007. 20:17 ] @
@dennycd2, zahvaljujem ti za ovaj kod.
Nadam se da cu uspeti da ovo prilagodim svojim potrebama.
[ Aleksandar Ružičić @ 08.05.2007. 21:43 ] @
mozda ovako nekako (pisem kod iz glave, tako da su mozda potrebne neke modifikacije da bi proradio):
Code:

Function RandomZbir(sabiraka As Long, zbir As Long) As Long()
  
   Dim sabirak() As Long, i As Long, z As Long, max As Long

   ReDim sabirak(1 to sabiraka)
  
   z = 0
   max = zbir \ 2

   For i = 1 To sabiraka - 1
       sabirak(i) = Int(Rnd * (max - 1)) + 1
       z = z + sabirak(i)
       max = (zbir - z) \ 2
   Next

   sabirak(sabiraka) = zbir - z

   RandomZbir = sabirak

End Function

' ovako koristis funkciju:
Private Sub Command1_Click()
   
   Dim sabirak() As Long, i As Long, s As String

   sabirak = RandomZbir(5, Val(Text1.Text))

   s = CStr(Val(Text1.Text)) & " = "
  
   for i = 1 to 5
     s = s & CStr(Sabirak(i))
     If i < 5 Then s = s & " + "
   Next

  MsgBox s

End Sub

Private Sub Form_Load()
   Randomize Timer ' ovo obavezno pozovi prilikom startovanja programa
End Sub
[ zormar @ 08.05.2007. 22:47 ] @
Resio sam problem, jos jednom zahvaljujem obojici na pomoci.
Ako ne trazim previse zanima me kako bi ovo islo sa rasponom brojeva?
Znaci, da izbaci brojeve ciji je raspon izmedju najveceg i najmanjeg broja upisan u textboxu.
[ dennycd2 @ 08.05.2007. 23:06 ] @
@Aleksandar,Veoma mi se dopada tvoje resenje, ali pokusaj sa brojem 6 napr.
[ Aleksandar Ružičić @ 10.05.2007. 22:26 ] @
@dennycd2: u pravu si, nisam mislio na takve slucajeve. mada bi uz malo izmena i to moglo da se sredi, taj kod sam rekoh kucao iz glave, tj nisam ga testirao pre, ali vidi se ideja pa moze lako da se doradi da radi i u takvim situacijama...

@zormar:
za broj u rasponu od min do max koristi sledecu "formulu":
Code:

a = Int(Rnd * (max - min)) + min
[ zormar @ 15.05.2007. 13:09 ] @
Na koji nacin iz niza 5,10,15,20,25,30,35,40,45,50 slucajnim izborom izdvojiti 3 broja?
[ rgdrajko @ 15.05.2007. 13:43 ] @
Pa slucajan broj od 1 do 10, pa to posle pomnozi sa 5.

slbroj = Int(Rnd * 10 + 1)*5
[ zormar @ 15.05.2007. 18:13 ] @
@rgdrajko, hvala ti za ovo.
A kako se radi s nizom 1,6,11,16,21,26...?
[ Marko_L @ 15.05.2007. 19:34 ] @
Slučajani broj od 0 do 10, pa pomnoži sa 5, pa dodaj 1
[ goranvuc @ 15.05.2007. 20:42 ] @
A evo i opste resenje, za bilo koji niz i bilo koji broj slucajnih clanova tog niza. Za demonstraciju je potreban nov projekat sa jednom formom i jednim CommandButtonom pod imenom "Command1"
Code:

Option Explicit

Private Sub Command1_Click()
   Dim varTestNiz As Variant
   Dim bytBrojClanova As Byte
   Dim strOdgovor As String
   Dim strRezultat As String
   
   'Iniciranje niza (moze se naravno i preuzeti postojeci)
   varTestNiz = Array(1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56)
   
   'Trazi se od korisnika da upise broj clanova koji mu treba
   strOdgovor = InputBox("Upisite koliko zelite slucajnih brojeva:", "Upis broja", "3")
   
   'Proverava se da li je upisan broj izmedju 1 i 255, zbog byte tipa
   If Val(strOdgovor) < 1 Or Val(strOdgovor) > 255 Then
      MsgBox "Morate upisati broj izmedju 1 i 255", vbCritical, "Greska"
      Exit Sub
   End If
   
   'Konverzija upisanog teksta u byte tip
   bytBrojClanova = CByte(strOdgovor)
   
   'Poziv funkcije i spajanje clanova odvojenih zarezom u string
   strRezultat = Join(NizSlucajnihBrojeva(varTestNiz, bytBrojClanova), ", ")
   
   'Prikaz rezultata
   MsgBox "Dobili ste niz slucajnih brojeva: " & strRezultat, vbInformation, "Resenje"
   
End Sub

Public Function NizSlucajnihBrojeva(ByVal varPolazniNiz As Variant, ByVal bytTrazeniBrojClanova As Byte) As Variant
   Dim bytCounter As Byte
   Dim varRezultat As Variant
   Dim intUkupnoClanova As Integer
   
   'Dimenzionisanje niza brojeva koji ce biti rezultat funkcije (u trazenom primeru niz od 3 clana)
   ReDim varRezultat(bytTrazeniBrojClanova - 1)
   
   'Aktiviranje generatora slucajnih brojeva
   Randomize
   
   'Odredjivanje broja clanova niza iz kog se uzimaju brojevi po slucajnom izboru
   intUkupnoClanova = UBound(varPolazniNiz) + 1
   
   'Formiranje rezultujuceg niza u petlji trazeni broj puta
   For bytCounter = 0 To bytTrazeniBrojClanova - 1
      varRezultat(bytCounter) = varPolazniNiz(Int(Rnd * intUkupnoClanova))
   Next
   
   'Prosledjivanje konacnog rezultata funkciji
   NizSlucajnihBrojeva = varRezultat
   
End Function



[Ovu poruku je menjao goranvuc dana 15.05.2007. u 23:31 GMT+1]
[ Aleksandar Ružičić @ 16.05.2007. 10:15 ] @
@Goran: sa ovakvim resenjem:
Code:

varRezultat(bytCounter) = varPolazniNiz(Int(Rnd * intUkupnoClanova))

moze da se dogodi da se jedan isti clan niza pojavi vise puta ( > 1) u rezultatu, ukoliko to nije pozeljno (znaci, ako treba samo jedanput da se pojavi bilo koji clan niza u rezultatu) onda bi funkcija trebala da se napise ovako:
Code:

Public Function NizSlucajnihBrojeva(ByVal varPolazniNiz As Variant, ByVal bytTrazeniBrojClanova As Byte) As Variant
   Dim lngCounter As Long
   Dim varRezultat As Variant
   Dim lngLBound As Long
   Dim lngUBound As Long
   Dim lngTemp As Long
   Dim varTemp As Variant
   
   'Dimenzionisanje niza brojeva koji ce biti rezultat funkcije (u trazenom primeru niz od 3 clana)
   ReDim varRezultat(bytTrazeniBrojClanova - 1)
   
   'Aktiviranje generatora slucajnih brojeva
   Randomize Timer  
   ' mada je moj savet da se Randomize pozove samo prilikom startovanja programa jer ako se
   ' poziva svaki put kada se pozove funkcija veca je mogucnost da se slucajni brojevi ponove
  
   ' zapamtimo donju i gornju granicu niza:
   lngLBound = LBound(varPolazniNiz)
   lngUBound = UBound(varPolazniNiz)

   ' "promesamo" polazni niz:
   For lngCounter = lngLBound To lngUBound
        lngTemp = Int(Rnd * (lngUBound - lngLBound)) + lngLBound
        varTemp = varPolazniNiz(lngCounter)
        varPolazniNiz(lngCounter) = varPolazniNiz(lngTemp)
        varPolazniNiz(lngTemp) = varTemp
   Next
   
   'Formiranje rezultujuceg niza u petlji trazeni broj puta
   For lngCounter = lngLBound To lngLBound + bytTrazeniBrojClanova - 1
      varRezultat(lngCounter) = varPolazniNiz(lngLBound + lngCounter)
   Next
   
   'Prosledjivanje konacnog rezultata funkciji
   NizSlucajnihBrojeva = varRezultat
   
End Function
[ zormar @ 16.05.2007. 13:49 ] @
Zahvaljujem svima na pomoci, to je ono sto mi je trebalo.