Variables aléatoires

Salut à tous

J'ai trois variables doubles que je veux choisir aléatoirement mais compris entre un minimum>0 et un maximum qui sont pour chacune de ces variables différents.

Aidez moi s'il vous plait

8 réponses

  1. Salut,

    Je comprend pas bien la question, mais tu veux faire un random borné avec un min et un max ?
    Si oui, c'est ça que tu veux ?:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    
    double my_rand(double min, double max) {
      return min + ((double)rand() / ((double)RAND_MAX / (max - min)));
    }
    
    int main(int argc, char** args) {
      int i = 0;
      srand(time(NULL));
    
      for(i = 0; i < 20; i++)
        printf("%lf\n", my_rand(8.f, 50.f));
    
      return 0;
    }
    


    1. Contributeur
      Pour info, pas besoin de caster tout caster en double. Seul le cast de rand() suffit.
      Sinon ce n'est pas rand()/RAND_MAX/(max-min)...
      Il faut multiplier plutôt par max-min. Voir même max-min+1.
      Et il faut rajouter min aussi.

      printf("%lf\n", my_rand(8.f, 50.f));
      Ce n'est pas %lf qu'il faut mettre mais %f.
      Ce n'est pas 8.f ou 50.f qu'il faut mettre mais 8.0 et 50.0. Ou simplement 8. et 50..

      Cdlt,
    2. Contributeur
      umpfff, printf float=%f
      printf double=%lf

      Faut revoir ses bases en C !
      print(), comme toutes les fonctions à nombre variable d'arguments réalise une promotion automatique de certains types. Par exemple les float sont convertis en double.
      De fait, dans le printf, le %f sert au double (pas besoin de %lf).
    3. Contributeur
      salut, sur ces questions de spécificateurs et de sous-spécificateurs de taille, je trouve que ce tableau présent sur cette page est très utile : http://www.cplusplus.com/reference/cstdio/printf/ (celui à la suite de "The length sub-specifier modifies the length of the data type. This is a chart showing the types used to interpret the corresponding arguments with and without length specifier (if a different type is used, the proper type promotion or conversion is performed, if allowed)")

      en prime, il indique avec un code de couleur les sous-spécificateurs de taille introduits par C99 :-)

      Dal
  2. oui, par exemple une de mes variable s'appelle DiffTemps et la valeur aléatoire doit être comprise entre 5.56 et 27.25.
    1. Salut,

      Donc normalement la fonction "my_rand" devrait faire l'affaire.

      my_rand(5.56, 27.25);
      

      1. Je ne la connaissais pas...
        OK merci je vais essayer
        1. Excuse moi est ce que tu peux m'expliquer cette partie?

          nt main(int argc, char** args)
          {
          int i = 0;
          srand(time(NULL));

          for(i = 0; i < 20; i++)
          printf("%lf\n", my_rand(8.f, 50.f));
          1. Salut,

            "my_rand" c'est la fonction que je t'ai faite lors de mon premier poste :)
            soit:
            double my_rand(double min, double max) {
              return min + ((double)rand() / ((double)RAND_MAX / (max - min)));
            }
            


            le main n'est là que pour l'exemple...
            int main(int argc, char** args) {
              int i = 0; // variable pour la boucle for
              srand(time(NULL)); // initialisation de rand (obligatoire)
            
              for(i = 0; i < 20; i++) // boucle 20x pour afficher le resultat de la fonction my_rand
                printf("%lf\n", my_rand(8.f, 50.f)); // affiche un rand min=8.0 et max=50.0
              
              return 0;
            }
            

            1. Merci mais comment je précise que cette valeur qu'il va me donner est pour la variable DiffTemps car il y a deux autres variables pour lesquelles je vais utiliser la même structure pour avoir également des nombre aléatoire mais avec des extremums différents?

              Je dois être chiant non...
              1. Je ne suis pas très doué en programmation donc est ce que quelqu'un peut me dire pourquoi l'algorithme suivant ne fonctionne pas?????

                #define Min1 5,56
                #define Max1 27,25

                #define Min2 500,0
                #define Max2 4500,0

                #define Min3 36,0
                #define Max3 1151,08

                double my_rand(Min1, Max1)
                {
                return Min1+(Max1-Min1)*((double)rand())/((double)RAND_MAX);
                }
                i = 0;
                srand(time(NULL));

                for(i = 0; i < 20; i++)
                printf("%lf\n", my_rand(Min1.f, Max1.f));

                double my_rand(Min2, Max2)
                {
                return Min2+(Max2-Min2)*((double)rand())/((double)RAND_MAX);
                }
                i = 0;
                srand(time(NULL));

                for(i = 0; i < 20; i++)
                printf("%lf\n", my_rand(Min2.f, Max2.f));

                double my_rand(Min3, Max3)
                {
                return Min3+(Max3-Min3)*((double)rand())/((double)RAND_MAX);
                }
                i = 0;
                srand(time(NULL));

                for(i = 0; i < 20; i++)
                printf("%lf\n", my_rand(Min3.f, Max3.f));

                Sachant que j'ai trois variables doubles que je veux choisir aléatoirement mais compris entre un minimum>0 et un maximum qui sont pour chacune de ces variables différents.

                Apparemment il y a un probleme avec les double, my_rand, f et Max3...

                Cordialement
                1. Contributeur
                  Bonjour,

                  Déjà, enlève tous les #define.

                  return Min1+(Max1-Min1)*((double)rand())/((double)RAND_MAX);
                  Mets plutôt : return Min1+(double)rand() / RAND_MAX * (Max1-Min+1);

                  Tu as oublié le main(). Du coup, pleins d'instruction sont hors fonction...

                  printf("%lf\n", my_rand(Min2.f, Max2.f));
                  Ce n'est pas %lf, mais %f qu'il faut utiliser. Ensuite, les arguments sont pas bons :
                  my_rand(2.0, 5.0); par exemple pour appeler la fonction my_rand().
                2. Aïe ça pique,

                  Si on reprend avec tes defines:
                  #include <stdlib.h>
                  #include <stdio.h>
                  #include <time.h>
                  
                  #define Min1 5.56
                  #define Max1 27.25
                  
                  #define Min2 500
                  #define Max2 4500
                  
                  #define Min3 36
                  #define Max3 1151.08
                  
                  double my_rand(double min, double max) {
                    return min+(max-min)*((double)rand())/((double)RAND_MAX);
                  }
                  
                  int main(int argc, char** argv) {
                    srand(time(NULL));
                  
                    double var1 = my_rand(Min1, Max1);
                    double var2 = my_rand(Min2, Max2);
                    double var3 = my_rand(Min3, Max3);
                  
                  
                    // utilisation de var1, var2, var3
                  
                    return 0;
                  
                  }