Partage
  • Partager sur Facebook
  • Partager sur Twitter

Plus ou Moins

Sujet résolu
    13 août 2008 à 17:26:18

    Bonjour, je suis nouveau sur le site =) Mais j'ai déja un problème :p

    Alors voila, j'ai fais le jeu 'Plus ou Moins' sans aucun problème, et j'essaye maintenant de 'continuer le programme' tel qu'il est conseillé de faire à la fin du tutorial. J'ai réussi à faire la 1ere étape, pour qu'il nous dise en combien de coups on a réussi. Mais je n'arrive pas à faire en sorte qu'il nous demande si on veux refaire une partie... Voici mon code :

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main(int argc, char *argv[])
    {
    
        const long MAX = 100, MIN = 1;
        long nombreMystere = 0;
        long resultat = 0;
        long compteur = 0;
        
        srand(time(NULL));
        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
        
        printf("Le but de ce jeu est de trouver un nombre choisis aleatoirement, compris entre 1 et 100\n");
        do
        {
                   printf("Quel est le nombre ? ");
                   scanf("%ld", &resultat);
                   printf("\n");
                   compteur++;
                   
                   if (nombreMystere == resultat)
                   {
                        printf("Bravo, vous avez trouve le nombre mystere en %ld coups !!!\n\n", compteur);
                   }
                   else if (resultat > nombreMystere)
                   {
                        printf("C'est moins !\n");
                   }
                   else
                   {
                        printf("C'est plus !\n");
                   }
                   
        }
        while (resultat != nombreMystere);
      
      system("PAUSE");	
      return 0;
    }
    


    Une aide serait la bienvenue :p
    • Partager sur Facebook
    • Partager sur Twitter
      13 août 2008 à 17:32:03

      Bonjour,

      Ça paraît simple :
      – Tu affiches, une fois que l'utilisateur a trouvé le nombre, « Voulez-vous rejouer ? »
      – Tu récupères la réponse (1 ou 0 par exemple), que tu stockes dans une variable « booléenne » (enfin, qui aura un rôle de booléen)
      – Niveau code, tu englobes ton programme principal dans une boucle faire…tant que(recommencer) (⇒ do…while).

      ++
      • Partager sur Facebook
      • Partager sur Twitter
        13 août 2008 à 17:34:51

        Citation : jojo130194

        Alors voila, j'ai fais le jeu 'Plus ou Moins' sans aucun problème, et j'essaye maintenant de 'continuer le programme' tel qu'il est conseillé de faire à la fin du tutorial. J'ai réussi à faire la 1ere étape, pour qu'il nous dise en combien de coups on a réussi. Mais je n'arrive pas à faire en sorte qu'il nous demande si on veux refaire une partie... Voici mon code :


        Ton code est correct. Il se résume à :
        initialiser le générateur pseudo-aleatoire
        nombre := tirage
        jouer (nombre)

        Pour recommencer, il suffit de faire ceci :
        initialiser le générateur pseudo-aleatoire
        faire
         nombre := tirage
         jouer (nombre)
         encore := demander
        tant que encore

        Il ne reste plus qu'à traduire ça en C...
        • Partager sur Facebook
        • Partager sur Twitter
        Music only !
          13 août 2008 à 17:53:45

          Bonjour le nouveau d'abord je vous souhaite le bienvenue, :)
          pour votre problème vous pouvez entourer votre code du jeu avec une boucle do..while dont la condition sera le choix de l'utilisateur et voici un schéma: ;)
          Image utilisateur
          Bon travail. :p
          • Partager sur Facebook
          • Partager sur Twitter
            13 août 2008 à 18:00:21

            Merci d'avoir répondu :) J'ai modifié mon code, mais cela ne marche toujours pas :'(

            #include <stdio.h>
            #include <stdlib.h>
            #include <time.h>
            
            int main(int argc, char *argv[])
            {
            
                long partie = 0;
                const long MAX = 100;
                const long MIN = 1;
                long nombreMystere = 0;
                long resultat = 0;
                long compteur = 0;
                
                srand(time(NULL));
                do
                {
                nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
                
                printf("Le but de ce jeu est de trouver un nombre choisis aleatoirement, compris entre 1 et 100\n");
                do
                {
                           printf("Quel est le nombre ? ");
                           scanf("%ld", &resultat);
                           printf("\n");
                           compteur++;
                           
                           if (nombreMystere == resultat)
                           {
                                printf("Bravo, vous avez trouve le nombre mystere en %ld coups !!!\n\n", compteur);
                                printf("Souhaitez-vous rejouer ? Tapez 1 pour oui, ou 0 pour non : ");
                                scanf("%ld", partie);
                           }
                           else if (resultat > nombreMystere)
                           {
                                printf("C'est moins !\n");
                           }
                           else
                           {
                                printf("C'est plus !\n");
                           }
                           
                }
                while (resultat != nombreMystere);
                
                }
                while (partie == 1);
              
              system("PAUSE");	
              return 0;
            }
            
            • Partager sur Facebook
            • Partager sur Twitter
              13 août 2008 à 18:04:35

              un ptit & à coté de partie dans le scanf? ;)
              • Partager sur Facebook
              • Partager sur Twitter
                13 août 2008 à 18:07:09

                Normal, la syntaxe du scanf que t'a donné smartghost sur son schéma est fausse.
                À la ligne 32, il faut mettre : scanf("%ld", &partie); (ne pas oublier le &).

                Sinon, quelques petites remarques :
                – Les arguments du main (int argc, char *argv[]) ne te servent à rien ici, tu peux les virer.
                – Pourquoi utiliser des long à tire-larigot ? Surtout lorsque des int suffisent pour couvrir le besoin…
                – Ton indentation est assez bonne mais irrégulière (pourquoi indenter de 11 espaces dans ta boucle do…while (lignes 23 à 41). Et pourquoi le bloc lignes 18 à 45 n'est il pas indenté ? Pour la largeur de l'indentation, 4 espaces semble être un bon choix.

                ++
                • Partager sur Facebook
                • Partager sur Twitter
                  13 août 2008 à 18:45:04

                  ah je suis vraiment désolé pour cette erreur.
                  Et je suis pour les remarques de Fedorux !
                  • Partager sur Facebook
                  • Partager sur Twitter
                    13 août 2008 à 18:50:43

                    Merci beaucoup à tout le monde, cela marche enfin :p
                    Et pour l'indentation, mon IDE ( Dev-C++ ) les fait automatiquement... :(
                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 août 2008 à 18:53:05

                      Citation : jojo130194

                      Merci beaucoup à tout le monde, cela marche enfin :p
                      Et pour l'indentation, mon IDE ( Dev-C++ ) les fait automatiquement... :(


                      Ben selon moi il le fait automatiquement mal.
                      Tu devrais pouvoir arranger cela manuellement, non ? ;)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 août 2008 à 22:12:08

                        Oui c'est possible :D

                        Mais j'ai... un autre problème maintenant :'(

                        Je suis au derniere chapitre de la partie 1, à savoir "Les fonctions"...

                        Tout à la fin du cours, après même le QCM, il y a un exercice ^^ Que je n'arrive pas à finir... :'(

                        Voila mon code :

                        #include <stdio.h>
                        #include <stdlib.h>
                        #include <time.h>
                            
                        long genereNombre(long MIN, long MAX, long nombreMystere)
                        {
                             srand(time(NULL));
                             nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
                             return nombreMystere;
                        }
                        
                        void compareNombres(long nombreEntre, long nombreMystere)
                        {
                             if(nombreEntre > nombreMystere)
                             {
                                 printf("C'est moins !");
                             }
                             else if (nombreEntre < nombreMystere)
                             {
                                 printf("C'est plus !");
                             }
                             else
                             {
                                 printf("Bravo ! Vous avez trouve le nombre mystere !!!");
                             }
                        
                        int main ( int argc, char** argv )
                        {
                            long nombreMystere = 0, nombreEntre = 0;
                            const long MAX = 100, MIN = 1;
                            
                            // Génération du nombre aléatoire
                            nombreMystere = genereNombre(MIN, MAX);
                            
                            /* La boucle du programme. Elle se répète tant que l'utilisateur
                            n'a pas trouvé le nombre mystère */
                            
                            do
                            {
                                // On demande le nombre
                                printf("Quel est le nombre ? ");
                                scanf("%ld", &nombreEntre);
                            
                                // On compare le nombre entré avec le nombre mystère
                                compareNombres(nombreEntre, nombreMystere);
                            
                            } while (nombreEntre != nombreMystere);
                            
                            
                            system("PAUSE");
                            return 0;
                        }
                        
                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 août 2008 à 22:16:24

                          Citation : jojo130194

                          Tout à la fin du cours, après même le QCM, il y a un exercice ^^ Que je n'arrive pas à finir... :'(

                          Voila mon code :


                          Une indentation automatique du code montre qu'il manque une } :
                          #include <stdio.h>
                          #include <stdlib.h>
                          #include <time.h>
                          
                          long genereNombre (long MIN, long MAX, long nombreMystere)
                          {
                             srand (time (NULL));
                             nombreMystere = (rand () % (MAX - MIN + 1)) + MIN;
                             return nombreMystere;
                          }
                          
                          void compareNombres (long nombreEntre, long nombreMystere)
                          {
                             if (nombreEntre > nombreMystere)
                             {
                                printf ("C'est moins !");
                             }
                             else if (nombreEntre < nombreMystere)
                             {
                                printf ("C'est plus !");
                             }
                             else
                             {
                                printf ("Bravo ! Vous avez trouve le nombre mystere !!!");
                             }
                          
                             int main (int argc, char **argv)
                             {
                                long nombreMystere = 0, nombreEntre = 0;
                                const long MAX = 100, MIN = 1;
                          
                          /* Génération du nombre aléatoire */
                          
                                nombreMystere = genereNombre (MIN, MAX);
                          
                          /* La boucle du programme. Elle se répète tant que l'utilisateur
                              
                              n'a pas trouvé le nombre mystère */
                          
                                do
                                {
                          /* On demande le nombre */
                          
                                   printf ("Quel est le nombre ? ");
                                   scanf ("%ld", &nombreEntre);
                          
                          /* On compare le nombre entré avec le nombre mystère */
                          
                                   compareNombres (nombreEntre, nombreMystere);
                          
                                }
                                while (nombreEntre != nombreMystere);
                          
                                system ("PAUSE");
                                return 0;
                             }
                          
                          /* 4 comments processed by CMT2 1.0 (c) ED 2007 */
                          

                          une fois la } manquante ajoutée, ça donne :
                          #include <stdio.h>
                          #include <stdlib.h>
                          #include <time.h>
                          
                          long genereNombre (long MIN, long MAX, long nombreMystere)
                          {
                             srand (time (NULL));
                             nombreMystere = (rand () % (MAX - MIN + 1)) + MIN;
                             return nombreMystere;
                          }
                          
                          void compareNombres (long nombreEntre, long nombreMystere)
                          {
                             if (nombreEntre > nombreMystere)
                             {
                                printf ("C'est moins !");
                             }
                             else if (nombreEntre < nombreMystere)
                             {
                                printf ("C'est plus !");
                             }
                             else
                             {
                                printf ("Bravo ! Vous avez trouve le nombre mystere !!!");
                             }
                          }                               /* -ed- ajoute */
                          
                          int main (int argc, char **argv)
                          {
                             long nombreMystere = 0, nombreEntre = 0;
                             const long MAX = 100, MIN = 1;
                          
                          /* Génération du nombre aléatoire */
                          
                             nombreMystere = genereNombre (MIN, MAX);
                          
                          /* La boucle du programme. Elle se répète tant que l'utilisateur
                          
                              n'a pas trouvé le nombre mystère */
                          
                             do
                             {
                          /* On demande le nombre */
                          
                                printf ("Quel est le nombre ? ");
                                scanf ("%ld", &nombreEntre);
                          
                          /* On compare le nombre entré avec le nombre mystère */
                          
                                compareNombres (nombreEntre, nombreMystere);
                          
                             }
                             while (nombreEntre != nombreMystere);
                          
                             system ("PAUSE");
                             return 0;
                          }
                          
                          /* 4 comments processed by CMT2 1.0 (c) ED 2007 */
                          

                          avec les messages suivants :
                          -------------- Build: Debug in hello ---------------
                          
                          Compiling: main.c
                          C:\dev\hello\main.c: In function `main':
                          C:\dev\hello\main.c:35: error: too few arguments to function `genereNombre'
                          C:\dev\hello\main.c: At top level:
                          C:\dev\hello\main.c:28: warning: unused parameter 'argc'
                          C:\dev\hello\main.c:28: warning: unused parameter 'argv'
                          Process terminated with status 1 (0 minutes, 0 seconds)
                          1 errors, 2 warnings

                          On voit bien qu'il y a un problème avec les paramètres de genereNombre() :
                          long genereNombre (long MIN, long MAX, long nombreMystere)
                          {
                             srand (time (NULL));
                             nombreMystere = (rand () % (MAX - MIN + 1)) + MIN;
                             return nombreMystere;
                          }
                          

                          en effet, cette fonction a plusieurs défauts.

                          1 - Les deux seuls paramètres utiles sont MIN et MAX le troisième est inutile, puisque c'est une valeur que l'on va retourner. Par contre, ça doit être une variable locale.

                          2 - srand() ne doit être appelée qu'une seule fois dans toute l'exécution du programme. Sa place n'est donc pas dans une fonction qui risque d'être appelée plusieurs fois.

                          Sinon, attention à bien terminer les textes 'console' par un '\n'. C'est du simple bon sens pour obtenir une présentation correcte...

                          Je propose donc ceci :
                          #include <stdio.h>
                          #include <stdlib.h>
                          #include <time.h>
                          
                          long genereNombre (long MIN, long MAX)
                          {
                          
                             long nombreMystere = (rand () % (MAX - MIN + 1)) + MIN;
                             return nombreMystere;
                          }
                          
                          void compareNombres (long nombreEntre, long nombreMystere)
                          {
                             if (nombreEntre > nombreMystere)
                             {
                                printf ("C'est moins !\n");
                             }
                             else if (nombreEntre < nombreMystere)
                             {
                                printf ("C'est plus !\n");
                             }
                             else
                             {
                                printf ("Bravo ! Vous avez trouve le nombre mystere !!!\n");
                             }
                          }                               /* -ed- ajoute */
                          
                          int main (void)
                          {
                             long nombreMystere = 0, nombreEntre = 0;
                             const long MAX = 100, MIN = 1;
                          
                             /* initialisation (unique) du generateur de nombres pseudo-aleatoires */
                             srand (time (NULL));
                          
                             /* Génération du nombre aléatoire */
                             nombreMystere = genereNombre (MIN, MAX);
                          
                             /* La boucle du programme. Elle se répète tant que l'utilisateur
                                n'a pas trouvé le nombre mystère */
                          
                             do
                             {
                          /* On demande le nombre */
                          
                                printf ("Quel est le nombre ? ");
                                scanf ("%ld", &nombreEntre);
                          
                                /* On compare le nombre entré avec le nombre mystère */
                                compareNombres (nombreEntre, nombreMystere);
                          
                             }
                             while (nombreEntre != nombreMystere);
                          
                             return 0;
                          }
                          
                          /* 4 comments processed by CMT2 1.0 (c) ED 2007 */
                          

                          Quel est le nombre ? 50
                          C'est moins !
                          Quel est le nombre ? 25
                          C'est moins !
                          Quel est le nombre ? 12
                          C'est plus !
                          Quel est le nombre ? 18
                          C'est plus !
                          Quel est le nombre ? 22
                          C'est plus !
                          Quel est le nombre ? 23
                          Bravo ! Vous avez trouve le nombre mystere !!!
                          
                          Process returned 0 (0x0)   execution time : 25.126 s
                          Press any key to continue.
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Music only !
                            13 août 2008 à 22:28:52

                            Certes, mais même en ayant rajouté l'accolade manquante, le problème persiste :(

                            #include <stdio.h>
                            #include <stdlib.h>
                            #include <time.h>
                            
                            long genereNombre (long MIN, long MAX, long nombreMystere)
                            {
                               srand (time (NULL));
                               nombreMystere = (rand () % (MAX - MIN + 1)) + MIN;
                               return nombreMystere;
                            }
                            
                            void compareNombres (long nombreEntre, long nombreMystere)
                            {
                               if (nombreEntre > nombreMystere)
                               {
                                  printf ("C'est moins !");
                               }
                               else if (nombreEntre < nombreMystere)
                               {
                                  printf ("C'est plus !");
                               }
                               else
                               {
                                  printf ("Bravo ! Vous avez trouve le nombre mystere !!!");
                               }
                            }
                            
                               int main (int argc, char **argv)
                               {
                                  long nombreMystere = 0, nombreEntre = 0;
                                  const long MAX = 100, MIN = 1;
                            
                            /* Génération du nombre aléatoire */
                            
                                  nombreMystere = genereNombre (MIN, MAX);
                            
                            /* La boucle du programme. Elle se répète tant que l'utilisateur
                                
                                n'a pas trouvé le nombre mystère */
                            
                                  do
                                  {
                            /* On demande le nombre */
                            
                                     printf ("Quel est le nombre ? ");
                                     scanf ("%ld", &nombreEntre);
                            
                            /* On compare le nombre entré avec le nombre mystère */
                            
                                     compareNombres (nombreEntre, nombreMystere);
                            
                                  }
                                  while (nombreEntre != nombreMystere);
                            
                                  system ("PAUSE");
                                  return 0;
                               }
                            
                            • Partager sur Facebook
                            • Partager sur Twitter
                              13 août 2008 à 22:29:46

                              Citation : jojo130194

                              Certes, mais même en ayant rajouté l'accolade manquante, le problème persiste


                              Déjà expliqué et corrigé...
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Music only !
                                13 août 2008 à 22:35:26

                                Ah oui... :'( Veuillez m'excusez pour mon inattention, et encore merci pour tout ! :)
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Plus ou Moins

                                × 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