Partage
  • Partager sur Facebook
  • Partager sur Twitter

rand()%10?

Sujet résolu
    17 avril 2006 à 20:08:05

    Bonjour,
    r=rand()%10 est sensé mettre dans r une valleur entre 0 et 9 c ca?
    alors pourquoi ca marche pas comme ca dans mon code

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

    //prototypes
    void generer_sodoku();
    //void resoudre_sodoku();
    //void proposer_sodoku();

    int main()
    {
         int v;
         int choix;
         printf("Menu\n 1- Proposer votre Sodoku\n 2-Generer un sodoku aleatoiremnt\n 3-Résoudre votre sodoku\n");

         scanf("%d",&v);

         switch(v)
         {
         case 1:
              // proposer_sodoku();
              break;
                   
         case 2:
              generer_sodoku();
              break;
                   
         case 3:
             // resoudre_sodoku();
              break;
          }
         system("PAUSE");

    }

    void generer_sodoku()
    {
         int tab[9][9];
         int i;
         int j;
         int r;
         int s;
         int q;
         printf("Votre sodoku\n Vous connaissez les regles\n bon courage\n A vous de jouer");
         for(i=0;i<9;i++)
                         {
                                    for(j=0;j<9;j++)
                                    {
                                                r=rand()%10;
                                                s=rand()%10;
                                                q=rand()%10;
                                                tab[r][s]=q;
                                                printf("%d ",tab[i][j]);
                                    }
                         }
                          printf("\n");
    }
    • Partager sur Facebook
    • Partager sur Twitter
      17 avril 2006 à 20:11:14

      Il faut que tu pense à initialiser la liste des nombre qui vont sortit avec srand.
      Généralement, on fait srand(time(NULL)); mais ça nessecite d'inclure <time.h> dans ton programme. Et il ne faut faire QU'UN SEUL SRAND PAR PROGRAMME !!!
      • Partager sur Facebook
      • Partager sur Twitter
        17 avril 2006 à 20:14:52

        vu que je vais avoir de m'en servir a plusieurs reprises j'imagine qu'il faut le mettre dans le main() mais le souci c'est que les valeurs sont toujours énormes et en plus je recois une seg fault :(
        • Partager sur Facebook
        • Partager sur Twitter
          17 avril 2006 à 20:19:51

          Dans ton rand()%10, rien ne te dit que tout les chiffres de 0 à 9 vont sortir, donc il y aura de grandes chances que certaine champs du tableau restent non initialisé, ce qui fait qu'il te renvoi n'imp.

          Met plutot :


          q=rand()%10;
          tab[i][j]=q;


          Au fait, c'était pas vraiment la peine de recréer un topic hein :-°
          • Partager sur Facebook
          • Partager sur Twitter
            17 avril 2006 à 20:25:40

            Si fait cela je vais avoir toutes les case remplies or je ne veux remplir que certaine je vais mettre un compteur et une boucle while conditionnée par le compteur et voir ce que ca peut faire question de laisser certaine vide
            • Partager sur Facebook
            • Partager sur Twitter
              17 avril 2006 à 20:25:43

              Citation : amine_en_france



              void generer_sodoku()
              {
                   int tab[9][9];
                                                          r=rand()%10;
                                                          s=rand()%10;
                                                          q=rand()%10;
                                                          tab[r][s]=q;

              Problème d'algo et de codage.
              • Le tableau n'est pas initialisé
              • rand() % 10 génère de 0 à 9, soit un de trop pour le tableau (0 à 8)

              Ceci fonctionne :

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

              static void generer_sodoku(void)
              {
                 int tab[9][9] =
                    {
                       {
                          0
                       }
                    };
                 int i;
                 int j;
                 int r;
                 int s;
                 int q;
                 printf("Votre sodoku\n"
                        "Vous connaissez les regles\n"
                        "bon courage\n"
                        "A vous de jouer\n");
                 for (i = 0;i < 9;i++)
                 {
                    for (j = 0;j < 9;j++)
                    {
                       r = rand() % 9;
                       s = rand() % 9;
                       q = rand() % 9;
                       tab[r][s] = q;
                       printf("%d ", tab[i][j]);
                    }
                    printf("\n");
                 }
                 printf("\n");
              }
              int main()
              {
                 int v;
                 int choix;

                 srand ((unsigned) time(NULL));

                 printf("Menu\n 1- Proposer votre Sodoku\n 2-Generer un sodoku aleatoiremnt\n 3-Résoudre votre sodoku\n");

                 scanf("%d", &v);

                 switch (v)
                 {
                 case 1:
                    // proposer_sodoku();
                    break;

                 case 2:
                    generer_sodoku();
                    break;

                 case 3:
                    // resoudre_sodoku();
                    break;
                 }

                 return 0;
              }
              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                17 avril 2006 à 20:44:43

                Je n'arrive pas a voir ce qui dans ton programme fais que tu ne remplis pas dans tes cases?
                • Partager sur Facebook
                • Partager sur Twitter
                  17 avril 2006 à 20:53:40

                  Citation : amine_en_france

                  Je n'arrive pas a voir ce qui dans ton programme fais que tu ne remplis pas dans tes cases?


                  Tu parles de quoi, à qui ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    17 avril 2006 à 20:55:15

                    Je parlais a toi (ed) et je comparais ton code avec le mien et je ne vois pas comment tu arrives a ne pas generer pour toutes les cases
                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 avril 2006 à 21:07:49

                      Citation : amine_en_france

                      Je parlais a toi (ed) et je comparais ton code avec le mien et je ne vois pas comment tu arrives a ne pas generer pour toutes les cases


                      C'est normal, si on tire 9 x 9 = 81 couples de coordonnées de 0 à 8, rien n'empêche de retomber sur les mêmes.

                      Les seuls modifs que j'ai apportées sont

                      - intialisation du tableau (j'ai mis 0, mais si tu veux mettre -1, je te laisse faire les boucles qui vont bien...
                      - limitation de l'amplitude (0-8 au mieu de 0-9), car elle était hors limite.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Music only !
                      Anonyme
                        18 avril 2006 à 10:09:13

                        Sinon (un peu hors sujet) tu ne vérifies pas si les nombres générés sont sur la même ligne q'un même nombre (il peut y avoir plusieurs fois le même sur une même ligneavec ton code), ça ne devrait pas être le cas (au fait on dit su-do-ku)
                        • Partager sur Facebook
                        • Partager sur Twitter

                        rand()%10?

                        × 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