Generateur de nombre aléatoire

Résolu
cobra85 Messages postés 148 Statut Membre -  
cobra85 Messages postés 148 Statut Membre -
Bonjour,

je cherche à faire un générateur de nombre aléatoire, entre [1;4]

le code ci dessous, me genere toujours la meme suite de nombre.
(il s'agit du langage C)
void tirerSymbole(int e)
{
   // srand(time(NULL));
    {
        e = 1 + (int)((double)rand() / ((double)RAND_MAX + 1) * 5);
        if (e==1)
        {
            printf("PIERRE");
        }
        else if (e==2)
        {
            printf("FEUILLE");
        }
        else if (e==3)
        {
            printf("CISEAUX");
        }
        else if (e==4)
        {
            printf("PUITS");
        }
    }
    return e;
}


moi je voudrais qu'il me le génere dans un ordre quelconque.

Merci
Configuration: Windows XP
Firefox 2.0.0.10

5 réponses

  1. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    :-)

    rand() ne renvoie pas de nombres aléatoire. Uniquement des nombres pseudo-aléatoires, c'est à dire une suite de nombre calculés par une formulaire mathématique figée qui donne toujours les mêmes nombres dans le même ordre.

    Il faudrait l'initialiser avec quelquechose (date/heure est un début).
    C'est à ça que sert le srand(time(NULL)); que tu as mis en commentaire.
    0
  2. blux Messages postés 2060 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    en fait, l'ordinateur ne sait pas générer de nombres vraiment aléatoires, il possède un algorithme de génération de nombres pseudo-aléatoires qui sont liés les uns aux autres. Mais comme tout algorithme, si on le nourrit avec le même nombre en entrée, on a le même nombre en sortie. C'est pourquoi il est recommandé de changer la 'graine' de départ de l'algorithme avec la fonction srand (s pour seed = graine en anglais). On peut donner date et heure, récupérer la miliseconde de l'heure courante ou un timestamp unix (nombre de secondes depuis le 1/1/70)...
    0
  3. cobra85 Messages postés 148 Statut Membre 3
     
    Ok, mais comment je fait pour le faire avec la date et l'heure.
    0
  4. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    Le srand(...) sert à ça.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cobra85 Messages postés 148 Statut Membre 3
     
    //tirage au hazard:
    int Random (int _iMin, int _iMax)
    {
    return (_iMin + (rand () % (_iMax-_iMin+1)));
    }

    int tirerSymbole(int e)
    {
    int iRandom;

    srand (time (NULL));
    iRandom = Random (1,4);
    //printf ("%d", iRandom);
    if (iRandom==1)
    {
    printf("PIERRE");
    }
    if (iRandom==2)
    {
    printf("FEUILLE");
    }
    if (iRandom==3)
    {
    printf("CISEAUX");
    }
    if (iRandom==4)
    {
    printf("PUITS");
    }
    return e;
    }

    Merci de votre aide
    0