Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/06/2011, 04:23
ubuntusesito
 
Fecha de Ingreso: mayo-2011
Mensajes: 9
Antigüedad: 13 años, 6 meses
Puntos: 0
Números aleatorios en VB6 pero con probabilidad

Necesito crear 6 números al azar, desde el 1 al 10, pero de modo que haya probabilidad de que el numero situado antes en la siguiente lista, salga más fácilmente que el siguiente, es decir, que el número 5 tenga más probabilidad de salir que el 7, a su vez el 7 más que el 2, así hasta el último número.

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