Dev - C++ - generador de numeros aleatorios implementado mediante congruencia lineal

 
Vista:

generador de numeros aleatorios implementado mediante congruencia lineal

Publicado por adrian (4 intervenciones) el 18/09/2008 13:29:15
Bueno voi a intentar explicar un poco el problema que tengo.El programa en si es un generador de numeros aleatorios implementado mediante congruencia lineal(formula que esta en el primer mensaje), tiene que estar formado por dos funciones una que me obtenga los segundos del sistema y otra la cual debe estar compuesta por tres opciones(para la cual utilizaria el switch):

la primera seria generar una secuencia de numeros,para esto tengo pensado darles un valor predeterminados a las variables de la formula menos a la X que la cargaria con el tiempo,asi siempre generaria una secuencia distinta.

la segunda seria una inicializacion que seria como resetear el tiempo
y ya la tercera el salir.

si me ayudais os lo agreadeceria en el alma.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

generador de numeros aleatorios implementado mediante congruencia lineal

Publicado por AntonioG (28 intervenciones) el 18/09/2008 18:55:15
Hola,

En que parte quieres que te ayude?

Mira, por ejemplo, si quieres obtener los segundos del sistema, usa la libreria time.h:
http://es.wikipedia.org/wiki/Time.h
Pienso que debes usar los segundos que han pasado desde que comenzo el dia, ya que si solo usas los segundos del minuto actual solo lo inicializarias con valores entre 0 y 59. De la otra manera hay mas posibles valores de inicializacion.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

generador de numeros aleatorios implementado mediante congruencia lineal

Publicado por adrian (4 intervenciones) el 18/09/2008 20:35:53
Pues si creo que tienes razon, pues me gustaria que me echaras una mano en esa parte en la del tiempo ya que el codigo para generar numeros aleatorios casi lo tengo hecho lo que pasa que a ultima hora a mi profesor no le a gustado la sencillez y me lo a puesto un poco mas crudo.

Muchas gracias, saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

generador de numeros aleatorios implementado mediante congruencia lineal

Publicado por AntonioG (28 intervenciones) el 18/09/2008 22:57:25
Hola,

Pues ahi ya estan las funciones que debes usar (time y la otra que te convierte a horas, minutos, segundos...)

O dime, de manera mas especifica, que necesitas respecto a esa funcion de tiempo?

Saludos
P.D. Escogiste bien los valores para el congruencial lineal? porque si no luego salen muy mal los numeros aleatorios (con periodo muy corto y demas). Es mas, en C hay una funcion que genera numeros aleatorios con congruencial lineal, puedes usar los mismo parametros que dicho generador, es la funcion rand() de la libreria stdlib.h.

No encontre en la red cual es la definicion exacta de esa funcion, peor encontre una que tal vez sirva:
1
2
3
4
5
6
7
8
9
10
11
12
static unsigned long int next = 1; //esta variable es la que va llevando la secuencia de numeros aletarios
 
int rand( void ) /* RAND_MAX assumed to be 32767 */
{//esta funcion genera el siguiente numero aleatorio con un generador conguencial lineal
   next = next * 1103515245 + 12345;
   return (unsigned int) (next/65536) % 32768;
}
 
void srand( unsigned int seed )
{//esta es para inicializar el generador
   next = seed;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

generador de numeros aleatorios implementado mediante congruencia lineal

Publicado por adrian (4 intervenciones) el 19/09/2008 15:05:27
Mira lo que tengo por ahora es esto.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <iostream>
using namespace std;
#include <ctime>
 
int main() {  // =================
   time_t t1 = 0;
   time_t* pt1 = &t1;
   time(pt1);
   time_t t2 = time(NULL);
 
 
   int i, n=6, a=17, c=43, m=100, x=t2;
   char r ;
   int opcion , salir=1;
  printf("**********************************************
");
  printf("***** GENERACION DE SECUENCIAS ALEATORIAS ****
");
  printf("**********************************************
");
 
  while(salir>0) // un mientras para poder repetir la generacion
 
     {
      printf ( "
Escoja una opcion:
   1. Ejecutar programa
   2. Exit
 " );
      scanf ( "%d", &opcion );
 
 
/* A partir de aqui se empieza a analizar cada una de las opciones que se pueden elegir*/
   switch ( opcion )
   {
	   case 1:
	//	{
     //printf("
Introduzca el numero de elementos aleatorios que desea generar: ");
     //scanf("%i",&n);
     //}
     //while(n<=0)
     //{
    //    printf("[Debe introducir un numero positivo]");
       // scanf("%i",&n);
     //}
     //printf("
Introduzca el numero x: ");
    // scanf("%i",&x);
     //while(x<0)
     //{
        //printf("[Debe introducir un numero positivo]");
        //scanf("%i",&x);
     //}
     printf("
 
 La sencuencia de numeros generados es:");
     for (i=0;i<n;i++)
     {
        x=((a * x) + c)%m;
        printf(" %i",x );
        }
        printf("
");
	     break;
	   case 2:
		salir = 0;
	     break;
	     /* En caso de que el usuario elija una opcion no valida
el programa le hara volver a elegir otro valor para que funcione.
*/
	   default:
               printf("
");
		   printf ("
 Escoja una opcion valida
");
   }
}
  //system("PAUSE");
  //return 0;
}
El problema es que no se si en la X se esta cargando el T2(que serian los segundos al ejecutar el programa) y por que m genera una serie de 10 y empeizan luego los mismos numeros, seguro k hay muchas cosas mal pero si me puedes ayudar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

generador de numeros aleatorios implementado mediante congruencia lineal

Publicado por adrian (4 intervenciones) el 19/09/2008 15:07:52
y Mira he encontrado esto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
 
#include <stdio.h>
#include <time.h>
{
  time_t rawtime;
  struct tm * timeinfo;
  char buffer [80];
 
  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
 
  strftime (buffer,80,"%S",timeinfo);
  puts (buffer);
 
 
  system("PAUSE");
}

coje los segundos de cada minuto vale ke solo tendria un rango de 0 a 59 pero mejor k tener segundos desde 1970 jej, el probelma estaria en que nose como cargar esos segundos a una variable .gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar