Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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;
- }
Advertisement
Add Comment
Please, Sign In to add comment