5
7
2
9
1
4
6
8
3
10
Actualmente estoy usando este código para generarlos sin probabilidad ninguna. Quisiera poder adaptar este código y hacer que se generen con la probabilidad que he comentado anteriormente.
Cita:
Las 3 primeras líneas dentro de la función son para crear una barra de progreso y asignarle un tamaño en base a la cantidad de veces que se va a repetir el bucle, con el que genero 6 números y los almaceno en unos textbox's repitiéndose la cantidad de veces que se ordena con txtcantidad. Después uso un código para evitar que los números salgan repetidos. Finalmente, almaceno cada número en un textbox, de modo que van separados por comas. Private Sub Command1_Click()
progreso.Max = txtcantidad
For contador = 1 To txtcantidad
progreso.Value = contador
'ejecutamos esta directiva para que el valor sea realmente aleatorio
Randomize Timer
'variable para los cinco números.
Dim seisnumeros(1 To 6) As Integer
'variable para tener el número temporal aleatorio y examinarlo con la matriz
'donde almacenaremos los cinco numeros aleatorios distintos
Dim temporal As Integer
'otras variables que necesitaremos durante el análisis
Dim i As Integer, j As Integer: j = 1
Dim x As Integer
'bucle para los cinco números aleatorios distintos
For i = 1 To 6
'en el caso del primer bucle no es necesario analizar nada, dado que la matriz destino
'está vacía
If i = 1 Then
'asignamos al primer elemento de la matriz el número aleatorio generado
seisnumeros(j) = Int((10 * Rnd) + 1) ' Genera un valor aleatorio entre 1 y 10.
'aumentamos en mas uno el contador del indice de la matriz destino
j = j + 1
Else
'para los demás casos que no sea el primer elemento de la matriz
'declaramos el retorno que emplearemos con goto
retorno:
'obtenemos el valor aleatorio
temporal = Int((10 * Rnd) + 1) 'Genera un valor aleatorio entre 1 y 10.
'recorremos la matriz destino íntegramente
For x = 1 To 6
'si el número aleatorio ya se encuentra....
If temporal = seisnumeros(x) Then
'volvemos al marcador -retorno-
GoTo retorno
End If
Next x
'sino asignamos el número aleatorio que se halla en la variable temporal
'al siguiente indice de la matriz
seisnumeros(j) = temporal ' Genera un valor aleatorio entre 1 y 10.
'aumentamos en mas uno el indice de la matriz para la asignación del
'siguiente
j = j + 1
End If
Next i
txt(0).Text = txt(0).Text + "," + Str(seisnumeros(1))
txt(1).Text = txt(1).Text + "," + Str(seisnumeros(2))
txt(2).Text = txt(2).Text + "," + Str(seisnumeros(3))
txt(3).Text = txt(3).Text + "," + Str(seisnumeros(4))
txt(4).Text = txt(4).Text + "," + Str(seisnumeros(5))
txt(5).Text = txt(5).Text + "," + Str(seisnumeros(6))
Next
MsgBox ("Los datos han sido generados")
End Sub
progreso.Max = txtcantidad
For contador = 1 To txtcantidad
progreso.Value = contador
'ejecutamos esta directiva para que el valor sea realmente aleatorio
Randomize Timer
'variable para los cinco números.
Dim seisnumeros(1 To 6) As Integer
'variable para tener el número temporal aleatorio y examinarlo con la matriz
'donde almacenaremos los cinco numeros aleatorios distintos
Dim temporal As Integer
'otras variables que necesitaremos durante el análisis
Dim i As Integer, j As Integer: j = 1
Dim x As Integer
'bucle para los cinco números aleatorios distintos
For i = 1 To 6
'en el caso del primer bucle no es necesario analizar nada, dado que la matriz destino
'está vacía
If i = 1 Then
'asignamos al primer elemento de la matriz el número aleatorio generado
seisnumeros(j) = Int((10 * Rnd) + 1) ' Genera un valor aleatorio entre 1 y 10.
'aumentamos en mas uno el contador del indice de la matriz destino
j = j + 1
Else
'para los demás casos que no sea el primer elemento de la matriz
'declaramos el retorno que emplearemos con goto
retorno:
'obtenemos el valor aleatorio
temporal = Int((10 * Rnd) + 1) 'Genera un valor aleatorio entre 1 y 10.
'recorremos la matriz destino íntegramente
For x = 1 To 6
'si el número aleatorio ya se encuentra....
If temporal = seisnumeros(x) Then
'volvemos al marcador -retorno-
GoTo retorno
End If
Next x
'sino asignamos el número aleatorio que se halla en la variable temporal
'al siguiente indice de la matriz
seisnumeros(j) = temporal ' Genera un valor aleatorio entre 1 y 10.
'aumentamos en mas uno el indice de la matriz para la asignación del
'siguiente
j = j + 1
End If
Next i
txt(0).Text = txt(0).Text + "," + Str(seisnumeros(1))
txt(1).Text = txt(1).Text + "," + Str(seisnumeros(2))
txt(2).Text = txt(2).Text + "," + Str(seisnumeros(3))
txt(3).Text = txt(3).Text + "," + Str(seisnumeros(4))
txt(4).Text = txt(4).Text + "," + Str(seisnumeros(5))
txt(5).Text = txt(5).Text + "," + Str(seisnumeros(6))
Next
MsgBox ("Los datos han sido generados")
End Sub