Un p’tit bout de code random svp ?

15 sujets de 1 à 15 (sur un total de 24)

  • 1
  • 2
  • anonyme

    • Messages : 8171
    #422

    Bonjour,

    Est ce que quelqu’un pourrait me donner un petit exemple d’une petite routine facile à comprendre d’un random ?

    Par exemple je voudrait que le prg me donne des nombres compris entre 1 et 50 au hazard. Pour le moment tout ce que j’obtient ce sont des nombres qui reste la même suite à chaque redemarrage du prg. Un truc simple svp.

    ha oui au fait j’utilise rand() pour le moment.

    Merci :-)

    Edit : Donc le tout en C merci :-)

    Lanza

    • Messages : 895
    #16926

    Une idée est d’avoir une table de chiffres qui se suivent au hasard (exemple personnellement utilisé : les décimales de PI). Ensuite il faut commencer la lecture de la table à un endroit différent à chaque utilisation pour éviter de retrouver la même suite de valeurs. On peut utiliser la date et l’heure courantes à cet effet.

    J’ai pas de code sous la main, mais l’idée est là. J’espère que ça peut t’aider.

    cityangel

    • Messages : 66
    #16927

    Voilà une petite fonction en C++.

    //Dans ton main par exemple

    //Initialisation de la fonction aléatoire

    srand(time(0));

    void Random(int & myResult, int myNum)

    {

    //Lance la fonction rand()

    myResult = (rand()% myNum);

    }

    Elle te donne un résultat qui comment à 0 à myNum.

    Je ne sais pas si sur Amiga la fct « srand » existe et surtout « time »

    Efin essaies toujours avec ça de faire quelque chose.

    A+

    anonyme

    • Messages : 8171
    #16928

    Merci beaucoup, je vais essayé d’étudier cela mais je le voulais en c ;-)) bon ok je viend de m’appercevoir que j’ai pas précisé. Je corrige mon premier post.

    C’est vrai que si je ne précise pas on peut donner du code forth, ace ou autre ;-)

    anonyme

    • Messages : 8171
    #16929

    void Randomize(void)

    {

    srand(time(NULL));

    }

    int Random(int Max)

    {

    return (rand() % Max);

    }

    Voila…

    A chaque fois que tu lances ton programme tu appelles donc d’abord Randomize() qui génère une liste d’entiers pseudo aléatoires… Puis tu appelles Random(50) pour générer un nombre entre 0 et 50…

    @+,

    Léo.

    stan

    • Messages : 508
    #16930

    Ton exemple (Leo) retourne un nombre entre 0 et 49 inclus, pas entre 0 et 50.

    srand(time(NULL)) est effectivement la méthode la plus simple/courante pour initialiser le générateur de nombres aléatoires, mais cela ne génère pas une liste de nombres… Cela choisit juste la « graine » qui va servir à calculer le premier nombre aléatoire.

    Il faut éviter d’utiliser rand()%max car selon la formule utilisée par rand(), on peut se retrouver avec une suite pas aléatoire du tout (style 0,1,0,1,0… pour rand()%2).

    A la place, on peut utiliser rand()/(RAND_MAX/max). Je crois.

    bLa

    • Messages : 1666
    #16931

    moi g ça :

    float tRandom(float hi){

    int r = rand();

    float x = (float)(r & 0x7fff) / (float)0x7fff;

    return (x * hi);

    }

    me demandez pas pourquoi ni comment par contre :)

    anonyme

    • Messages : 8171
    #16933

    Sinon bego, tu m’avais déjà demandé et je t’avais déjà répondu. :)

    Oui, je sais bien ;-) mais j’avait rien capté et j’avait pas fait de log lors de ton explication sur irc. Scuse moi.

    Sinon merci à tous, je vais essayé de voir ce que tout cela va donner :-))))

    Encore merci.

    DaddyDav

    • Messages : 258
    #16934

    j’avais aussi répondu mais avec des trucs special AMIGA sur l’IRC mais

    bon …

    :-D

    anonyme

    • Messages : 8171
    #16935

    Même réponse que pour Fab1 :-)

    Bon faut pas vous vexer hein ! halala ;-)

    henes

    • Messages : 2618
    #16936

    int Random(void)

    {

    static int *adr = 0;

    return *(adr++);

    }

    La fonction Random() de Crisot.

    Pas taper…

    cityangel

    • Messages : 66
    #16937

    int Random(int myNum)

    {

    //Lance la fonction rand()

    return (rand()% myNum);

    }

    voilà la même en C si tu préfères.

    Effectivement cela donne une réponse entre 0 et 49, mais là pas de problème, tu fais + 1 à la réponse comme ça tu as tes nombres entre 1 et 50 .

    DaddyDav

    • Messages : 258
    #16938

    Pour l’avoir entre 0 et le nombre donné inclu suffit de mettre le +1 dans la fonction :

    int Random(int myNum)

    {

    //Lance la fonction rand()

    return (rand()% myNum+1);

    }

    stan

    • Messages : 508
    #16939

    Dommage pour toi Daddy, car l’opérateur « + » est prioritaire sur le modulo « % » :-). Donc ton exemple donnera un nombre compris entre 0 et myNum+1 inclus.

    Bon, je résume en donnant la bonne méthode :

    void initRand( void )

    {

    srand(time(NULL));

    }

    int myRand( int min, int max )

    {

    return min + rand() / ( (RAND_MAX+1) / (max+1-min) );

    }

    ou, selon la méthode de Fab :

    int myRand( int min, int max )

    {

    return min + (int) ( (float)(max+1-min) * rand() / (RAND_MAX+1) );

    }

    myRand() retournera un nombre compris entre min et max INCLUS. (si je ne me suis pas gouré ;-) )

    DaddyDav

    • Messages : 258
    #16940

    Pas grave pour mon « gourrage » 8-)

    Je n’utilise pas cette methode de toute façon… :-P

15 sujets de 1 à 15 (sur un total de 24)

  • 1
  • 2
  • Vous devez être connecté pour répondre à ce sujet.

Forums AmigaOS, MorphOS et AROS Développement Un p’tit bout de code random svp ?

Amiga Impact