Funzioni Random



  • Funzioni Random
    di Gastone66 (utente non iscritto) data: 28/05/2014 22:52:05

    Buonasera sono nuovo nel forum volevo per favore a chi potesse chiedere aiuto per comprendere come questo codice che ho trovato in rete riesce egregiamente
    a mescolare 90 numeri senza ripetizione alcuna .
    Sono un principiante portate pazienza non riesco a capire perche' non si generino ripetizioni
    con questa procedura !!
    Se qualcuno volesse spiegarmelo semplicemente passo passo mi fa un grande favore .
    Ringrazio anticipatamente.
    Ciao


     
    Dim vet(1 to 90), i, j, temp, a, b as integer
    
    For i=1 to 90
    ...vet(i) = i
    Next i
    
    For i=1 to 90
    ...For j=1 to 90
    ......Randomize()
    ......a = Rnd()*90+1
    ......Randomize()
    ......b = Rnd()*90+1
    ......temp = vet(a)
    ......vet(a) = vet(b)
    ......vet(b) = temp
    ...Next j
    Next i 



  • di lepat (utente non iscritto) data: 29/05/2014 07:39:12

    la tua macro non mi funziona su excel 2010, l'ho modificata come segue.
    Il funzionamento è semplice:
    1) popola l'array vet con numeri da 1 a 10 (tutti diversi)
    2) tramite molti cicli, scambia il valore contenuto in una posizione (a) con quello contenuto in un altra (b), quindi, essendo tutti i numeri diversi non puoi avere duplicati.
    I duplicati li potresti avere soltanto se tu generassi tramite rnd dei numeri e li posizionassi in un array, in questo caso invece l'array contiene già numeri senza duplicati, si tratta soltanto di mescolarli, esattamente come quando mescoli i numeri della tombola nel sacchetto.

     
    Sub mescola()
    Dim vet(1 To 10), a As Integer, b As Integer
    For i = 1 To 10
       vet(i) = i
    Next i
    For i = 1 To 10
       For j = 1 To 10
          Randomize
          a = Int(Rnd() * 10) + 1
          Randomize
          b = Int(Rnd() * 10) + 1
          temp = vet(a)
          vet(a) = vet(b)
          vet(b) = temp
       Next j
    Next i
    Range("A1:J1").Value = vet
    End Sub



  • di lepat (utente non iscritto) data: 29/05/2014 07:47:39

    non avevo notato che la tua è una macro vbscript, comunque le considerazioni sono sempre valide.


  • re random
    di Gastone66 (utente non iscritto) data: 29/05/2014 14:26:20

    Grazie Lepat per la risposta e la macro di esempio che funziona perfettamente .
    Ho capito il concetto di mescolamento ma non riesco a capire come lavora !!
    Voglio chiederti per favore un ulteriore aiuto passo passo.
    Quindi:
    1) dichiariamo le variabili e poi popoliamo l'array con i 90 numeri consecutivi
    Dim vet(1 To 10), a As Integer, b As Integer
    For i = 1 To 10
    vet(i) = i
    Next i
    2) Creiamo 2 cicli for che ciclano 1000 volte
    For i = 1 To 10
    For j = 1 To 10
    Randomize
    ' istruzione randomize cosa fa ora ?
    a = Int(Rnd() * 10) + 1
    ' a=interonumero(rnd(generaun numero a caso)*10 il + 1 a cosa serve ?
    Randomize
    'ripete l'operazione ecc.
    b = Int(Rnd() * 10) + 1
    temp = vet(a)
    vet(a) = vet(b)
    vet(b) = temp
    'si scambiano i valori ottenuti .
    Next j
    Next i
    Infine visualizza e' semplice'

    Porta pazienza Lepat sei gentilissimo grazie per ulteriore spiegazione.
    Ciao.



  • di lepat (utente non iscritto) data: 29/05/2014 15:45:26

    istruzione randomize cosa fa ora ? perché non lo guardi nell'help ?

    a = Int(Rnd() * 10) + 1 - il + 1 a cosa serve ?

    Rnd restituisce un numero decimale compreso tra 0 ed 1 quindi moltiplicato per 10 e tolta la parte decimale otterremo numeri tra 0 e 9



  • di Gastone66 (utente non iscritto) data: 29/05/2014 23:49:17

    Ringrazio nuovamente Lepat della disponibilita' .
    Buonaserata Ciao