vacendak icon

Generador de números aleatorios

vacendak | PRO | 07/25/18 08:38:31 AM UTC | 0 ⭐ | 349 👁️ | Never ⏰ | []
C |

3.8 KB

|

None

|

0 👍

/

0 👎

#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