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 :

pb avec srand


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Par défaut pb avec srand
    Bonjour,
    j'ai un problème avec un génération de nombre aléatoire à cause je pense de srand((unsigned)(time(NULL))) sous visual c++ 6.
    En fait j'ai un lien de composition entre une classe filtre et une matrice. Le contenu de ma classe matrice est généré aléatoirement grâce a un rand()%6 puis je créé un filtre qui est un tableau de matrice grâce à une boucle.
    Ensuite pour que mes nombre soit vraiment tiré aléatoirement je dois initialise srand((unsigned)(time(NULL))); mais si je le mais dans mon constructeur de matrice celui-ci aura toujours la même valeur et si je le mets dans OnInitDialog() mon programme crash je ne sait donc pas ou le mettre.

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    matrice::matrice()
    {
     
    	tab= new cases**[2];
     
        for(int i=0;i<2;i++)
        {
            tab[i]=new cases*[2];
            for (int j=0;j<2;j++)
            {
    			tab[i][j]=NULL;
     
     
     
    		}
    	}
     
     
    srand((unsigned)(time(NULL)));
    int var = rand()%6;
     
    			switch (var)
                                {
                                    case 1:
    									tab[0][0]=new cases(true);
    									tab[0][1]=new cases(true);
    									tab[1][0]=new cases(false);
    									tab[1][1]=new cases(false);
                                        break;
                                    case 2:
                                        tab[0][0]=new cases(true);
    									tab[0][1]=new cases(false);
    									tab[1][0]=new cases(true);
    									tab[1][1]=new cases(false);
                                        break;
                                    case 3:
                                        tab[0][0]=new cases(true);
    									tab[0][1]=new cases(false);
    									tab[1][0]=new cases(false);
    									tab[1][1]=new cases(true);
                                        break;
                                    case 4:
                                        tab[0][0]=new cases(false);
    									tab[0][1]=new cases(true);
    									tab[1][0]=new cases(true);
    									tab[1][1]=new cases(false);
                                        break;
    								case 5:
                                         tab[0][0]=new cases(false);
    									tab[0][1]=new cases(true);
    									tab[1][0]=new cases(false);
    									tab[1][1]=new cases(true);
                                        break;
    								case 6:
                                        tab[0][0]=new cases(false);
    									tab[0][1]=new cases(false);
    									tab[1][0]=new cases(true);
    									tab[1][1]=new cases(true);
     
     
     
                                }
     
     
    }
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    nb=n;
     
    	tab = new matrice*[n];
     
    	for (int i=0;i<n;i++)
    	{
    		tab[i] = new matrice;
    	}
    Merci à ceux qui voudront bien m'aider

  2. #2
    Membre Expert
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Billets dans le blog
    1
    Par défaut
    rand te renvoi un nombre entre 0 et 1 donc forément tu auras toujours 1 dans ton cas.

    Fais plutot comme ça:

    [0-1]
    fois 6
    [0-6]
    modulo 6
    [0-6] en entier sans virgule

  3. #3
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    rand te renvoi un nombre entre 0 et 1 donc forément tu auras toujours 1 dans ton cas.
    Tu es sur de ça ? Moi je voyais plutôt ça :

    The rand function returns a pseudorandom integer in the range 0 to RAND_MAX (32767). Use the srand function to seed the pseudorandom-number generator before calling rand.
    Par contre pour le crash dans OnInitDialog,, ça me laisse perplexe. Es-tu bien sur que ça vienne de là ? Sinon, tu peux toujours le mettre à la création de ton appli (dans le WinMain)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  4. #4
    Membre Expert
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Billets dans le blog
    1
    Par défaut
    Si vous désirez engendrer un entier aléatoire entre 1 et 10, vous devez toujours procéder en utilisant les bits de poids forts, comme dans :
    j=1+(int) (10.0*rand()/(RAND_MAX+1.0));


    et jamais ainsi :
    j=1+(rand() % 10);


    (car cette derniere version utilise les bits de poids faibles)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Par défaut
    Par contre pour le crash dans OnInitDialog,, ça me laisse perplexe. Es-tu bien sur que ça vienne de là ? Sinon, tu peux toujours le mettre à la création de ton appli (dans le WinMain)
    A priori oui si je mets mon srand((unsigned)(time(NULL))) dans mon constructeur ça compile et fonctionne correctement hormis que le tirage n'est pas aléatoire mais si je l'enlève ou le met dans OnInitDialog ça compile mais dès que j'instancie mon filtre j'ai un crash.
    Par contre j'ai pas de main je suis sous visual c++ donc je sais toujours pas où mettre mon srand.

  6. #6
    Membre Expert
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Billets dans le blog
    1
    Par défaut
    T'as essayé ce que j'ai mis?

    Tu as un message d'erreur pour le crash?

    Pourquoi un cast en unsigned? ça compile pas sans?

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

Discussions similaires

  1. Problème avec srand
    Par yopiyop33 dans le forum Débuter
    Réponses: 5
    Dernier message: 02/12/2014, 18h38
  2. [PHP 5.3] Exception avec srand & rand: aucun résultat
    Par max235 dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2010, 21h25
  3. Problème avec srand() et rand()
    Par rouliane dans le forum C++
    Réponses: 10
    Dernier message: 16/12/2007, 19h35
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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