IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

rand () et les double


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de Glauben
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 115
    Par défaut rand () et les double
    Bonjour,
    1. J'ai un petit programme pour tester rand() avec des nombres double
    pour utiliser la fonction dans un autre programme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #include <iostream>
    #include <time.h>
    using namespace std;
    // Déclaration des variables
    int i =0;
    double Valeur ;
    // Une fonction pour générer des nombres alétoires
    double NombreAleatoire (double Valeur)
    {
      srand (time(0));
      int Val = rand()%(int) Valeur ;
      return ((double) Val);      
    }
    int main () 
    {
      cout << "Donner un nombre :: ";
      cin >> Valeur ; 
      while (i<5)
      {
        cout<<"Le nombre numero "<< i++ <<" est : " <<NombreAleatoire(Valeur)<<endl;      
      }
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    2. Mes problèmes

    Je ne peux pas utiliser la fonction rand() avec des double, il faut caster vers un interger puis recaster vers un double et dans l'autre programme j'ai des grand nombre c'est pour ça j'utilise des double.
    Comment faire pour utiliser rand() avec des double ?

    La fonction NombreAleatoire() génére un seul nombre aléatoire. Est-il possible que chaque fois la fonction génére un nombre aléatoire c-à-d 5 nombres différents ?




    Merci.

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 133
    Par défaut
    srand (time(0));

    doit être appelé une seule fois au début du programme
    c'est pour initialiser la graine

    comme tu fais des appels dans la même milliseconde, tu auras la même graine et donc le même nombre "aléatoire"

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 133
    Par défaut
    sinon pour les double essaie voir quelque chose comme ça si ça convient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    #include <iostream>
    #include <time.h>
    using namespace std;
    // Déclaration des variables
    int i =0;
    double Valeur ;
    // Une fonction pour générer des nombres alétoires
    double NombreAleatoire (double Valeur)
    {
      return Valeur*(rand()/(double)RAND_MAX);
    }
    int main () 
    {
      srand (time(0));
      cout << "Donner un nombre :: ";
      cin >> Valeur ; 
      while (i<5)
      {
        cout<<"Le nombre numero "<< i++ <<" est : " <<NombreAleatoire(Valeur)<<endl;      
      }
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    rand() génère un nombre entier entre 0 et RAND_MAX
    rand()/(double)RAND_MAX génère donc un nombre entre 0 et 1
    plus qu'à multiplier par Valeur pour avoir entre 0 et Valeur


    EDIT :

    juste pour préciser que rand() génère un nombre entre 0 et RAND_MAX, tu auras donc RAND_MAX valeurs possibles pour ta fonction.

    donc tout dépend de la valeur de RAND_MAX il va peut-être falloir adapter tout ça selon le nombre de valeurs possible que tu souhaites pouvoir obtenir avec ta fonction.

  4. #4
    Membre très actif Avatar de Glauben
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 115
    Par défaut
    Citation Envoyé par Michel_57 Voir le message
    sinon pour les double essaie voir quelque chose comme ça si ça convient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    #include <iostream>
    #include <time.h>
    using namespace std;
    // Déclaration des variables
    int i =0;
    double Valeur ;
    // Une fonction pour générer des nombres alétoires
    double NombreAleatoire (double Valeur)
    {
      return Valeur*(rand()/(double)RAND_MAX);
    }
    int main () 
    {
      srand (time(0));
      cout << "Donner un nombre :: ";
      cin >> Valeur ; 
      while (i<5)
      {
        cout<<"Le nombre numero "<< i++ <<" est : " <<NombreAleatoire(Valeur)<<endl;      
      }
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    rand() génère un nombre entier entre 0 et RAND_MAX
    rand()/(double)RAND_MAX génère donc un nombre entre 0 et 1
    plus qu'à multiplier par Valeur pour avoir entre 0 et Valeur


    EDIT :

    juste pour préciser que rand() génère un nombre entre 0 et RAND_MAX, tu auras donc RAND_MAX valeurs possibles pour ta fonction.

    donc tout dépend de la valeur de RAND_MAX il va peut-être falloir adapter tout ça selon le nombre de valeurs possible que tu souhaites pouvoir obtenir avec ta fonction.
    Merci pour l'explication
    Bon courage

  5. #5
    Membre très actif Avatar de Glauben
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 115
    Par défaut
    Citation Envoyé par Michel_57 Voir le message
    srand (time(0));

    doit être appelé une seule fois au début du programme
    c'est pour initialiser la graine

    comme tu fais des appels dans la même milliseconde, tu auras la même graine et donc le même nombre "aléatoire"
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL]Eviter les doubles
    Par Bouki dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/10/2006, 18h15
  2. scanf et les double
    Par vinzzzz dans le forum C
    Réponses: 3
    Dernier message: 08/03/2006, 12h05
  3. [XSLT]Enlever les double espaces
    Par totoen dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/12/2005, 13h43
  4. Probleme avec les double Liste chainees
    Par BernardT dans le forum Langage
    Réponses: 1
    Dernier message: 12/07/2005, 17h22
  5. [VBA-E] Effacer les doubles dans 1 colonne grace à une macro
    Par Stef.proxi dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/08/2004, 15h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo