Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: martin_poipon en 27 Mayo 2011, 17:27 pm



Título: [Aporte]Generador de números aleatorios en Vb6 (con mínimo y máximo)
Publicado por: martin_poipon en 27 Mayo 2011, 17:27 pm
Hola, soy nuevo en elhacker y quise aportar algo, pues vi varios temas/posts que intentaban crear números aleatorios, pero a casi nadie le salía bien  :-\ así que creé uno con mis pequeños conocimientos en Vb6 y os lo dejo, ojalá les sirva  :)

PD: Acepto cualquier crítica y/o sugerencia sobre el programa  :)

Crean un nuevo formulario (yo le puse frmGna - Generador de Números Aleatorios)

1.- Ponen 2 TextBox (el de número mínimo llamado txtDe y el de máximo txtA)

2.- Ponen un botón (cmdGenera)

3.- Ponen un label (lblRand - ahí aparecerá el numero aleatorio)



Una vez completados los pasos de arriba, seguimos:

En el código del botón cmdGenera poneis lo siguiente:
Código
  1. Option Explicit 'Esta linea no es obligatoria, _
  2. pero la recomiendo
  3. Private Sub cmdGenera_Click()
  4. Dim rand As Integer 'Declaramos la variable
  5. 10  rand = Int((txtA - txtDe) * Rnd + txtDe) 'El 10 se usara para _
  6. el Goto, mientras que el Int((txtA - txtDe) * Rnd + txtDe) genera _
  7. el numero aleatorio
  8.    If
  9. rand < txtDe.Text Then 'Si el numero generado es mayor _
  10. a lo que debe ser, se hace de nuevo
  11.        GoTo 10
  12.    Else
  13.        lblRand.Caption = rand 'Se muestra el numero aleatorio
  14.    End If
  15. End Sub
  16.  



Si quieres descargar el proyecto, clickame (http://www.multiupload.com/VN2ACQ6PB8) (RapidShare, MegaUpload, DepositFiles, Hotfile, zShare, Uploading)
Nombre del archivo: gna_martin_poipon_para_elhacker.zip
MD5: EA3DD9A6EECD3CD65E4223BD44A02EC0



Notas:
  • El Int redondea el número, pues Rnd() genera uno que no es integer, sino float.
  • Explicación de cómo se genera el número aleatorio:
    Int((número máxima - número mínimo) * Rnd + número mínimo)

Espero que les sirva  ;D

Un saludo,

Martin


Título: Re: [Aporte]Generador de números aleatorios en Vb6 (con mínimo y máximo)
Publicado por: skapunky en 27 Mayo 2011, 17:39 pm
Bueno, si estas empezando está bien, pero yo te recomiendo que hagas mejor la función, la idea es que hagas la misma función pero que no dependa de ningun objeto o codigo externo a la función.

Simplemente que le entres una variable a la función y retórne el número aleatorio, así tendrás una función independiente a cualquier programa y será reciclable que es lo mas importante y muy fácilmente adaptable a otros programas.

Por cierto...te has dejado los dos puntos en el 10 del goto, sería:

Código
  1. 10:  rand = Int((txtA - txtDe) * Rnd + txtDe)


PD: No puedo creerme que la gente no se aclare con esta función.  :xD


Título: Re: [Aporte]Generador de números aleatorios en Vb6 (con mínimo y máximo)
Publicado por: DarkMatrix en 27 Mayo 2011, 19:06 pm
No es necesario los dos puntos despues del 10, simplemente es una numero de linea y cuando se dice "goto 10" entonces se refiere a que valla a esa linea de nuevo...

En cambio si fuera "Goto Aqui" si tndria que espesificar:

Código
  1. Aqui:
  2.  
  3. Msgbox "Hola"
  4.  
  5. Goto Aqui
  6.  


Título: Re: [Aporte]Generador de números aleatorios en Vb6 (con mínimo y máximo)
Publicado por: martin_poipon en 28 Mayo 2011, 16:18 pm
Bueno, si estas empezando está bien, pero yo te recomiendo que hagas mejor la función, la idea es que hagas la misma función pero que no dependa de ningun objeto o codigo externo a la función.

Simplemente que le entres una variable a la función y retórne el número aleatorio, así tendrás una función independiente a cualquier programa y será reciclable que es lo mas importante y muy fácilmente adaptable a otros programas.

Por cierto...te has dejado los dos puntos en el 10 del goto, sería:

Código
  1. 10:  rand = Int((txtA - txtDe) * Rnd + txtDe)


PD: No puedo creerme que la gente no se aclare con esta función.  :xD

Lo siento, soy muy nuevo en esto del visual basic, acabo de empezar y por eso está así... pero que tonterías estoy diciendo... ¡ahora mismo lo arreglo! :xD
No es necesario los dos puntos despues del 10, simplemente es una numero de linea y cuando se dice "goto 10" entonces se refiere a que valla a esa linea de nuevo...

En cambio si fuera "Goto Aqui" si tndria que espesificar:

Código
  1. Aqui:
  2.  
  3. Msgbox "Hola"
  4.  
  5. Goto Aqui
  6.  
Gracias, nunca encontré la manera de hacerlo tipo batch, pero ahora si... gracias :)


Título: Re: [Aporte]Generador de números aleatorios en Vb6 (con mínimo y máximo)
Publicado por: skapunky en 28 Mayo 2011, 17:03 pm
Citar
No es necesario los dos puntos despues del 10, simplemente es una numero de linea y cuando se dice "goto 10" entonces se refiere a que valla a esa linea de nuevo...

Pues justamente antes de avisar que faltavan los dos puntos, lo comprové ya que yo nunca uso etiquetas que sean números, y con el 10 sin los dos puntos me daba error, no se de donde sacas eso del número de línea..


Título: Re: [Aporte]Generador de números aleatorios en Vb6 (con mínimo y máximo)
Publicado por: BlackZeroX en 28 Mayo 2011, 22:33 pm
.
Evita ecaresidamente usar Goto es una mala practica y de paso para otros quisas no sea entendible en tu caso seria usar

do ... while until

PD: No puedo creerme que la gente no se aclare con esta función.  :xD

El objetivo es hacer que se generen Números aleatorios SIN REPETIR sin perder tiempo y no saturar el procesador con bucles o bucles anidados, cosa que no es rentable con rangos de números amplios ya que la relación Tiempo-Procesador.

Este modulo de clase es mas rápida y mas optimizada que este código (este hilo) con rangos de números mas amplios, claro que tiene mas código pero es por una pequeña heuristica para saber que números generar o no generar sin usar For Next lo cual aumenta el rendimiento en relación Procesador-Tiempo pero no memoria  :¬¬.
[Src] cRndNumbersNR ( Generar números aleatorios sin repetir [Very-Fast] ) (http://foro.elhacker.net/programacion_visual_basic/src_crndnumbersnr_generar_numeros_aleatorios_sin_repetir_veryfast-t328967.0.html)

Dulces Lunas!¡.