[Aporte]Generador de números aleatorios en Vb6 (con mínimo y máximo)

Iniciado por martin_poipon, 27 Mayo 2011, 17:27 PM

0 Miembros y 1 Visitante están viendo este tema.

martin_poipon

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 (vb) [Seleccionar]
Option Explicit 'Esta linea no es obligatoria, _
pero la recomiendo
Private Sub cmdGenera_Click()
Dim rand As Integer 'Declaramos la variable
10  rand = Int((txtA - txtDe) * Rnd + txtDe) 'El 10 se usara para _
el Goto, mientras que el Int((txtA - txtDe) * Rnd + txtDe) genera _
el numero aleatorio
   If
rand < txtDe.Text Then 'Si el numero generado es mayor _
a lo que debe ser, se hace de nuevo
       GoTo 10
   Else
       lblRand.Caption = rand 'Se muestra el numero aleatorio
   End If
End Sub





Si quieres descargar el proyecto, clickame (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
BiQuad! - Inteligencia Virtual
[X] Tener una web con el script
[] Tener más de 100 posts
[] Tener más de 100 miembros
Host: byethost (gratis)

skapunky

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 (vb) [Seleccionar]
10:  rand = Int((txtA - txtDe) * Rnd + txtDe)


PD: No puedo creerme que la gente no se aclare con esta función.  :xD
Killtrojan Syslog v1.44: ENTRAR

DarkMatrix

#2
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 ( vb) [Seleccionar]

Aqui:

Msgbox "Hola"

Goto Aqui

Todo aquello que no se puede hacer, es lo que no intentamos hacer.
Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0)

Desing by DarkMatrix

martin_poipon

Cita de: 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 (vb) [Seleccionar]
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
Cita de: 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 ( vb) [Seleccionar]

Aqui:

Msgbox "Hola"

Goto Aqui

Gracias, nunca encontré la manera de hacerlo tipo batch, pero ahora si... gracias :)
BiQuad! - Inteligencia Virtual
[X] Tener una web con el script
[] Tener más de 100 posts
[] Tener más de 100 miembros
Host: byethost (gratis)

skapunky

CitarNo 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..
Killtrojan Syslog v1.44: ENTRAR

BlackZeroX

#5
.
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

Cita de: skapunky en 27 Mayo 2011, 17:39 PM
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] )

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