Programación General > VBA

 Generar Numeros Pseudoaleatorios...

(1/2) > >>

xZextorx:
Hola gente, alguien podria porfavor darme una pequeña explicacion de como crear un programa en el cual genere una determinada cantidad de números Pseudoaleatorios, la verdad que allí estoy perdido he buscado en el google, pero no he encontrado nada...

Sé que necesito un formulario con

un campo:
                   ____
Semilla ---> |___|
       
                          ____
Multiplicador ---> |___|

                  ____
Modulo ---> |___|

                         ____
Incremento ---> |___|

                                                ____
Cant. de numros a generar ---> |___|

de momento se que la formula para generarlos es

Rn+1=(Multiplicador * R0 + Incremento)%Modulo

la pregunta es como se utilizaria en una instrucción ?...

porfavor gente una manito...

fuhrer:
Hola, que tal.

En esto que quieres hacer, lo dificil es encontrar los valores para el módulo y el incremento, como tu les llamas. Ya que debes de elegir los valores adecuados para asegurar que siempre obtendras todos los valores posibles.

Aqui te pongo el ejemplo de un programa hecho en C

--- Código: Text --- unsigned long next = 1; int rand(void){           next = next*1103515245 + 12345;           return (unsigned int)(next/65536) % 32768;           } void srand(unsigned int seed){               next = seed;               }  
Como puedes ver, el incremento y la semilla no importan mucho, estos valores los eliges como quieras, lo importante son tu multiplicador y el módulo, ya que se dice que el multiplicador debe ser un generador de el módulo. Para el ejemplo,

multiplicador -> 1103515245
módulo -> 2^32

Pero como el módulo es un numero demasiado grande, por eso se hace la división entre 65536 y luego se saca el módulo 32768 lo cual es equivalente.

En este caso el multiplicador no es un buen generador del módulo, ya que con esto sólo se generan 2^30 números antes de repetir el ciclo, pero es un número suficientemente grande.

Espero te sirva mi ejemplo y mi explicación y espero no haberte enredado, si tienes dudas pregunta, pero porfavor se claro y específico.

Hasta luego.

xZextorx:
Hola gracias por responder...esta es una imagen del programa.




--- Código: Text ---Private Sub btnGenerar_Click()'X_i+1=(A*X_i+INC)%Mod   ---> Formula para calcular números pseudoaleatoriosSemilla = Val(Trim(txtSemilla.Text))Mult = Val(Trim(txtMulti.Text))Modul = Val(Trim(txtMod.Text))'--------------------------------------------Increm = Val(Trim(txtIncrem.Text))Total_Gen = Val(Trim(txtCantNumGen.Text)) Do While (X < Total_Gen)    Dim Salida As Integer    Salida = (Mult * X + Increm) Mod Modul    Xsub = Salida / Modul    List1.AddItem FormatNumber(Xsub, 4)         X = X + 1LoopEnd Sub  
este es el código que he tratado de hacer, la verdad no se si estara bien o mal a ver Uds. que tienen más experiencia porfa una manito...Gracias

fuhrer:
Por lo que veo, lo que estas haciendo es más fácil, a que te proporcionan los datos y tu solamente los utilizas.

Lo único que esta mal en tu código, es que el X_i+1 no se refiere al número consecutivo, sino que es el número pseudoaleatorio encontrado.

Así que al final en la parte de tu código en donde tienes

--- Código: Text ---X = X + 1 cambialo por:

--- Código: Text ---X = Salida 

xZextorx:
Hola gente...


--- Código: Text --- Private Sub btnGenerar_Click()'SALIDA=(A*X+INC)%Mod   ---> Formula para calcular números pseudoaleatoriosMult = Val(Trim(txtMulti.Text))Modul = Val(Trim(txtMod.Text))'--------------------------------------------Increm = Val(Trim(txtIncrem.Text))Total_Gen = Val(Trim(txtCantNumGen.Text)) Do While (X < Total_Gen)   Dim Salida As Integer   Salida = (Mult * X + Increm) Mod Modul   Xsub = Salida / Modul   List1.AddItem FormatNumber(Xsub, 4)       X = X + 1LoopEnd Sub  
Hola amigo, probe tu sugerencia pero no es la correcta ya que solo me arroja un número y la intension y el motivo por el cual es una instruccion repetitiva es para encontrar varios numeros hasta que el indice "X" ya no sea  menor que Total de numeros a generar...donde salida va a tomar el valor de la formula y seria el valor entero, para luego aplicarlo en la division con el modulo y asi encontrar el numero P.A. y poder pasarselo al List. el motivo del porque esta X=X+1 es porque va a ir sumando el indice y pasarselo a SAlida....el resto ya es solo SEGUIR EL CODIGO...la verdad no se si yo o tu estaremos en ERROR, si me codigo fuente esta equivocado, pero he probado de mi forma y la tuya y la que me dio resultados fue la mia, lamento contradecirte ya que has sido de gran ayuda...Saludos.


PD. del formulario Omiti la caja de texto semilla.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa