elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  generador de numeros aleatorios en VB
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 4 Ir Abajo Respuesta Imprimir
Autor Tema: generador de numeros aleatorios en VB  (Leído 99,211 veces)
Slasher-K


Desconectado Desconectado

Mensajes: 1.477


Ver Perfil
Re: generador de numeros aleatorios en VB
« Respuesta #10 en: 24 Noviembre 2004, 14:18 pm »

Para crear VERDADEROS números aleatorios en VB hay que crear nuestro propio algoritmo usando varios valores variables y combinándolos. Si queremos valores aleatorios necesitamos recurrir a la API de Win2, por ejemplo a las funciones GetTickCount, GetCurrentProcessId, GetCurrentProcess, GetCurrentThreadId. Mezclando los valores devueltos por estas funciones, más la fecha y hora actuales, más algún número generado a partir de una CLSID aleatoria, podemos obtener un número aleatorio.

La idea de un número aleatorio es que no se repita en el tiempo, por lo tanto para crearlo tenemos que intentar usar parámetros que tampoco se repitan en el tiempo.

Abajo dejo un ejemplo sencillo de como generar un nº aleatorio. Para usarlo hay que agregar una referencia a WIN.TLB

Código:
Function Rand(Optional Seed As Long) As Currency
          Dim lpMem As MEMORYSTATUS
          Dim lTime&, lProc&, lProcId&
          Dim lDate&, cRand@

  If Seed <= 0 Then Seed = Rnd * GetClsidCount
 
  'Datos que se usarán para generar el número aleatorio.
  '
  Call GlobalMemoryStatus(lpMem)
  lTime = timeGetTime
  lProc = GetCurrentProcess
  lProcId = GetCurrentProcessId
  lDate = CLng(Date)
 
  cRand = (lpMem.dwAvailVirtual Mod lTime) Xor _
               ((lTime Xor (lProc Mod lProcId)) Xor _
               (lProcId + (lDate Xor lpMem.dwTotalPageFile)))

  Rand = cRand
End Function


« Última modificación: 1 Julio 2005, 07:05 am por Dunklerstern » En línea



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*
willmx

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: generador de numeros aleatorios en VB
« Respuesta #11 en: 29 Noviembre 2004, 09:25 am »

¿si quiero generar numeros Pseudoaletorios? no necesito el random para eso....como lo harian


En línea

capi

Desconectado Desconectado

Mensajes: 12



Ver Perfil WWW
Re: generador de numeros aleatorios en VB
« Respuesta #12 en: 30 Diciembre 2004, 08:30 am »

tengo una duda y es que cuando uso rnd me sale todo bien pero siempre sale la misma cadena de numeros y por orden, alguien sabe como arreglar esto??? ???
En línea

hispalink.es.kz --->>>foro empezando, se necesitan colaboradores; contenidos: peliculas, juegos pc, ps2, xxx, etc... pasate por aquí
capi

Desconectado Desconectado

Mensajes: 12



Ver Perfil WWW
Re: generador de numeros aleatorios en VB
« Respuesta #13 en: 31 Diciembre 2004, 09:17 am »

tengo una duda y es que cuando uso rnd me sale todo bien pero siempre sale la misma cadena de numeros y por orden, alguien sabe como arreglar esto??? ???

Ya lo he averiguado, para quien quiera saberlo con poner un "randomize" en el "From1_load" vale, sale siempre números diferentes.
En línea

hispalink.es.kz --->>>foro empezando, se necesitan colaboradores; contenidos: peliculas, juegos pc, ps2, xxx, etc... pasate por aquí
Aphex

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: generador de numeros aleatorios en VB
« Respuesta #14 en: 4 Enero 2005, 11:00 am »

Hola, feliz año a todos. Soy nuevo en el foro. Aunque solo soy un principiante en programación, al ver este mensaje se me ha ocurrido que quizás podría aportar algo.

Voy a poner una manera sencilla de sacar numeros aleatorios en VB6.

Hace poco realicé un simulador de dados (uno de 8 caras y otro de 100). A continuación os pongo el código del de 8:

Creais un nuevo proyecto (exe stándard) y añadís un botón (Command1), un timer  (Timer1) y un label (Label1).

