• Domingo 22 de Diciembre de 2024, 15:00

Autor Tema:  Generar Numeros Pseudoaleatorios...  (Leído 3188 veces)

xZextorx

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Generar Numeros Pseudoaleatorios...
« en: Miércoles 5 de Julio de 2006, 06:27 »
0
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...
...y el maestro dijo: "Si, la vida te da la espalda, besale el culo."

fuhrer

  • Miembro MUY activo
  • ***
  • Mensajes: 329
  • Nacionalidad: mx
    • Ver Perfil
    • http://admin.busquenoseninternet.com
Re: Generar Numeros Pseudoaleatorios...
« Respuesta #1 en: Miércoles 5 de Julio de 2006, 19:09 »
0
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
  1.  
  2. unsigned long next = 1;
  3.  
  4. int rand(void){
  5.            next = next*1103515245 + 12345;
  6.            return (unsigned int)(next/65536) % 32768;
  7.            }
  8.  
  9. void srand(unsigned int seed){
  10.                next = seed;
  11.                }
  12.  
  13.  

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

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Generar Numeros Pseudoaleatorios...
« Respuesta #2 en: Jueves 6 de Julio de 2006, 04:30 »
0
Hola gracias por responder...esta es una imagen del programa.



Código: Text
  1. Private Sub btnGenerar_Click()
  2. 'X_i+1=(A*X_i+INC)%Mod   ---> Formula para calcular números pseudoaleatorios
  3. Semilla = Val(Trim(txtSemilla.Text))
  4. Mult = Val(Trim(txtMulti.Text))
  5. Modul = Val(Trim(txtMod.Text))
  6. '--------------------------------------------
  7. Increm = Val(Trim(txtIncrem.Text))
  8. Total_Gen = Val(Trim(txtCantNumGen.Text))
  9.  
  10. Do While (X < Total_Gen)
  11.     Dim Salida As Integer
  12.     Salida = (Mult * X + Increm) Mod Modul
  13.     Xsub = Salida / Modul
  14.     List1.AddItem FormatNumber(Xsub, 4)    
  15.     X = X + 1
  16. Loop
  17. End Sub
  18.  
  19.  

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
...y el maestro dijo: "Si, la vida te da la espalda, besale el culo."

fuhrer

  • Miembro MUY activo
  • ***
  • Mensajes: 329
  • Nacionalidad: mx
    • Ver Perfil
    • http://admin.busquenoseninternet.com
Re: Generar Numeros Pseudoaleatorios...
« Respuesta #3 en: Jueves 6 de Julio de 2006, 20:24 »
0
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
  1. X = X + 1
  2.  
cambialo por:
Código: Text
  1. X = Salida
  2.  

xZextorx

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Generar Numeros Pseudoaleatorios...
« Respuesta #4 en: Viernes 7 de Julio de 2006, 19:20 »
0
Hola gente...

Código: Text
  1.  
  2. Private Sub btnGenerar_Click()
  3. 'SALIDA=(A*X+INC)%Mod   ---> Formula para calcular números pseudoaleatorios
  4. Mult = Val(Trim(txtMulti.Text))
  5. Modul = Val(Trim(txtMod.Text))
  6. '--------------------------------------------
  7. Increm = Val(Trim(txtIncrem.Text))
  8. Total_Gen = Val(Trim(txtCantNumGen.Text))
  9.  
  10. Do While (X < Total_Gen)
  11.    Dim Salida As Integer
  12.    Salida = (Mult * X + Increm) Mod Modul
  13.    Xsub = Salida / Modul
  14.    List1.AddItem FormatNumber(Xsub, 4)    
  15.    X = X + 1
  16. Loop
  17. End Sub
  18.  
  19.  

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.
...y el maestro dijo: "Si, la vida te da la espalda, besale el culo."

fuhrer

  • Miembro MUY activo
  • ***
  • Mensajes: 329
  • Nacionalidad: mx
    • Ver Perfil
    • http://admin.busquenoseninternet.com
Re: Generar Numeros Pseudoaleatorios...
« Respuesta #5 en: Martes 11 de Julio de 2006, 04:47 »
0
Hola.

Pues la verdad, no se porque dices que no funcionó lo que te sugerí, posiblemente lo hiciste mal o no me explique bien, ya que de la manera en que te dije es la forma que utilizan los lenguajes de programación, y si es así, entonces estas diciendo que el generador de números pseudoaleatorios de los lenguajes de programación tampoco funcionan. Además esto esta demostrado y publicado que funciona correctamente.

Creo que para que me entiendas mejor, estaría bien que investigaras en libros o tal ves en artículos de la ACM, ahí podrías encontrar y verificar lo que te digo.

Hasta luego.