Generar combinacion de 5 numeros escogiendo los valores de un array

Iniciado por usuarioarroba, 28 Agosto 2011, 22:05 PM

0 Miembros y 2 Visitantes están viendo este tema.

usuarioarroba

Necesito crear en VB6 un pequeño programa que genere una combinación de 5 números aleatorios. La combinación debe generarse con una serie de números que yo indique, que algunas veces será mayor y otras veces menor (ejemplo: 1, 2, 5, 6, 9, 21, 22 -- o -- 32, 11, 2, 4, 88), en vez de generarse del 1 al 100 como se suele hacer típicamente. El resultado aparecerá en un txtbox y en la combinación no pueden salir números repetidos. ¿Alguien sabría como hacer este programa?

BlackZeroX

The Dark Shadow is my passion.

usuarioarroba

#2
Tengo hecho este pequeño programa que genera 5 números del 1 al 50, pero necesitaría modificarlo para poder generarlos en base a los que yo indique en un array, teniendo este unas veces mas números y otras menos.

En el formulario tengo una barra de progreso (progreso), el botón de generar (Command1), el botón de guardar (Command2) que guarda el resultado en un fichero dependiendo de la ruta escrita en un txtbox (txtruta). Lo que guarda son los valores que se van almacenando en los txtbox de resultado (txt(4)) de modo que en txt(0) se almacena el primer número generado, en txt(1) el segundo... si se generan mas, separado por una coma se pondría el segundo numero generado... esto depende del valor del txtbox que indica la cantidad de valores a generar (txtcantidad).

Private Sub Command1_Click()
progreso.Max = txtcantidad
For contador = 1 To txtcantidad
progreso.Value = contador

Randomize Timer
Dim cinconumeros(1 To 5) As Integer
Dim temporal As Integer
Dim i As Integer, j As Integer: j = 1
Dim x As Integer
For i = 1 To 5
If i = 1 Then
cinconumeros(j) = Int((50 * Rnd) + 1)
j = j + 1
Else
retorno:
temporal = Int((50 * Rnd) + 1)
For x = 1 To 5
If temporal = cinconumeros(x) Then
GoTo retorno
End If
Next x
cinconumeros(j) = temporal
j = j + 1
End If
Next i

txt(0).Text = txt(0).Text + "," + Str(cinconumeros(1))
txt(1).Text = txt(1).Text + "," + Str(cinconumeros(2))
txt(2).Text = txt(2).Text + "," + Str(cinconumeros(3))
txt(3).Text = txt(3).Text + "," + Str(cinconumeros(4))
txt(4).Text = txt(4).Text + "," + Str(cinconumeros(5))

Next
MsgBox ("Los datos han sido generados")
End Sub

Private Sub Command2_Click()
Open txtruta For Append As #1
Print #1, txt(0)
Print #1, txt(1)
Print #1, txt(2)
Print #1, txt(3)
Print #1, txt(4)
Close #1
MsgBox ("Los datos se  han pasado al archivo")

End Sub

Private Sub Form_Load()

End Sub



Lo tengo subido en megaupload para que sea mas fácil de ver y entender: http://www.megaupload.com/?d=K1A4LGJO

79137913

HOLA!!!

Aca te dejo con tu base de codigo, indestado y un poco mejorado:
Código (vb) [Seleccionar]
Private Sub Command1_Click()
   Dim cinconumeros(1 To 5) As Integer
   Dim temporal As Integer
   Dim I, J, X, Y As Integer
   J = 1
   progreso.Max = txtcantidad
   For contador = 1 To txtcantidad
       progreso.Value = contador
       Randomize Timer
       
       For I = 1 To 5
           If I = 1 Then
               cinconumeros(J) = Int((50 * Rnd) + 1)
               J = J + 1
           Else
retorno:
               temporal = Int((50 * Rnd) + 1)
               For X = 1 To 5
                   If temporal = cinconumeros(X) Then
                       GoTo retorno
                   End If
               Next X
               cinconumeros(J) = temporal
               J = J + 1
           End If
       Next I
       For Y = 0 To 4
           txt(Y).Text = txt(Y).Text + "," + Str(cinconumeros(Y + 1))
       Next
   Next
   MsgBox ("Los datos han sido generados")
End Sub

Private Sub Command2_Click()
Dim Z As Long
   Open txtruta For Append As #1
       For Y = 0 To 4
           Print #1, txt(Z)
       Next
   Close #1
   MsgBox ("Los datos se  han pasado al archivo")
End Sub


GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

usuarioarroba

Gracias 79137913. Ha quedado muy optimizado el código. Yo lo descargué de una web y lo modifiqué para adaptarlo a mi programa, pero con un curso de 3 meses de Visual Basic en una academia no es que sepa hacer gran cosa. Lo único que me falta es que en vez de generar los números del 1 al 50 los genere utilizando los de un array de tamaño indefinido. Con eso ya tendría el programa completo.

BlackZeroX

@usuarioarroba

No le dejes la enseñanza a la academia se un poco autodidacta... usa Redim.

Dulces Lunas!¡.
The Dark Shadow is my passion.

usuarioarroba

Bueno BlackZeroX▓▓▒▒░░ después de la academia estuve aprendiendo con la ayuda de Google, pero no soy un gran programador, se hacer algunas cosas con vb, php, asp y muy poco de C, pero como digo, no se me da muy bien.

usuarioarroba

79137913, da un error en la línea: For I = 1 To 5
Error '9' en tiempo de ejecución:
El subíndice está fuera del interval

79137913

HOLA!!!

Mira yo optimice tu codigo no lo revise, pero es imposible eso ya que la variable I no se usa en ningun subindice.
Fijate.

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*