El código sería:

-------------------------------------------------------------------

Private Sub FormLoad()
Timer1.Enabled = False
End Sub
_______________________________________________

Private Sub Command1_Click()
Dim numero as Byte
Timer1.Enabled = True

Randomize Timer
              numero = rnd * 8

      Do While numero > 8
              numero = numero - 8
Loop
     
      Do While numero < 1
              numero = numero + 8
Loop
label1.Caption = numero
End Sub

------------------------------------------------------------
Y ya está. Cada vez que se hace clic en el botón, el programa genera diferentes números comprendidos entre el 1 y el 8 los cuales se muestran en el label1 (para el de 100 caras, se sustituye el 8 por el 100).

Espero que os sirva. ^^

PD: También espero que a los moderadores no les moleste que lo haya puesto sin el "code", pero creo que así se ve más claro (aunque si hace falta, pues me lo decís y lo cambio).
« Última modificación: 5 Enero 2005, 01:34 am por Aphex » En línea

Trebor

Desconectado Desconectado

Mensajes: 4


---<[Trebor]>---


Ver Perfil
Re: generador de numeros aleatorios en VB
« Respuesta #15 en: 12 Enero 2005, 08:26 am »

Hola, feliz año a todos. Soy nuevo en el foro. Aunque solo soy un principiante en programación, al ver este mensaje se me ha ocurrido que quizás podría aportar algo.

Voy a poner una manera sencilla de sacar numeros aleatorios en VB6.

Hace poco realicé un simulador de dados (uno de 8 caras y otro de 100). A continuación os pongo el código del de 8:

Creais un nuevo proyecto (exe stándard) y añadís un botón (Command1), un timer  (Timer1) y un label (Label1).

El código sería:

-------------------------------------------------------------------

Private Sub FormLoad()
Timer1.Enabled = False
End Sub
_______________________________________________

Private Sub Command1_Click()
Dim numero as Byte
Timer1.Enabled = True

Randomize Timer
              numero = rnd * 8

      Do While numero > 8
              numero = numero - 8
Loop
     
      Do While numero < 1
              numero = numero + 8
Loop
label1.Caption = numero
End Sub

------------------------------------------------------------
Y ya está. Cada vez que se hace clic en el botón, el programa genera diferentes números comprendidos entre el 1 y el 8 los cuales se muestran en el label1 (para el de 100 caras, se sustituye el 8 por el 100).

Espero que os sirva. ^^

PD: También espero que a los moderadores no les moleste que lo haya puesto sin el "code", pero creo que así se ve más claro (aunque si hace falta, pues me lo decís y lo cambio).
buenas, gracias por el code, pero creo k el

Private Sub FormLoad()
Timer1.Enabled = False
End Sub

no hace falta,el control timer, como otros, por ejemplo el winsock, no se muestran en tiempo de ejecucion ;)
En línea

zaerik


Desconectado Desconectado

Mensajes: leet



Ver Perfil
Re: generador de numeros aleatorios en VB
« Respuesta #16 en: 12 Enero 2005, 08:32 am »

buenas, gracias por el code, pero creo k el

Código:
Private Sub FormLoad()
Timer1.Enabled = False
End Sub

no hace falta,el control timer, como otros, por ejemplo el winsock, no se muestran en tiempo de ejecucion ;)

Creo que te equivocas de funcion :P, esa funcion lo que hace es que al cargar el programa el timer1 se desactive, porque al autor del programa le interesaba que el timer1 solo se active cuando le de a un boton, por eso luego usa la funcion:

Código:
Private Sub Command1_Click()
Dim numero as Byte
Timer1.Enabled = True
...
En línea

Trebor

Desconectado Desconectado

Mensajes: 4


---<[Trebor]>---


Ver Perfil
Re: generador de numeros aleatorios en VB
« Respuesta #17 en: 14 Enero 2005, 09:05 am »

joder k cabeza la mia, la abia confundido con visible,jajajaj, lo siento
En línea

Juan_Perez

Desconectado Desconectado

Mensajes: 148


Ver Perfil
Re: generador de numeros aleatorios en VB
« Respuesta #18 en: 22 Abril 2005, 18:10 pm »

