vacendak

Generador de números aleatorios

Jul 25th, 2018
393
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.80 KB | None | 0 0
  1. #include <stdio.h>                      /*      Incluímos las librerías     */
  2. #include <stdlib.h>                     /*      que necesitamos             */
  3. #include <time.h>                       /*      para el funcionamiento      */
  4. #include <locale.h>                     /*      del programa.               */
  5. #include <math.h>
  6.  
  7. #define T 100       //  Rango del vector que almacena las frecuencias.
  8.  
  9. int main(int argc, char *argv[])         //  Función principal del programa.
  10. {
  11.     setlocale(LC_CTYPE, "spanish");     //  Función para el uso de caracteres españoles.
  12.     int a, b, c, i, N, n;               //  Declaración de variables.
  13.     float r;
  14.     int suma[T];        //  Vector que almacena las frecuencias.
  15.     double desv=0.0, media=0.0;        //  Desviación de la media.
  16.     double desvi=0.0, s=0.0;       //  Cuadrado de las desviaciones.
  17.  
  18.     printf("\n\t\t  ### GENERADOR DE NÚMEROS ALEATORIOS ENTEROS ###\n");            /************************************/
  19.     printf("\n\t\t  ¿Cuántos números quieres generar?  ");                          /*  Funciones para presentar        */
  20.     scanf(" %i", &N);                                                               /*  por pantalla los mensajes       */
  21.                                                                                     /*  para pedir la entrada           */
  22.     printf("\n\t\t Inroduce el intervalo, [a,b], donde quieres los números: \n");   /*  de los datos necesarios,        */
  23.     printf("\n\t\t a = ");                                                          /*  y funciones para guardarlos en  */
  24.     scanf(" %i", &a);                                                               /*  las variables que los           */
  25.     printf("\t\t b = ");                                                            /*  van a almacenar.                */
  26.     scanf(" %i", &b);                                                               /************************************/
  27.  
  28.     while (b<=a)           // Bucle que comprueba si los datos de intervalo introducidos son válidos.
  29.     {
  30.         printf("\n\t\t Ese valor no es válido, b tiene que ser mayor que a.\n");
  31.         printf("\n\t\t Vuelve a introducir b: ");
  32.         scanf(" %i", &b);
  33.     }
  34.     printf("\n");
  35.  
  36.     FILE* frec;         //  Fichero que guarda las frecuencias.
  37.     frec=fopen("frecuencias.dat", "w");
  38.     if (frec == NULL)
  39.     {
  40.         printf("No se ha podido abrir 'frecuencias.dat' para escritura. Saliendo...\n");
  41.         exit(1);
  42.     }
  43.     c = b - a;              //  Cálculo de la anchura del intervalo.
  44.     for(i=0;i<c+1;i++)      //  Inicialización del vector que guarda las frecuencias.
  45.     {
  46.         suma[i]=0;
  47.     }
  48.     srand(time(0));         // Función que asigna como semilla el reloj de la CPU.
  49.     for(i=1;i<N+1;i++)      // Bucle para generar los N números aleatorios pedidos.
  50.     {
  51.         r = (double)rand()/(RAND_MAX+1.0);  // Generación de un número aleatorio entre 0 y 1.
  52.         n = r*(c+1)+a;                      // Expresión que sitúa al número anterior dentro del intervalo.
  53.  
  54.         suma[n-a]+=1;   //  Conteo y almacenamiento de las salidas de cada número.
  55.         //printf("\t\t El %4iº número entero aleatorio en el intervalo [%i,%i] es: %4i\n", i, a, b, n);
  56.     }
  57.     media=N/(c+1.0);
  58.  
  59.     for(i=0;i<=c;i++)   //  Bucle para transcribir los valores del vector de frecuencias al archivo de salida.
  60.     {
  61.         desv=((suma[i]-media)/media)*100.0;
  62.         fprintf(frec, " %2i\t%10i\t%7.3lf %c\n", a+i, suma[i], desv, '%');
  63.     }
  64.     fclose(frec);
  65.  
  66.     for(i=0;i<=c;i++)   //  Cálculo de la Desviación Estándar.
  67.     {
  68.         desvi+=(suma[i]-media)*(suma[i]-media);
  69.     }
  70.     s=sqrt(desvi/N);
  71.  
  72.     printf("\n\t\t ### FIN ###  Desviación Estándar: %5.3lf\n", s);
  73.     printf("\n");
  74.  
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment