/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        L A N C E R   D E   D E U X   D E S  :                                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xtc/DeuxDes.01$c' :                                                                                            */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20231024122249).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#include  "INCLUDES.01.I"

extern    double    drand48();
extern    double    sqrt();

#define   MINIMUM                                                                                                                       \
                    (1)
#define   MAXIMUM                                                                                                                       \
                    (6)
                                        /* Definition d'un de a six faces.                                                           */

#define   F(n)                                                                                                                          \
                    ((2*((n)-1))+1)
#define   G(n)                                                                                                                          \
                    ((n)/2)
#define   N                                                                                                                             \
                    ((MAXIMUM)+1)

#define   RANDOM(minimum,maximum)                                                                                                       \
                    MIN2(MAX2((int)(minimum + (maximum*drand48())),MINIMUM),MAXIMUM)                                                    \
                                        /* Generation d'une valeur aleatoire dans [minimum,maximum].                                 */

#define   N_TIRAGES                                                                                                                     \
                    200000

#define   FACTEUR                                                                                                                       \
                    (0.0002*(2000000/(N_TIRAGES)))

main()
          {
          int       n;

          int       aleatoires[N_TIRAGES];

          int       occurence_1[N];
          int       occurence_2[F(N)];

          int       check=0;

          double    ValeurMoyenne_1=0;
          double    Variance______1=0;

          double    ValeurMoyenne_2=0;
          double    Variance______2=0;

          for       (n=0 ; n < N ; n++)
                    {
                    occurence_1[n] = 0;
                                        /* Initialisation des compteurs d'occurences...                                              */
                    }

          for       (n=0 ; n < F(N) ; n++)
                    {
                    occurence_2[n] = 0;
                                        /* Initialisation des compteurs d'occurences...                                              */
                    }

          for       (n=0 ; n < N_TIRAGES ; n++)
                    {
                    aleatoires[n]=RANDOM(MINIMUM,MAXIMUM);
                                        /* Generation des valeurs aleatoires...                                                      */

                    if        ((aleatoires[n] < MINIMUM) || (aleatoires[n] > MAXIMUM))
                              {
                              printf("Un nombre aleatoire n'est pas dans [%d,%d].\n",MINIMUM,MAXIMUM);
                              }
                    else
                              {
                              }
                    }

          for       (n=0 ; n < N_TIRAGES ; n++)
                    {
                    ValeurMoyenne_1 = ValeurMoyenne_1+(double)aleatoires[n];
                                        /* Calcul de la valeur moyenne des valeurs aleatoires...                                     */
                    }

          ValeurMoyenne_1 = ValeurMoyenne_1/(double)N_TIRAGES;

          for       (n=0 ; n < N_TIRAGES ; n++)
                    {
                    Variance______1 = Variance______1+pow(((double)aleatoires[n])-ValeurMoyenne_1,2);
                                        /* Calcul de la variance des valeurs aleatoires...                                           */
                    }

          Variance______1 = Variance______1/(double)N_TIRAGES;

          n=0;

          while     (n < N_TIRAGES)
                    {
                    int       random_1=aleatoires[n++];
                    int       random_2=aleatoires[n++];
                    int       random_12=random_1+random_2;

                    ValeurMoyenne_2 = ValeurMoyenne_2+(double)(random_12);
                                        /* Calcul de la valeur moyenne des couples de valeurs aleatoires...                          */
                    }

          ValeurMoyenne_2 = ValeurMoyenne_2/(double)G(N_TIRAGES);

          n=0;

          while     (n < N_TIRAGES)
                    {
                    int       random_1=aleatoires[n++];
                    int       random_2=aleatoires[n++];
                    int       random_12=random_1+random_2;

                    Variance______2 = Variance______2+pow((double)(random_12)-ValeurMoyenne_2,2);
                                        /* Calcul de la variance des couples de valeurs aleatoires...                                */
                    }

          Variance______2 = Variance______2/(double)G(N_TIRAGES);

          n=0;

          while     (n < N_TIRAGES)
                                        /* Validations diverses :                                                                    */
                    {
                    int       random_1=aleatoires[n++];
                    int       random_2=aleatoires[n++];
                    int       random_12=random_1+random_2;

                    occurence_1[random_1]++;
                    occurence_1[random_2]++;

                    occurence_2[random_12]++;

                    check = check++;
                    check = check++;

                    if        ((random_12 < (MINIMUM+MINIMUM)) || (random_12 > (MAXIMUM+MAXIMUM)))
                              {
                              printf("Un couple aleatoire n'est pas dans [%d,%d].\n",MINIMUM+MINIMUM,MAXIMUM+MAXIMUM);
                              }
                    else
                              {
                              }
                    }

          if        (check != N_TIRAGES)
                    {
                    printf("Erreur de comptage des occurences (%d # %d).\n",check,N_TIRAGES);
                    }
          else
                    {
                    }

          for       (n=0 ; n < N ; n++)
                    {
                    int       ValeurCourante=occurence_1[n];

                    if        (ValeurCourante > 0)
                              {
                              printf("Tirage 1 : %d --> %d=%f\n",n,ValeurCourante,(double)ValeurCourante/(double)N_TIRAGES);
                                        /* Edition des occurences des valeurs aleatoires...                                          */
                              }
                    else
                              {
                              }
                    }

          printf("\n");

          for       (n=0 ; n < F(N) ; n++)
                    {
                    int       ValeurCourante=occurence_2[n];

                    if        (ValeurCourante > 0)
                              {
                              printf("Tirage 2 : %d --> %d=%f\n",n,ValeurCourante,(double)ValeurCourante/(double)G(N_TIRAGES));
                                        /* Edition des occurences des couples de valeurs aleatoires...                               */
                              }
                    else
                              {
                              }
                    }

          printf("\n");

          for       (n=0 ; n < F(N) ; n++)
                    {
                    double    ValeurCourante=(double)occurence_2[n];

                    if        (ValeurCourante > 0)
                              {
                              int       k;

                              printf("Tirage 2 : ");

                              for       (k=1 ; k <= (int)(FACTEUR*ValeurCourante) ; k++)
                                        {
                                        printf("*");
                                        /* Edition de la distribution des couples de valeurs aleatoires...                           */
                                        }

                              printf("\n");
                              }
                    else
                              {
                              }
                    }

          printf("\n");

          printf("ValeurMoyenne 1=%f\n",ValeurMoyenne_1);
          printf("Variance 1.....=%f\n",Variance______1);
          printf("Sigma 1........=%f\n",sqrt(Variance______1));

          printf("\n");

          printf("ValeurMoyenne 2=%f\n",ValeurMoyenne_2);
          printf("Variance 2.....=%f\n",Variance______2);
          printf("Sigma 2........=%f\n",sqrt(Variance______2));

          printf("\n");
          }



Copyright © Jean-François COLONNA, 2023-2023.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2023-2023.