Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'amélioration dans le TP 1...

Sujet résolu
    16 juin 2006 à 10:45:38

    Bonjour à tous, :)

    Je suis un zéro (ô grande surprise...). J'ai commencé les cours de C++ mais j'ai eu un problème en essayant d'améliorer le premier TP (en mettant des vies et en mettant perdu quand c'est fini... Problème je n'y arrive pas le programme se bloque. J'ai essayé de plusieurs façon mais rien à faire... :(
    Pourriez-vous m'aider SVP ?

    Voici le code : (sans le début et sans la fin)

    const long max = 100, min = 1;
    long nbmystere = 0, nbtape = 0, vie = 5;

    srand(time(NULL));
    nbmystere = (rand () % (max - min + 1 )) + min;

    printf("Bienvenue !\n");



    while (nbmystere != nbtape) // tant que on ne trouve pas
    {//2
    while (vie > 0)
    {//2.5
    if (vie > 0)
    {//2.25


    printf("Tapez un nombre !\n");
    scanf("%ld", &nbtape);


    if (nbtape < nbmystere)
    { //3
    printf("C'est plus ! Vous avez encore %ld vie(s)\n", vie);
    vie--;
    } //3
    else if (nbtape > nbmystere)
    { //3
    printf("C'est moins ! Vous avez encore %ld vie(s)\n", vie);
    vie--;
    } //3
    else
    { //3
    printf("BRAVO ! C'etait effectivement %ld ! Vous aviez encore %ld vie(s)\n ", nbtape, vie);
    } //3
    }//2.25


    else
    {
    printf("FINI !");
    }
    }//2.5

    }//2

    Je ne vois pas où est l'erreur car mettre une boucle dans une boucle dans une boucle c'est possible nan ? (En tout cas en Liberty basic c'était possible... o_O )

    Voilà je vous remercie !
    • Partager sur Facebook
    • Partager sur Twitter
      16 juin 2006 à 10:56:54

      edit ton message avec les balises (en haut code--> "prog" C et tu fais copier coller dedans) ;)
      car c' est ilisible en format text :euh:
      • Partager sur Facebook
      • Partager sur Twitter
        16 juin 2006 à 11:10:31

        dsl je ne comprend rien du tout: mes les balises stp
        • Partager sur Facebook
        • Partager sur Twitter
          16 juin 2006 à 11:20:04

          nn toujours pas sa: regarde dans la liste déroulante
          • Partager sur Facebook
          • Partager sur Twitter
            16 juin 2006 à 11:20:59

            C'est beaucoup mieux comme ça. Ca nous aide plus. Il y a un topic sur les règles du forum ici
            • Partager sur Facebook
            • Partager sur Twitter
              16 juin 2006 à 11:29:13

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

              int main(int argc, char *argv[])
              { //1

              const long max = 100, min = 1;
              long nbmystere = 0, nbtape = 0, vie = 5;

              srand(time(NULL));
              nbmystere = (rand () % (max - min + 1 )) + min;

              printf("Bienvenue !\n");



              while (nbmystere != nbtape) // tant que on ne trouve pas
              {//2
                  while (vie > 0)
                  {//2.5
                      if (vie > 0)
                          {//2.25


                      printf("Tapez un nombre !\n");
                      scanf("%ld", &nbtape);


                  if (nbtape < nbmystere)
                  { //3
                      printf("C'est plus ! Vous avez encore %ld vie(s)\n", vie);
                      vie--;
                  } //3
                  else if (nbtape > nbmystere)
                  { //3
                      printf("C'est moins ! Vous avez encore %ld vie(s)\n", vie);
                      vie--;
                  } //3
                  else
                  { //3
                      printf("BRAVO ! C'etait effectivement %ld ! Vous aviez encore %ld vie(s)\n ", nbtape, vie);
                  } //3
              }//2.25


              else
              {
                  printf("FINI !");
              }
              }//2.5

              }//2


                system("PAUSE");
                return 0;
              }//1


              Désolé ^^
              • Partager sur Facebook
              • Partager sur Twitter
                16 juin 2006 à 12:07:32

                alors essaye d'enlever le
                else
                    { //3
                        printf("BRAVO ! C'etait effectivement %ld ! Vous aviez encore %ld vie(s)\n ", nbtape, vie);
                    } //
                du while, et remplace le après la boucle par :
                printf("Bravo le nombre mystere etait %ld trouver en %ld coups \n\n", nbMystere, vie);


                PS: Tu n'est pas obligé de mettre les {} quand il y a qu'une seul condition a exécuter
                • Partager sur Facebook
                • Partager sur Twitter
                  16 juin 2006 à 12:45:08

                  Merci mais ça donne une boucle à l'infini... o_O

                  Sinon je sais pour les {} quand il s'agit d'une seule condition mais je préfère les mettre pour mieux m'y retrouver dans le code.

                  Aide-moi s'il te plaît je suis sûr que t'as dit un truc juste mais je comprends pas. Merci pour la patience ^^
                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 juin 2006 à 13:08:26

                    tien voici mon code de mon jeu qui fonctionne parfaitement bien, tu trouvera surement tes erreur:
                    #include <stdio.h>
                    #include <stdlib.h>
                    #include <time.h>

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

                    long MAX, MIN;   
                    int flag = 1;

                    do
                    {
                        int choixPartie;
                        int error=1;
                         
                         do {
                              error=0;
                         
                         printf("****LVL Parties****\n\n");
                    printf("1 = entre 1 et 100\n");
                    printf("2 = entre 1 et 1000\n");
                    printf("3 = entre 1 et 10000\n\n");
                    printf("Votre choix : ");
                    scanf("%d", &choixPartie);

                       
                      switch (choixPartie){
                             case 1 : MAX=100;
                                            break;
                             case 2 : MAX=1000;
                                            break;
                             case 3 : MAX=10000;
                                            break;
                            defaultprintf("valeur incorrecte \n");
                                            error=1;
                                            break;
                            } } while(error);   
                       
                        long nombreEntrer = 0, coup = 0;
                        srand(time(NULL));
                        long nombreMystere = (rand() % (MAX - MIN + 1) + MIN);

                           
                       
                        while(nombreEntrer != nombreMystere)
                        {
                            printf("Quel est le nombre mystere? \n");
                            scanf("%ld", &nombreEntrer);
                            if (nombreMystere > nombreEntrer)
                            {
                                printf("C'est plus grand \n\n");
                            }
                            else if (nombreMystere < nombreEntrer)
                            {
                                printf("C'est plus petit \n\n");
                            }
                        coup++;
                        }

                    printf("Bravo le nombre mystere etait %ld trouver en %ld coups \n\n", nombreMystere, coup);

                    printf("Tape 1 pour recommencer une nouvelle partie ou tape 0 pour areter le jeu\n\n"); // on demande si on ve refaire le truc
                    printf("Veut tu recommencer : ");
                    scanf("%ld",&flag);

                    } while(flag == 1);

                    printf("\nMerci d'avoir participer!! \n\n <<<<<By El Diablo 7>>>>>");
                    system("PAUSE >nul");

                    return 0;
                    }
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 juin 2006 à 13:14:16

                      Merci mais ton jeu ne contient pas de vie... Il y a juste un compteur. Enfin c'est pas grave et un grand merci à toi d'avoir essayé de m'aider !
                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 juin 2006 à 13:25:58

                        essaye de faire ton jeu avec un do..while a la place d'un simple while, c'est surement mieu
                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 juin 2006 à 13:28:32

                          le système de vie n'est-il pas l'inverse d'un compteur oO
                          • Partager sur Facebook
                          • Partager sur Twitter
                            16 juin 2006 à 13:34:54

                            Déjà, edit tes messages au lieu de poster un code plusieurs fois. :)
                            Et aussi, évite tes commentaires après les accolades.
                            Concernant ton code, en voici un plus optimisé et qui marche :

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

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

                            const long max = 100, min = 1;
                            long nbmystere = 0, nbtape = 0, vie = 5;

                            srand(time(NULL));
                            nbmystere = (rand () % (max - min + 1 )) + min;

                            printf("Bienvenue !\n");


                            while (nbmystere != nbtape && vie != 0) /* tant que on ne trouve pas et qu'on a pas 0 vie */
                            {
                              vie--;
                              printf("Tapez un nombre !\n");
                              scanf("%ld", &nbtape);

                                 if (nbtape < nbmystere)
                                {
                                    printf("C'est plus ! Vous avez encore %ld vie(s)\n", vie);
                                }
                                 else if (nbtape > nbmystere)
                                {
                                    printf("C'est moins ! Vous avez encore %ld vie(s)\n", vie);
                                }
                                 else
                                {
                                    printf("BRAVO ! C'etait effectivement %ld ! Vous aviez encore %ld vie(s)\n ", nbtape, vie + 1);
                                }
                             
                            }

                              if (vie == 0)
                                printf("Perdu ! \n");
                             
                             
                              system("PAUSE");
                              return 0;
                            }

                            }


                            • Partager sur Facebook
                            • Partager sur Twitter
                              16 juin 2006 à 13:41:02


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

                              int main(int argc, char *argv[])
                              { //1

                              const long max = 100, min = 1;
                              long nbmystere = 0, nbtape = 0, vie = 5;
                               
                              srand(time(NULL));
                              nbmystere = (rand () % (max - min + 1 )) + min;

                              printf("Bienvenue !\n");



                              while (nbmystere != nbtape) // tant que on ne trouve pas
                              /*--> je ne comprend pas pourquoi tu ne sors pas si tu n'as plus de vie?!? o_O*/
                              {//2
                                  while (vie > 0)
                                  {//2.5
                                   /*-->j'ai l'impression que le if ne sert à rien...Dès que tu sors du while, cela veut dire que tu n'as plus de vie (ou du moins que vie <=0)..*/
                                      if (vie > 0) //
                                          {//2.25


                                      printf("Tapez un nombre !\n");
                                      scanf("%ld", &nbtape);


                                  if (nbtape < nbmystere)
                                  { //3
                                      printf("C'est plus ! Vous avez encore %ld vie(s)\n", vie);
                                      vie--;
                                  } //3
                                  else
                              /*peut etre essayer de bien séparer les if...*/   
                                  {
                                  if (nbtape > nbmystere)
                                  { //3
                                      printf("C'est moins ! Vous avez encore %ld vie(s)\n", vie);
                                      vie--;
                                  } //3
                                  else
                                  { //3
                                      printf("BRAVO ! C'etait effectivement %ld ! Vous aviez encore %ld vie(s)\n ", nbtape, vie);
                                  } //3
                                  }
                              }//2.25

                              /*Ne sert à rien (voir remarque au if s'y rapportant)*/
                              else
                              {
                                  printf("FINI !");
                              }
                              }//2.5

                              }//2


                                system("PAUSE");
                                return 0;
                              }//1

                              J'espère avoir été clair et correct... :)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                16 juin 2006 à 13:42:28

                                Merci beaucoup. Pour répondre à Minaithnir non, le système de vie ce n'est pas comme le système de compteur car au bout d'un certain nombres de vies perdues il s'agit d'arrêter le jeu.
                                El diablo 7, j'ai déjà essayé avec do... while qui est plus logique mais rien à faire...
                                C'est sympa Coyotte49, je vais l'étudier et voir mes erreurs !

                                Murbain165 c'est cool mais si je mais pas le premier while dans le deuxième la boucle se répête sans toutefois passer par la boucle TANT QUE vie != 0 ? Non ce n'est pas ça ?

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 juin 2006 à 13:50:48

                                  tien, je ne comprend rien a ton code, tu n'a probvabement pas la même logique que moi. Cependent, tu peux essayer de comprendre le mien. Je pense avoir fais toutes les ameliorations que M@teo proposé, je te join ci dessous mon code:
                                  #include <stdio.h>
                                  #include <stdlib.h>

                                  int main(int argc, char *argv[])
                                  {
                                    long rejouer = 1;
                                             // on rejoue par default car le boleen retourne vrai (1)
                                    while (rejouer)
                                    {
                                    long choixMenu, nombreMystere = 0, nombreEntre = 0, nombreDeCoup = 0, difficulte = 0;
                                    long MAX = 0, MIN = 0;

                                    printf("===Difficulte (Single Player Selement)=== \n\n");
                                    printf("1) Facile\n");
                                    printf("2) Normal\n");
                                    printf("3) Difficile\n");
                                    printf("4) Impossible\n");
                                    scanf("%ld", &difficulte);

                                           // On change les valeurs des variable MAX et MIN en fonction de ce que tape l'utilisateur
                                    switch (difficulte)
                                    {
                                        case 1:
                                          MAX = 100;
                                          MIN = 1;
                                          break;
                                        case 2:
                                          MAX = 1000;
                                          MIN = 1;
                                          break;
                                        case 3:
                                          MAX = 10000;
                                          MIN = 1;
                                          break;
                                        case 4:
                                          MAX = 100000;
                                          MIN = 1;
                                          break;
                                        default:         // On met 100-1 soit mode facile par default
                                          MAX = 100;
                                          MIN = 1;
                                          break;
                                    }

                                    printf("=== Menu ===\n\n");
                                    printf("1. Single Player\n");
                                    printf("2. Multi Player\n");
                                    printf("\nVotre choix ? ");
                                    scanf("%ld", &choixMenu);

                                    printf("\n");
                                           // On change de mode
                                      switch (choixMenu)
                                      {
                                          case 1:
                                              srand(time(NULL));
                                              nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
                                              break;
                                          case 2:
                                              printf("Veillez entrer un nombre:");
                                              scanf("%ld", &nombreMystere);
                                              break;
                                          default:
                                              printf("Quoi? Comprend rien! Au revoir!");
                                              break;
                                      }

                                      do
                                      {
                                          // On demande le nombre
                                          printf("Quel est le nombre ? ");
                                          scanf("%ld", &nombreEntre);

                                          // On compare le nombre entré avec le nombre mystère

                                          if (nombreMystere > nombreEntre)
                                          {
                                              printf("C'est plus !\n\n");
                                              nombreDeCoup++;
                                          }
                                          else if (nombreMystere < nombreEntre)
                                          {
                                              printf("C'est moins !\n\n");
                                              nombreDeCoup++;
                                          }
                                          else
                                          {
                                              nombreDeCoup++;
                                              printf ("Bravo, vous avez trouve le nombre mystere en %ld coups!!!\n\n", nombreDeCoup);
                                              printf("===rejouer?===\n\n");
                                              printf("1) Oui \n");
                                              printf("2) Non \n");
                                              scanf("%ld", &rejouer);
                                           // On demande si l'utilisateur veux rejouer
                                              switch (rejouer)
                                              {
                                                  case 1:
                                                      printf("Pas de problème! \n\n");
                                                      break;
                                                  case 2:
                                                      printf("Au revoir et a bientot! \n\n");
                                                      rejouer = 0;
                                                      break;
                                                  default:
                                                      printf("Quoi? comprend pas, desole. Au revoir! \n\n");
                                                      rejouer = 0;
                                                      break;
                                              }
                                          }
                                      } while (nombreEntre != nombreMystere);
                                    }
                                    printf("\n\n");

                                    system("PAUSE");
                                  }



                                  C'est un beau bordel :p je ne pense pas que ce soit bien scripté lol.

                                  Salut.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    16 juin 2006 à 13:56:47

                                    mdr c'est le meme que le mien , regarde en haut
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      16 juin 2006 à 13:59:07

                                      Lol oui mais c'est pas mal du tout. Mais justement je faisait quelque chose d'autre que Mateo-sensei avait proposé, un système de vie.

                                      Coyotte tu es un GENIE :D !!! Voilà ce qui était faux : je mettais deux while, toi tu en mets qu'un seul avec && ! GG et merci !
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        16 juin 2006 à 14:04:42

                                        Citation : Bricklayer

                                        Coyotte tu es un GENIE :D !!!


                                        Et il t'a fallu tout ce temps pour le découvrir ? Je suis déçu... :D:D:D:D:lol:
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          16 juin 2006 à 14:14:45

                                          Mdr oui je suis un peu long à la détente comme tu as pu le constater :D
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Problème d'amélioration dans le TP 1...

                                          × 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