algoritmo congruencial aditivo
DESCRIPTION
Analisis del algoritmo congruencial aditivoTRANSCRIPT
Escuela de Ciencias de la Escuela de Ciencias de la ComputaciónComputación
SIMULACIÓN DE SISTEMAS
Profesor: Ing. María del Carmen CabreraRealizado por:
o Edwin Fabián Mazao Mayra Montalván
ANÁLISIS Y RESULTADOS DEL
ALGORITMO CONGRUENCIAL
ADITIVO
11/05/2008 2SIMULACIÓN DE SISTEMAS
INTRODUCCIONINTRODUCCION
Este algoritmo requiere una secuencia previa de n números enteros x1, x2….xn, para generar una nueva secuencia de números enteros que empieza en xn+1….
11/05/2008 3SIMULACIÓN DE SISTEMAS
OBJETIVOSOBJETIVOS
Generar números aleatorios.Determinar cuales podrían ser sus
ventajasIdentificar variables que intervienen para
le desarrollo de este algoritmo
11/05/2008 4SIMULACIÓN DE SISTEMAS
PASOS QUE INTERVIENEN
EN EL ANÁLISIS Y
RESULTADO QUE GENERA EL
ALGORITMO
11/05/2008 5SIMULACIÓN DE SISTEMAS
ALGORITMO CONGRUENCIAL ALGORITMO CONGRUENCIAL ADITIVOADITIVO
El programa inicio con una pantalla igual a esta.
11/05/2008 6SIMULACIÓN DE SISTEMAS
ALGORITMO CONGRUENCIAL ALGORITMO CONGRUENCIAL ADITIVOADITIVO
El usuario puede presionar cualquier tecla para continuar, caso contrario al presionar entre se cerrará el programa.
La pantalla que continúa es esta.
11/05/2008 7SIMULACIÓN DE SISTEMAS
ALGORITMO CONGRUENCIAL ALGORITMO CONGRUENCIAL ADITIVOADITIVO
11/05/2008 8SIMULACIÓN DE SISTEMAS
ALGORITMO CONGRUENCIAL ALGORITMO CONGRUENCIAL ADITIVOADITIVO
1. Declaramos variables que son arreglos para el conjunto de valores xi y ri
intSecuencia_Inicial[n_secueIniciales+N_pseudoAleat];
float ri_PseudoAleatorios[N_pseudoAleat];float ri = 0;
Para iniciar con el análisis se debe considerar algunas variables que se necesitan al inicio.
11/05/2008 9SIMULACIÓN DE SISTEMAS
ALGORITMO CONGRUENCIAL ALGORITMO CONGRUENCIAL ADITIVOADITIVO
2. Cuantos números aleatorios me interesa sacar.
printf("NUMEROS ALEATORIOS N = ");scanf("%d",&N_pseudoAleat);
11/05/2008 10SIMULACIÓN DE SISTEMAS
ALGORITMO CONGRUENCIAL ALGORITMO CONGRUENCIAL ADITIVOADITIVO
3. Cuantos números tengo en mi secuencia de números iniciales
printf("SECUENCIA DE NUMEROS INICIALES n = ");
scanf("%d",&n_secueIniciales);
11/05/2008 11SIMULACIÓN DE SISTEMAS
ALGORITMO CONGRUENCIAL ALGORITMO CONGRUENCIAL ADITIVOADITIVO
4. El conjunto de números iniciales que será ingresado por el usuario.
printf("INGRESAR LA SECUENCIA DE NUMEROS INICIALES\n");
for(int h=0; h<n_secueIniciales;h++){ printf("\tr[%d] = ",h); scanf("%d",&Secuencia_Inicial[h]);}Se debe considerar que este conjunto debe ser de 2 o más
números.
11/05/2008 12SIMULACIÓN DE SISTEMAS
ALGORITMO CONGRUENCIAL ALGORITMO CONGRUENCIAL ADITIVOADITIVO
5. El divisor que me permitirá sacar el residuo.
printf("DIVISOR m = ");scanf("%d",&divisor_M);
11/05/2008 13SIMULACIÓN DE SISTEMAS
ALGORITMO CONGRUENCIAL ALGORITMO CONGRUENCIAL ADITIVOADITIVO
Al seguir todos estos pasos se tiene hasta el momento una pantalla igual a esta.
11/05/2008 14SIMULACIÓN DE SISTEMAS
ALGORITMO CONGRUENCIAL ALGORITMO CONGRUENCIAL ADITIVOADITIVO
Una vez teniendo esta información se procede a aplicar el cálculo con la ecuación que se tiene.
En una variable guardaré el número total
del conjunto inicial o secuencia de números iniciales
i = n_secueIniciales;
11/05/2008 15SIMULACIÓN DE SISTEMAS
ALGORITMO CONGRUENCIAL ALGORITMO CONGRUENCIAL ADITIVOADITIVO
En un ciclo repetitivo realizaré el cálculo.
Como tengo el conjunto inicial de números en un arreglo, podré recorrerlo y accediendo a los valores como la ecuación lo indica, únicamente manipulando la posición o índice del arreglo.
Una vez calculado el primer valor lo procedo a guardar en el mismo arreglo pero que estará a continuación de los que existen al inicio.
11/05/2008 16SIMULACIÓN DE SISTEMAS
ALGORITMO CONGRUENCIAL ALGORITMO CONGRUENCIAL ADITIVOADITIVO
En este momento también calculo el valor de ri que será guardado en un arreglo con punto flotante, es decir de tipo float.
for(int k = 0; k < N_pseudoAleat; k++) { xi = (Secuencia_Inicial[i - 1] + Secuencia_Inicial[i
-n_secueIniciales]) % divisor_M; ri = (float)xi/(float)(divisor_M-1); ri_PseudoAleatorios[k] = ri; Secuencia_Inicial[i] = xi; i++; }
11/05/2008 17SIMULACIÓN DE SISTEMAS
ALGORITMO CONGRUENCIAL ALGORITMO CONGRUENCIAL ADITIVOADITIVO
Una vez recorrido hasta la cantidad de números aleatorios que me interesa sacar, se ha terminado.
Para mostrar los resultados es sencillo.
Como tengo dos arreglos en uno que se encuentran los valores xi y el otro que se encuentran los valores ri, únicamente con un ciclo repetitivo procedo a recorrer y mostrarlos en pantalla.
11/05/2008 18SIMULACIÓN DE SISTEMAS
ALGORITMO CONGRUENCIAL ALGORITMO CONGRUENCIAL ADITIVOADITIVO
Se debe tomar en cuenta que el arreglo xi comenzare desde la ultima posición de los números iniciales, mientras que el arreglo ri si puedo comenzar desde el inicio.
Por lo tanto he terminado de resolver este algoritmo. int contador_ri = 0; aux_i = n_secueIniciales; for(int h=n_secueIniciales;h<i;h++) { printf("\tXi = (%d + %d) mod %d = %d\t\tri = %d/(%d - 1) = %f\n", Secuencia_Inicial[aux_i - 1],Secuencia_Inicial[aux_i -
n_secueIniciales],divisor_M,
Secuencia_Inicial[h],Secuencia_Inicial[h],divisor_M,ri_PseudoAleatorios[contador_ri]);
contador_ri++; aux_i++; }
11/05/2008 19SIMULACIÓN DE SISTEMAS
ALGORITMO CONGRUENCIAL ALGORITMO CONGRUENCIAL ADITIVOADITIVO
La pantalla final de los resultados es la siguiente.
11/05/2008 20SIMULACIÓN DE SISTEMAS
ALGORITMO CONGRUENCIAL ALGORITMO CONGRUENCIAL ADITIVOADITIVO
El programa permite volver a generar si es que el usuario lo desea.
printf("¨DESEA VOLVER A GENERAR[S/N]=>> ");do{
opc=toupper(getch());}while(opc!='S' && opc!='N');
11/05/2008 21SIMULACIÓN DE SISTEMAS
ALGORITMO CONGRUENCIAL ALGORITMO CONGRUENCIAL ADITIVOADITIVO
Una vez que el usuario determine que ya no desea generar mas números aleatorios se mostrará la pantalla inicial y se cierra el programa.
PantallaInicio();
11/05/2008 22SIMULACIÓN DE SISTEMAS
SIMULACIÓN DE SISTEMASSIMULACIÓN DE SISTEMAS
GRACIAS……………..
ALGORITMO CONGRUENCIAL ADITIVO
11/05/2008 23SIMULACIÓN DE SISTEMAS