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

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    Octobre 2021
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 31
    Par d�faut Gestion de caract�res pseudo-al�atoires avec cr�ation d'une variable string concat�nant les caract�res
    Bonsoir,

    J'utilise � nouveau un algo pour g�n�rer des caract�res al�atoires (quatre) born�s (parmi RGBYMC et .). La fonction g�n�rateur s'appelle "char tirer_couleur()" et retourne un caract�re.

    J'ai cr�� une fonction qui appelle "char tirer_couleur()" et qui collectionne lesdits caract�res. Jusque l�, tout se passe bien. Ensuite j'ai cr�� une variable string qui contient les 4 caract�res concat�n�s. Ensuite je retourne la variable string que je peux afficher.

    Le hic, c'est que chaque tirage comporte le caract�re "B", comme premi�re caract�re de la s�rie. J'ai utilis� ailleurs, le m�me g�n�rateur et je n'ai pas eu ce m�me probl�me...
    Je s�che... Tout d'abord que pensez-vous du code? et dans un deuxi�me temps auriez-vous une piste � suivre pour le caract�re "B" ?

    Merci et bon week-end

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #include <iostream>
    #include <ctime>
     
    // pour les nombres aléatoires
    #include <random>
    #include <cstring> // strlen
     
    using namespace std;
     
    // ======================================================================
    // Couleur au hasard
    std::uniform_int_distribution<int> distribution;
    std::default_random_engine generateur(time(NULL)); /* NOT using std::random_device since not
                                                        * all compilers seems to support it :-( */
    char tirer_couleur()
    {
      static const char* const couleurs = ".RGBCYM";
      static const int nb = strlen(couleurs) - 1;
     
      return couleurs[distribution(generateur,
                                   std::uniform_int_distribution<int>::param_type {0, nb})];
    }
     
     string tirer_memoriser_combinaison()
    {
        char rand1(' '),rand2 (' '),rand3(' '),rand4(' ') ;
     
        rand1 = tirer_couleur();
        rand2 = tirer_couleur();
        rand3 = tirer_couleur();
        rand4 = tirer_couleur();
     
        string result;
        result += rand1;
        result += rand2;
        result += rand3;
        result += rand4;
     
        return result;
    }
     
    // ======================================================================
     
    void jouer()
    {
        /*Tirer et mémoriser les couleurss choisies par l'ordinateur*/
     
         string combinaison = tirer_memoriser_combinaison(); // appel de la fonction tirer et mémoriser
         cout <<combinaison<<endl;
    }
     
    int main()
    {
     
       jouer();
     
      return 0;
    }

  2. #2
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    D�cembre 2019
    Messages
    679
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 95
    Localisation : Autre

    Informations professionnelles :
    Activit� : ..

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 679
    Par d�faut
    Ah ha ! Salut,

    Il me semblait bien que je t'avais d�j� pos� la question

    Citation Envoy� par kaitlyn Voir le message
    P.-S. Est-ce que le code dans ce -> message provient du livre en question ? Quel est son titre ? Son �dition ?
    et la r�ponse �tait que �a sort d'une grande �cole, c'est �a ? D�sol�e je suis vraiment en train de surtout quand je vois la 13�me ligne avec son message.

    Bon fin des plaisanteries. Alors le probl�me vient de time(NULL) qui produit une graine (seed) trop fa�ble (valeur de faible grandeur et qui ne change pas de mani�re significative) ce qui donne des s�quences, surtout le d�but, tr�s mal distribu�es. D'o� le ph�nom�ne de r�p�tition que tu constates. Dans les faits on se retrouve avec un g�n�rateur de faible entropie.

    Donc pour y rem�dier on peut utiliser comme graine std::chrono::system_clock::now().time_since_epoch().count() apr�s avoir inclus l'en-t�te <chrono>.

    Et puis tant qu'� faire

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>
    #include <chrono>
    #include <random>
     
    char tirer_couleur()
    {
        static const char arr[]= ".RGBCYM";
        static const int n= sizeof arr - 2;  // 1 pour le zéro de fin de chaine et 1 pour l'indexation qui commence à zéro
        static auto seed= std::chrono::system_clock::now().time_since_epoch().count();
        static std::uniform_int_distribution<> dis{0, n};
        static std::default_random_engine gen(seed); 
        return arr[dis(gen)];
    }
    tout en restant dans la lign�e de ton code de sorte que �a te reste familier.

  3. #3
    Membre averti
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    Octobre 2021
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 31
    Par d�faut
    Merci! �a � l'air de bien fonctionner. Je joint le code cr��.
    Comme on peut le voir, ma fonction retourne 4 "char". Pour faciliter leur traitement je souhaite n'avoir plus qu'une seul variable...Cependant, je ne sais comment faire. Dois-je modifier ma fonction, son appel?

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    /*Tirer et mémoriser les couleurss choisies par l'ordinateur*/
     
    char tirer_memoriser(char &val1, char &val2, char &val3, char &val4)
    {
    for (int i=0;i<5;i++)
     
             {
               char c (tirer_couleur());  // définition de la variable locale c
     
                if (i == 0)
                  {
                    char val1(' '), val2(' '), val3(' '), val4(' ');  //Initialisation des variables
                  }
                 if (i == 1)
                  {
                    val1=c;
                  }
                if (i == 2)
                  {
                    val2=c;
                  }
                if (i == 3)
                  {
                    val3=c;
                  }
                if (i == 4)
                  {
                    val4=c;
                  }
          }
    }
     
    // ======================================================================
    void jouer()
    {
        /*Tirer et mémoriser les couleurss choisies par l'ordinateur*/
     
            char rand1, rand2, rand3, rand4;
            tirer_memoriser(rand1, rand2, rand3, rand4);
     
            afficher_couleurs(rand1,rand2,rand3,rand4);
    }

  4. #4
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de caf�
    Inscrit en
    Mai 2007
    Messages
    1 048
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : Consommateur de caf�
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par d�faut
    std::tuple

  5. #5
    Membre Expert
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par d�faut
    std::array serait plus coh�rent, on peut boucler dessus.

    Au passage, la boucle de qui fait une chose diff�rente � chaque tour de boucle ne sert � rien... Ce n'est pas une boucle.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    std::array<char, 4> tirer_memoriser()
    {
      std::array<char, 4> couleurs;
      for (char& c : couleurs)
        c = tirer_couleur();
      return couleurs;
    }

  6. #6
    Membre averti
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    Octobre 2021
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 31
    Par d�faut
    Merci pour les infos! Malheureusement je n'ai pas le droit d'utiliser des arrays......Pas encore...

    En ce qui concerne la boucle, je n'ai pas trouv� mieux, de plus propre, pour r�p�ter 4 fois un appel � une fonction...je sui bien s�r preneur de toute am�lioration.

    Je vous souhaite une excellente soir�e remplie de surprises agr�ables

    Jean-Pierre

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Response.Redirect avec Cr�ation d'une fentre
    Par jerome.fortias dans le forum ASP.NET
    R�ponses: 3
    Dernier message: 13/09/2007, 18h05
  2. R�ponses: 9
    Dernier message: 05/04/2006, 17h48
  3. FAQ : probl�me avec cr�ation d'une requete en VBA
    Par Oluha dans le forum VBA Access
    R�ponses: 14
    Dernier message: 14/02/2006, 12h05
  4. R�ponses: 4
    Dernier message: 19/10/2005, 11h26
  5. Cr�ation d'une variable de session avec un ID
    Par PrinceMaster77 dans le forum ASP
    R�ponses: 4
    Dernier message: 18/10/2004, 10h28

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