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 :

Fonction random C++


Sujet :

C++

  1. #1
    Membre actif
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2012
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 63
    Par d�faut Fonction random C++
    Bonjours.

    j'ai un petit souci avec cette fonction elle ne me g�n�r� pas tout a fait un int al�atoirement c'est toujours les m�me et dans le m�me ordre .

    Mon code :

    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
    unsigned int z;
    int x;
    int y = 0;
    int c = 8;
    char texte[30] = "";
    z = random(100);
     
    x = E1 - > Text.ToInt();
     
    if (x < z) {
        L1 - > Caption = "Plus grand";
    } else {
        if (x > z) {
            L1 - > Caption = "Plus petit";
        } else {
            if (x = z) {
                L1 - > Caption = "GG";
            }
        }
    }
    y++;
    sprintf(texte, "%d Essai", y);
    L2 - > Caption = texte;
    if (y == c) {
        L2 - > Caption = "PERDU";
        y = 0;
        Bclik - > Enabled = false;
        Button2 - > Caption = "Réessayer";
    }
    Si vous avais des id�es elles seront les bienvenues !

  2. #2
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    F�vrier 2009
    Messages
    762
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 762
    Par d�faut
    Salut,

    random n'est pas une fonction du C++. Donc il faut que tu nous donnes son code

  3. #3
    Membre actif
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2012
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 63
    Par d�faut
    mais ce code marche tr�s bien sauf que les valeurs de ma variable sont toujours les m�mes soit 49;4 ... je voudrais que ce soit vraiment al�atoire si random n'est pas une fonction du C++ pourquoi �a fonctionne quand m�me a moiti� et quelle serais la fonction adapt�e ?

  4. #4
    Membre chevronn�
    Avatar de haraelendil
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2004
    Messages
    283
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 283
    Par d�faut
    random n'est pas une fonction standard, donc soit c'est d�finit quelque part dans ton code, soit c'est dans une librairie que tu utilise...

    Apr�s, dans tous les cas, il faut surement l'initialiser avec un graine, mais encore une fois, sans savoir d'o� elle vient, difficile d'en dire plus...

  5. #5
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 299
    Billets dans le blog
    2
    Par d�faut
    La fonction standard en c++ pour g�n�rer des nombres al�atoires est rand(): http://en.cppreference.com/w/cpp/numeric/random/rand

  6. #6
    Membre actif
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2012
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 63
    Par d�faut
    r0d

    j'ai essayer avec le code de ton lien �a fonction mais je n'arrive pas a comprendre comment Choisir la valeur maxi de ma variable

    c'est ce que j'ai utiliser pour la rendre al�atoire

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    unsigned int rand_variable = std::rand()  ;

  7. #7
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    srandom et random sont des fonctions POSIX et on un comportement similaire � srand et � rand.

    Pour avoir un nombre entre a et b, la formule est assez simple :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
     rand()/(RAND_MAX - 1)*(b-a) + a
    O� RAND_MAX est une constante d�finie dans math.h (ou cmath), j'avoue que je ne connais pas le nom exact.

    Cf la FAQ

  8. #8
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Ao�t 2004
    Messages
    1 717
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 1 717
    Par d�faut
    En fait rand() c'est du c.

    En C++11 tu peux utiliser la library <random> qui est plus correcte.

  9. #9
    Membre actif
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2012
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 63
    Par d�faut
    Ok je veux bien pour la lib mais quelle serais la fonction exacte en c++ ?

  10. #10
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Bonjour,
    dans toutes les questions sur les fonctions standards, il convient de se rapprocher de la documentation correspondante.

    Personnellement, j'utilise cppreference.com.
    Dans ton cas, tu devrais t'int�resser � la section sur <random>

    Je t'invite � passer quelques heures � explorer ce site, tu n'y trouveras pas beaucoup de conseils, mais toutes les sp�cifictions des fonctions.
    Attention toute fois, les fonctions marqu�s C++11 ne sont pas forc�ment toutes disponibles sur tous les compilateurs.

  11. #11
    Membre actif
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2012
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 63
    Par d�faut
    Merci a tous pour votre aide.

    J'ai trouver comment faire.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    	srand(time(NULL)); // initialisation de rand
    	for(i=0; i<5; i++)
    	{
    	   z = rand()%t;
    	}

  12. #12
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    Attention, si tu met rand()%z, tous les r�sultats ne seront pas �quiprobables (mais bon, c'est relativement n�gligeable ici).

  13. #13
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 299
    Billets dans le blog
    2
    Par d�faut
    Citation Envoy� par Neckara Voir le message
    Attention, si tu met rand()%z, tous les r�sultats ne seront pas �quiprobables (mais bon, c'est relativement n�gligeable ici).
    [mode chipotage ON]Sauf si z est multiple de RAND_MAX [mode chipotage OFF]

  14. #14
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Citation Envoy� par r0d Voir le message
    [mode chipotage ON]Sauf si z est multiple de RAND_MAX [mode chipotage OFF]
    (M-x mode-super-chipotage-on)
    C'est vrai pour les multiples de RAND_MAX. C'est aussi souvent vrai si z = (2^k)-1, avec k positif, parce que RAND_MAX est bien souvent une valeur de cette forme - dans ce cas, on �limine simplement les bits de poids fort.
    (M-x mode-super-chipotage-off)
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  15. #15
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    Sauf que la valeur de RAND_MAX n'est pas fix�e par la norme et d�pend de l'impl�mentation (?).
    Donc dans ce cas l�, on ne peut pas consid�r� que les r�sultats sont �quiprobable s'ils le sont que chez nous et pas chez les autres.

    J'adore chipoter

  16. #16
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par d�faut
    Salut,

    comment vous faites pour obtenir un tirage �quiprobable � partir d'une distribution qui ne suit pas une loi uniforme?

  17. #17
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    @ALeph69: OK, disons que c'est un abus de langage L'�quiprobabilit� n'est pas garantie math�matiquement, mais on est quand m�me dans un cas relativement proche (pas g�nial, mais ce n'est pas catastrophique non plus).

    @Neckara : historiquement, les valeurs de RAND_MAX sont soit de la forme 2^k, soit de la forme 2^k-1 (cf. http://en.wikipedia.org/wiki/Linear_...tial_generator). En fait, je vais revenir sur mes propos, parce qu'ils partent du principe que le LCG garde les bits de poids faible uniquement - ce n'est pas le cas dans toutes les impl�mentations, ce qui fait qu'un modul quelconque a 0 chances de donner quelque chose de vaguement uniforme (aux probl�mes apport�s par le LCG pr�s, histoire de faire plaisir � Aleph69 ).
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  18. #18
    Membre �clair�
    Inscrit en
    Avril 2005
    Messages
    1 110
    D�tails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par d�faut
    Citation Envoy� par leternel Voir le message
    Attention toute fois, les fonctions marqu�s C++11 ne sont pas forc�ment toutes disponibles sur tous les compilateurs.
    Je dirais m�me qu'ils sont rares. On ne change pas d'environnement de travail comme de chaussettes
    Bah, � propos tiens, y-a-t-il un update/patch pour Visual Studio 2010 qui supporte C++11 ? Ou faut-il se farcir VS2012 ?

  19. #19
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    D�tails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par d�faut
    Citation Envoy� par camboui Voir le message
    Bah, � propos tiens, y-a-t-il un update/patch pour Visual Studio 2010 qui supporte C++11 ? Ou faut-il se farcir VS2012 ?
    Comme d'hab, faut upgrader.
    Mais sinon pour ce qui est de la conformit� de la biblio standard au C++11, vs2010 est quand m�me dans le haut du panier, sa biblio standard est quasiment compl�te.


    Edit :
    Citation Envoy� par takago
    Ok je veux bien pour la lib mais quelle serais la fonction exacte en c++ ?
    Il me semble que le moyen le plus court et le plus simple avec <random> du C++11 pour obtenir un nombre al�atoire dans un intervalle donn� est le code suivant :

    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
    #include <random>
    #include <time.h>
     
    std::default_random_engine rd_engine(time(NULL));
     
    int rand_(int min, int max)
    {
       std::uniform_int_distribution<> rd_dist(min, max);
       return rd_dist(rd_engine);
    }
     
    int main()
    {
       int r = rand_(1, 6); // tirage équivalent à celui d'un dé 6
    }
    Donc un peu lourdingue...
    Ce qui est dommage avec la lib <random> du C++11 c'est qu'elle est clairement tr�s puissante (on peut sans trop de difficult� sortir des distributions normales, binomiales etc), tr�s customisable, mais il manque une fonction comme rand_ que j'ai d�finit plus haut et qui en une ligne de code couvrirait la vaste majorit� des usages...

    Du coup, je n'utilise quasi jamais <random> de C++11, mais le classique :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    srand(time(NULL)); // initialisation de rand
    for(i=0; i<5; i++)
    {
       z = rand()%t;
    }
    B�tement un srand + rand/modulo est plus court � �crire et suffit largement pour quasiment tout :\

  20. #20
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Sant�

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par d�faut
    Mais sinon pour ce qui est de la conformit� de la biblio standard au C++11, vs2010 est quand m�me dans le haut du panier, sa biblio standard est quasiment compl�te.
    Tu as une source ?
    Pour la prise en charge du langage, j'ai ces tableaux : Stdcxx Wiki C++0xCompilerSupport et C++11 Features in Visual C++ 11, mais pas grand chose sur la lib elle m�me

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

Discussions similaires

  1. [Forth] Fonction random
    Par kamfezz dans le forum Autres langages
    R�ponses: 3
    Dernier message: 16/04/2023, 14h33
  2. [Fortran 77] Fonction random
    Par ajsd0208 dans le forum Fortran
    R�ponses: 1
    Dernier message: 15/07/2005, 12h58
  3. [LG]Utilisation de la fonction Random
    Par chloe95 dans le forum Langage
    R�ponses: 1
    Dernier message: 01/03/2005, 14h20
  4. [LG]Fonction random
    Par platoon5 dans le forum Langage
    R�ponses: 16
    Dernier message: 22/02/2005, 20h47
  5. Fonction Random en Assembleur
    Par chidi dans le forum Assembleur
    R�ponses: 5
    Dernier message: 21/05/2004, 10h16

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