Algoritmo Congruencial aditivo

Aqui se da una breve explicacion de como se desarrollo el algoritmo y además un ejemplo

ANÁLISIS Y RESULTADOS DEL ALGORITMO CONGRUENCIAL ADITIVO
INTRODUCCION
 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….
OBJETIVOS
 Generar números aleatorios.
 Determinar cuales podrían ser sus ventajas
 Identificar variables que intervienen para le desarrollo de este algoritmo

PASOS QUE INTERVIENEN EN EL ANÁLISIS Y RESULTADO QUE GENERA EL ALGORITMO

ALGORITMO CONGRUENCIAL ADITIVO
El programa inicio con una pantalla igual a esta.
 El usuario puede presionar cualquier tecla para continuar, caso contrario al presionar entre se cerrará el programa.
 La pantalla que continúa es esta.

Para iniciar con el análisis se debe considerar algunas variables que se necesitan al inicio.
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;
2. Cuantos números aleatorios me interesa sacar.

printf(”NUMEROS ALEATORIOS N = “);
scanf(”%d”,&N_pseudoAleat);
3. Cuantos números tengo en mi secuencia de números iniciales

printf(”SECUENCIA DE NUMEROS INICIALES n = “);
scanf(”%d”,&n_secueIniciales);

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.
5. El divisor que me permitirá sacar el residuo.

printf(”DIVISOR m = “);
scanf(”%d”,&divisor_M);
Al seguir todos estos pasos se tiene hasta el momento una pantalla igual a esta.
 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;

 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++;
}
La pantalla final de los resultados es la siguiente.
 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');
 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();

Leave a Reply