Les dejo una función que genera números aleatorios. Esta está codificada en Pascal pero se puede adaptar fácilmente a Visual Basic, sólo usa las operaciones aritméticas y los operadores binarios DIV y MOD, los cuales dan el cociente y el residuo de una división entera respectivamente. Esta función y el texto en cursiva abajo lo saqué del libro "Pascal Avanzado. Técnicas de Programación" de Paul Sand, de la editorial McGraw-Hill 1985. Libro excelente para el programador en general, no sólo el que programa en Pascal, ya que su énfasis es en las técnicas de programación antes que en un lenguaje específico como Pascal. En el desarrollan en cada capítulo programas útiles o interesantes (entrada interactiva, una calculadora de propósito general, el juego de tablero reversi, simulación y animación y en el último capítulo un auténtico proyecto: una hoja de cálculo).
Esta función viene en el apéndice del libro y el autor la puso para resolver problemas de transportabilidad con las versiones de Pascal que no soportaban números aleatoreos, función que el usa en el capítulo de simulación y animación.
Código:
function random: integer;
{ Devuelve un entero aleatorio en el rango 0..32767 }
var
   i, j, carry, t: integer;
begin { random }
   for i := 1 to 7 do begin
      carry := 0;
      for j := 1 to 4 do begin
         t := 2 * seed[j] + carry;
         carry := t div 256;
         seed[j] := t mod 256
      end;
      if (seed[1] div 128) <> (seed[4] div 128) then
         seed[1] := (seed[1] + 1) mod 256
   end;
   random := 256 * (seed[1] div 2) + seed[3]
end;
   Este array debe ser global para que guarde sus valores entre diferentes llamadas a random. El array debe ser inicializado antes de cualquier llamada a random; por ejemplo:
...
seed[1] := 90;
seed[2] := 178;
seed[3] := 246;
seed[4] := 147;
...
   Sin embargo, si asignamos los valores iniciales al array seed de esta forma, obtendremos siempre la misma secuencia aleatoria (lo cual es deseable en muchas circunstancias). Para evitar esto, Apple Pascal suministra el procedimiento randomize, el cual hace que se generen diferentes secuencias aleatorias. El mismo efecto puede obtenerse cambiando los elementos del array seed a otros valores antes de que se haga cualquier llamada a random; cómo puede hacerse esto se lo dejamos a usted. Por ejemplo, podría coger el intervalo de tiempo en ciclos de máquina entre la pulsación de dos teclas.
   Esta rutina fue extraída de Seminumerical Algortihms de D. Knuth (Adison-Wesley, 1981). Esta obra clásica contiene información sobre aritmética y generadores de números aleatoreos.
En línea

Unravel
BlueHack Team
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.016



Ver Perfil
Re: generador de numeros aleatorios en VB
« Respuesta #19 en: 29 Abril 2005, 05:22 am »

Quería puntualizar una cosa nada mas,

Si alguno conseguís generar números aleatorios, habreis revolucionado el mundo ;)

Si la misma semilla genera el mismo número (como ocurre siempre) ya no son número aleatorios.
En línea

"La verdad es un ácido corrosivo que salpica casi siempre al que la maneja". Santiago Ramón y Cajal.
Páginas: 1 [2] 3 4 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Aporte]Generador de números aleatorios en Vb6 (con mínimo y máximo)
Programación Visual Basic
martin_poipon 5 8,143 Último mensaje 28 Mayo 2011, 22:33 pm
por BlackZeroX
generador de numeros aleatorios de 5 cifras
Programación General
Enrique357 2 7,707 Último mensaje 23 Diciembre 2011, 22:18 pm
por Valkyr
generador de números y suma de los mismos
Scripting
vidusa 4 3,395 Último mensaje 31 Marzo 2012, 21:30 pm
por vidusa
[c]generador de numeros aleatoreos( se puede usar con la hora)
Programación C/C++
daryo 0 1,655 Último mensaje 22 Septiembre 2013, 17:30 pm
por daryo
[BATCH] Generador de números aleatorios/random
Scripting
Tino 0 3,103 Último mensaje 26 Noviembre 2017, 14:00 pm
por Tino
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines