#include <stdio.h> /* Incluímos las librerías */
#include <stdlib.h> /* que necesitamos */
#include <time.h> /* para el funcionamiento */
#include <locale.h> /* del programa. */
#include <math.h>
#define T 100 // Rango del vector que almacena las frecuencias.
int main(int argc, char *argv[]) // Función principal del programa.
{
setlocale(LC_CTYPE, "spanish"); // Función para el uso de caracteres españoles.
int a, b, c, i, N, n; // Declaración de variables.
float r;
int suma[T]; // Vector que almacena las frecuencias.
double desv=0.0, media=0.0; // Desviación de la media.
double desvi=0.0, s=0.0; // Cuadrado de las desviaciones.
printf("\n\t\t ### GENERADOR DE NÚMEROS ALEATORIOS ENTEROS ###\n"); /************************************/
printf("\n\t\t ¿Cuántos números quieres generar? "); /* Funciones para presentar */
scanf(" %i", &N); /* por pantalla los mensajes */
/* para pedir la entrada */
printf("\n\t\t Inroduce el intervalo, [a,b], donde quieres los números: \n"); /* de los datos necesarios, */
printf("\n\t\t a = "); /* y funciones para guardarlos en */
scanf(" %i", &a); /* las variables que los */
printf("\t\t b = "); /* van a almacenar. */
scanf(" %i", &b); /************************************/
while (b<=a) // Bucle que comprueba si los datos de intervalo introducidos son válidos.
{
printf("\n\t\t Ese valor no es válido, b tiene que ser mayor que a.\n");
printf("\n\t\t Vuelve a introducir b: ");
scanf(" %i", &b);
}
printf("\n");
FILE* frec; // Fichero que guarda las frecuencias.
frec=fopen("frecuencias.dat", "w");
if (frec == NULL)
{
printf("No se ha podido abrir 'frecuencias.dat' para escritura. Saliendo...\n");
exit(1);
}
c = b - a; // Cálculo de la anchura del intervalo.
for(i=0;i<c+1;i++) // Inicialización del vector que guarda las frecuencias.
{
suma[i]=0;
}
srand(time(0)); // Función que asigna como semilla el reloj de la CPU.
for(i=1;i<N+1;i++) // Bucle para generar los N números aleatorios pedidos.
{
r = (double)rand()/(RAND_MAX+1.0); // Generación de un número aleatorio entre 0 y 1.
n = r*(c+1)+a; // Expresión que sitúa al número anterior dentro del intervalo.
suma[n-a]+=1; // Conteo y almacenamiento de las salidas de cada número.
//printf("\t\t El %4iº número entero aleatorio en el intervalo [%i,%i] es: %4i\n", i, a, b, n);
}
media=N/(c+1.0);
for(i=0;i<=c;i++) // Bucle para transcribir los valores del vector de frecuencias al archivo de salida.
{
desv=((suma[i]-media)/media)*100.0;
fprintf(frec, " %2i\t%10i\t%7.3lf %c\n", a+i, suma[i], desv, '%');
}
fclose(frec);
for(i=0;i<=c;i++) // Cálculo de la Desviación Estándar.
{
desvi+=(suma[i]-media)*(suma[i]-media);
}
s=sqrt(desvi/N);
printf("\n\t\t ### FIN ### Desviación Estándar: %5.3lf\n", s);
printf("\n");
return 0;
}
Comments