Partage
  • Partager sur Facebook
  • Partager sur Twitter

Piocher des nombres aléatoires différents

Pour un p'tit jeu d'anagrammes...

    12 mars 2006 à 15:02:38

    Bonjour, je suis en train de coder un petit jeu d'anagrammes, mais avant même de rentrer dans le vif du sujet, il y a un truc qui ne marche pas (ça commence bien :p ). Bref, mon code :

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main(int argc‚ char *argv[])
    {


      char motCache[] = "SUPERTRUC";
      long *motMelange = malloc(sizeof(long) * strlen(motCache));
      long i = 0‚j = 0‚ permission = 1
      long numeroLettre = 0;
             
             
             while(i < strlen(motCache))
             {
                     srand(time(NULL));                 
                     numeroLettre = (rand() % strlen(motCache));

                     while(j < strlen(motCache))
                     {
                         if(permission)
                         {
                             if(motMelange[j] == numeroLettre)
                             {
                                 permission = 0;
                             }
                             
                             else
                             {
                                 permission = 1;
                             }
                             j++;
                         }
                     }
                     
                     if(permission)
                     {   
                         motMelange[j] = numeroLettre;
                         printf("%ld "‚ motMelange[i]);   
                         i++;
                     }
             }
             
      printf("\n");
      system("PAUSE");     
      return 0;
    }


    Déjà là, je pense que quelques explications ne seront pas superflues :D .
    Donc on a "i", variable long qui est égale à zéro, qui sert à s'incrémenter jusqu'à ce qu'il soit égal à la longueur de "motCache".
    Donc on pioche un nombre au pif, puis on démarre une autre boucle qui est sensée vérifier si le nombre est bien dans la chaîne. Si il y est "permission == 1", sinon égal à 0.
    De là on sort de la deuxième boucle pour rejoindre la première. Si permission est égal à 1, "i" s'incrémente, le tableau sensé stocker les chiffres se dote de celui qui vient d'être pioché et on affiche le résultat.
    En théorie, ça me semble à peu près défendable... Mais en pratique voilà ce que ça donne :

    3998072 3998072 0 0 0 0 0 0 0
    Appuyez sur une touche pour continuer...


    Le seul truc qui marche comme i faut, c'est qu'il y a le bon nombre de nombres (désolé pour la répétition ;) )

    Bref voilà, merci d'avance à tous ceux qui pourront me dire ce qui cloche dans mon code...
    • Partager sur Facebook
    • Partager sur Twitter
      12 mars 2006 à 16:28:52

      Citation : Big_Zero

      merci d'avance à tous ceux qui pourront me dire ce qui cloche dans mon code...


      • Il manque le prototype de time(). Inclure <time.h>
      • malloc() peut échouer. Il faut tester le résultat avant de l'utilser. NULL signifie echec d'allocation.
      • Il faut penser à libérer ce qui a été alloué (free()).
      • srand() doit être appelé une fois au debut du programme. Pas dans une boucle...
      • j est incrémenté au-delà des possibilités du tableau. Il manque un j = 0. Une réduction de la portée de la variable évite généralement ce genre d'erreur...
      • Dans le printf(), c'est probablement un j au lieu d'un i...

      Corrections faites, j'obtiens :

      0 4 5 7 2 0 3 1 1

      3 1 1 1 3 7 4 0 4

      etc.

      Je ne pense pas que tu veuilles ces doublons. Il va donc falloir travailler l'algorithme...
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !

      Piocher des nombres aléatoires différents

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown