Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème avec la partie 1 tp n°8

problème de compteur

    18 juillet 2006 à 8:43:42

    bonjour
    j'ai un petit soucis avec la réalisation du tp du cours de C/C++.
    J'ai réalisé le programme en suivant les cours de m@teo21 que je remercie.
    Le problème est que le compteur marche lors de la première partie, mais si on fait une autre partie, le compteur ajoute toute les parties.
    malgrès une réinitialisation de la valeur du compteur.
    pourriez-vous m'aider.
    Je vous en remercie d'avance.
    Voici mon code

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    //inclure la librairie time qui réalise le randomize

    int main(int argc, char *argv[])
    {
     /* mettre en place les variables utilisés
     max= maximum de la valeur pour le jeu
     min= minimun de la valeur pour le jeu
     rep1= nombre de joueurs
     rep2= reponse du choix du niveau du jeu
     mystere le nombre à retrouver
     nb c'est le nombre que l'on entre pour trouver mystere
     coup est le nombre de coups jouer
     partie est le choix si on veut refaire une partie*/

      long max=0, min=1, rep1=0, rep2=0, nb=0, mystere=0, coup, partie =1;
      while(partie)
      {
      coup=0;
      //choix du menu de depart
      printf("vous allez jouer au jeu du plus ou moins\n");
      printf("afin de trouver un nombre mystere\n\n");
      printf("vous pouvez jouer au maximun a 2 joueurs\n\n");
      printf("combien de joueurs , desire jouer ? ");
      scanf("%ld", &rep1);
     
      //repartition des joeurs
      switch (rep1)
      {
      case 1:
           {printf("vous allez jouer tout seul \n");
            //choix du menu de niveau
            printf("vous devez choisir un niveau de difficulte pour le jeu\n\n\n");
            printf("1. facile choix d'un nombre entre 1 et 100\n");
            printf("2. moyen choix d'un nombre entre 1 et 1000\n");
            printf("3. difficile choix d'un nombre entre 1 et 10 000\n\n");
            printf("indiquez votre choix de niveau : ");
            scanf("%ld", &rep2);
     
            // acces à l'une des parties
            switch (rep2)
            {
            case 1:
                 {printf("vous devez choisir un nombre entre 1 et 100\n");
                  max=100;}
            break;
     
            case 2:
                 {printf("vous devez choisir un nombre entre 1 et 1000\n");
                  max=1000;}
            break;
     
            case 3:
                 {printf("vous devez choisir un nombre entre 1 et 10 000\n");
                  max=10000;}
            break;
     
            default:
                 {printf("vous ne savez pas lire donc vous fairez le niveau facile \n");
                  max=100;}
            break;
            }
            //initialisation du nombre mystere
            srand(time(NULL));
            mystere= (rand() % (max - min + 1)) + min;
     
            //boucle de repetition pour trouver le nombre mystere
            do
            {
             coup++;
             printf("quel est le nombre ?");
             scanf("%ld", &nb);
             if (mystere >nb)
                printf("c'est plus grand !\n");
             else if (mystere < nb)
                printf("c'est plus petit !\n");
             else
                printf("bravo vous avez trouve le nombre mysterieux en %ld coup \n\n",coup);
             }
             while (mystere != nb);
             
             // demande de rejouer
             printf("voulez vous rejouer ?\n");
             printf("tapez 1 pour oui et zero 0 pour non, votre choix : ");
             scanf("%ld", &partie);
             }
      break;
     
      case 2:
            {printf("vous jouer a 2 \n");
             printf("que le joeur 1 entre un nombre entier que le joeur 2 va determiner : ");
             scanf("%ld", &mystere);
             printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
         
             //boucle de répétition pour trouver le nombre mystere
             do
             {
              coup++;
              printf("quel est le nombre ?");
              scanf("%ld", &nb);
              if (mystere >nb)
                printf("c'est plus grand !\n");
              else if (mystere < nb)
                printf("c'est plus petit !\n");
              else
                printf("bravo vous avez trouve le nombre mysterieux en %ld coup \n\n",coup);
              }
              while (mystere != nb);
             
              //demande de rejouer
              printf("voulez vous rejouer ?\n");
              printf("tapez 1 pour oui et zero 0 pour non, votre choix : ");
              scanf("%ld", &partie);
              }
      break;
     
      default:
              printf("vous ne savez pas lire, c'est fini pour vous!!!!\n\n");
              partie=0;
      break;
    }
    }
      system("PAUSE");     
      return 0;
    }
    • Partager sur Facebook
    • Partager sur Twitter
      18 juillet 2006 à 11:00:34

      Je ne sais pas si sa vient de la mais je ne vois pas pourquoi tu met une accolade apres un case:

      case 1:
      {printf("vous allez jouer tout seul \n");
      case 2:
      {printf("vous jouer a 2 \n");


      • Partager sur Facebook
      • Partager sur Twitter
        18 juillet 2006 à 11:18:51

        Il ne faut pas d'accolage pour un les case d'un switch !
        srand(time(NULL)) ne doit être lancer qu'une fois, or, toi, tu le mets dans une boucle.
        Tes variables portent des noms non explicatifs (rep1, rep2...).
        On utilise les switch seulement lorsqu'il a beaucoup de solution de réponse. Tu l'utilise à outrance.

        Voilà ton programme remodeler :

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

        int main(int argc, char *argv[])
        {
         
          long max = 0, min = 1, nbJoueur = 0, difficultee = 0, nb = 0, mystere = 0, coup, partie = 1;
          srand(time(NULL));
         
         while(partie)
          {
            coup = 0;
         
          printf("vous allez jouer au jeu du plus ou moins afin de trouver un nombre mystere\n");
          printf("vous pouvez jouer au maximun a 2 joueurs combien de joueurs , desire jouer ? ");
          scanf("%ld", &nbJoueur);
         
         
          if (nbJoueur == 1)
          {
                       
                printf("vous allez jouer tout seul \n");
                //choix du menu de niveau
                printf("vous devez choisir un niveau de difficulte pour le jeu\n\n\n");
                printf("1. facile choix d'un nombre entre 1 et 100\n");
                printf("2. moyen choix d'un nombre entre 1 et 1000\n");
                printf("3. difficile choix d'un nombre entre 1 et 10 000\n\n");
                printf("indiquez votre choix de niveau : ");
                scanf("%ld", &difficultee);
         
                // acces à l'une des parties
                switch (difficultee)
              {
                case 1:
                     printf("vous devez choisir un nombre entre 1 et 100\n");
                     max = 100;
                     break;
         
                case 2:
                     printf("vous devez choisir un nombre entre 1 et 1000\n");
                     max = 1000;
                     break;
         
                case 3:
                     printf("vous devez choisir un nombre entre 1 et 10 000\n");
                     max = 10000;
                     break;
         
                default:
                     printf("vous ne savez pas lire donc vous fairez le niveau facile \n");
                     max = 100;
                     break;
                }
               
              mystere= (rand() % (max - min + 1)) + min; 
             
                //boucle de repetition pour trouver le nombre mystere
                do
                {
                 coup++;
                 printf("quel est le nombre ?");
                 scanf("%ld", &nb);
                 
                 if (mystere >nb)
                    printf("c'est plus grand !\n");
                 else if (mystere < nb)
                    printf("c'est plus petit !\n");
                 else
                    printf("bravo vous avez trouve le nombre mysterieux en %ld coup \n\n",coup);
                 }
                 while (mystere != nb);
                 
                 }
         
         
           else if (nbJoueur == 2)
          {
                 printf("vous jouer a 2 \n");
                 printf("que le joeur 1 entre un nombre entier que le joeur 2 va determiner : ");
                 scanf("%ld", &mystere);
                 printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
             
                 //boucle de répétition pour trouver le nombre mystere
                 do
                 {
                  coup++;
                  printf("quel est le nombre ?");
                  scanf("%ld", &nb);
                  if (mystere >nb)
                    printf("c'est plus grand !\n");
                  else if (mystere < nb)
                    printf("c'est plus petit !\n");
                  else
                    printf("bravo vous avez trouve le nombre mysterieux en %ld coup \n\n",coup);
                  }
                  while (mystere != nb);
                 
                  //demande de rejouer
            }
         
         
          else
          {
                  printf("vous ne savez pas lire, c'est fini pour vous!!!!\n\n");
                  partie = 0;
         
          }
                   // demande de rejouer
                 printf("voulez vous rejouer ?\n");
                 printf("tapez 1 pour oui et zero 0 pour quitter, votre choix : ");
                 scanf("%ld", &partie);
        }

         
          return 0;
        }
        • Partager sur Facebook
        • Partager sur Twitter
          18 juillet 2006 à 18:08:48

          je vous remercie pour votre aide :D , mais ta solution marche très bien en enlevant le premier switch pour le nombre de joueurs, en remplaçant par if.
          Merci beaucoup ;)
          Je croyait que le switch ou le if est exactement pareil avec une forme un peu differente.
          • Partager sur Facebook
          • Partager sur Twitter
            18 juillet 2006 à 20:20:42

            Bonjour tout le monde ! J'ai le meme soucis mais mon code est different donc je vous le donne et puis si vous trouvez la faille au compteur et ben dites le moi ! merci d'avance !



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

            int main(int argc, char *argv[])
            {
            long nombreMaximum = 0, nombreMinimum = 0;
            long nombreUtilisateur = 0, nombreMystere = 0, NbrDeCoups =0,RejouerPartie =0, ChoixNiveau =0;

            printf("Bienvenue dans le Mini Jeu... il s'agit de trouver un nombre generer en un minimum de fois !!\n");
            printf("A vous de jouer... Good Luck ;)\n");
            do
            {

            srand(time(NULL));
            nombreMystere = (rand() % (nombreMaximum - nombreMinimum + 1)) + nombreMinimum;
            printf(":.Choisissez votre niveau:.\n\n");
            printf("1. Niveau Facile : 0 - 100\n");
            printf("2. Niveau Moyen : 0 - 500\n");
            printf("3. Niveau Difficile : 0 - 1000\n");
            scanf("%ld", &ChoixNiveau);

            if (ChoixNiveau == 1)
            {
            nombreMaximum = 100, nombreMinimum = 0;
            nombreMystere = (rand() % (nombreMaximum - nombreMinimum + 1)) + nombreMinimum;
            }
            else if (ChoixNiveau == 2)
            {
            nombreMaximum = 500, nombreMinimum = 0;
            nombreMystere = (rand() % (nombreMaximum - nombreMinimum + 1)) + nombreMinimum;
            }
            else if (ChoixNiveau == 3)
            {
            nombreMaximum = 1000, nombreMinimum = 0;
            nombreMystere = (rand() % (nombreMaximum - nombreMinimum + 1)) + nombreMinimum;
            }
            do
            {
            printf(" Quel est le nombre ?");
            scanf("%ld", &nombreUtilisateur);
            NbrDeCoups++;
            if (nombreUtilisateur < nombreMystere)
            {
            printf("C'est plus...\n\n");
            }
            else if (nombreUtilisateur > nombreMystere)
            {
            printf("C'est moins...\n\n");
            }
            else if(nombreUtilisateur == nombreMystere)
            {
            printf("C'est gagne, en %ld coups!!!\n\n", NbrDeCoups);
            }
            printf("voulez vous refaire une partie ?\n\n Si vous voulez en refaire une, tapez 1 sinon pour finir le programme tapez 2! Have Fun ^^\n");
            scanf("%ld", &RejouerPartie);
            } while(nombreUtilisateur != nombreMystere);
            } while(RejouerPartie == 1);

            system("PAUSE");
            return 0;
            }
            • Partager sur Facebook
            • Partager sur Twitter
              18 juillet 2006 à 20:29:36

              V'la un code vite fait qui marche. Bon, je passe plus à indenter vos codes, ni à le retravailler correctement.
              J'ai fais une modif pour la boucle (j'utilise while au lieu de do.. while), j'utilise différement RejouerPartie.
              Le problème du prog était que tu demandais systématique si on voulait rejouer à la fin de la boucle do..while au lieu de while (la 1ere), ce qui avait comme effet de proposer de rejouer avant que la partie soit terminée.

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

              int main(int argc, char *argv[])
              {
              long nombreMaximum = 0, nombreMinimum = 0;
              long nombreUtilisateur = 0, nombreMystere = 0, NbrDeCoups =0,RejouerPartie =1, ChoixNiveau =0;

              printf("Bienvenue dans le Mini Jeu... il s'agit de trouver un nombre generer en un minimum de fois !!\n");
              printf("A vous de jouer... Good Luck ;)\n");

              while (RejouerPartie)
              {

              srand(time(NULL));
              nombreMystere = (rand() % (nombreMaximum - nombreMinimum + 1)) + nombreMinimum;
              printf(":.Choisissez votre niveau:.\n\n");
              printf("1. Niveau Facile : 0 - 100\n");
              printf("2. Niveau Moyen : 0 - 500\n");
              printf("3. Niveau Difficile : 0 - 1000\n");
              scanf("%ld", &ChoixNiveau);

              if (ChoixNiveau == 1)
              {
              nombreMaximum = 100, nombreMinimum = 0;
              nombreMystere = (rand() % (nombreMaximum - nombreMinimum + 1)) + nombreMinimum;
              }
              else if (ChoixNiveau == 2)
              {
              nombreMaximum = 500, nombreMinimum = 0;
              nombreMystere = (rand() % (nombreMaximum - nombreMinimum + 1)) + nombreMinimum;
              }
              else if (ChoixNiveau == 3)
              {
              nombreMaximum = 1000, nombreMinimum = 0;
              nombreMystere = (rand() % (nombreMaximum - nombreMinimum + 1)) + nombreMinimum;
              }
              do
              {
              printf(" Quel est le nombre ?");
              scanf("%ld", &nombreUtilisateur);
              NbrDeCoups++;
              if (nombreUtilisateur < nombreMystere)
              {
              printf("C'est plus...\n\n");
              }
              else if (nombreUtilisateur > nombreMystere)
              {
              printf("C'est moins...\n\n");
              }
              else if(nombreUtilisateur == nombreMystere)
              {
              printf("C'est gagne, en %ld coups!!!\n\n", NbrDeCoups);
              }


              } while(nombreUtilisateur != nombreMystere);

              printf("voulez vous refaire une partie ?\n\n Si vous voulez en refaire une, tapez 1 sinon pour finir le programme tapez 0! Have Fun ^^\n");
              scanf("%ld", &RejouerPartie);
              }

              system("PAUSE");
              return 0;
              }
              • Partager sur Facebook
              • Partager sur Twitter
                18 juillet 2006 à 20:42:54

                Merci coyotte49 de la rapidité de ta réponse mais il reste un pbm... quand l'utilisateur veut refaire une partie, et que par exemple, a la premier partie il a trouvé le nombre en 9 fois et qu'a la deuxieme il l'a trouvé en 6 fois, en ben a la deuxieme partie, le programme dit "vous avez trouver le nombre en 15 fois!" alors qu'il aurait du mettre qu'on a trouver le nombre en 6 fois !!

                merci d'avance, sinon tampis ;) a+
                • Partager sur Facebook
                • Partager sur Twitter
                  18 juillet 2006 à 22:03:45

                  Salut, le problmème est que dés que le joueur demande à refaire une partie ben étant donné que la variable NbrDeCoup à déjà la valeur des nombres de coup d'avant, sa ne peut que s'accumuler.
                  Ce qu'il fallait faire :

                  long NbrDeCoups = 0;
                  do
                  {
                  NbrDeCoups++;
                  //suite de ton programme


                  Je n'ai pas mis tout ton code hein.
                  Lorsqu'on arrive à cette ligne "NbrDeCoups" qui avait déjà une valeur est de nouveau initialisé pour refaire une partie, voilà sa marche ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 juillet 2006 à 14:06:46

                    Merci beaucoup beaucoup !!!! ça marche grace a toi ;) a+ et encore merci !!
                    • Partager sur Facebook
                    • Partager sur Twitter

                    problème avec la partie 1 tp n°8

                    × 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