Partage
  • Partager sur Facebook
  • Partager sur Twitter

Amélioration + ou -

Celui des fonctions

    16 août 2006 à 20:08:57

    Bonjour Bonjour
    Voila, je vous expose mon problème.
    Mais avant je souhaite m'excuser, j'avais vu une fois un post d'une personne ayant ce meme probleme mais je ne l'ai pas retrouver.

    Voila, j'ai voulu améliorer le plus ou moin en incluant des niveaux, demande de recommencer et compteur.
    J'ai réussi a le faire une fois, mais voila, Je ne suis pas chez moi là et j'aimerai le refaire.

    Là je viens de faire le restart du jeu. Mais j'ai un probleme, lorsque l'on recommence, le nombre mystere est toujours le meme.
    Il faut relancer le jeu pour qu'il change.
    J'ai cherché, je ne trouve pas mon erreur, pourriez vous m'éclairez s'il vous plait :)
    voila donc mon code:

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


    long compareNombres (long nombreEntre, long nombreMystere)
    {
         if (nombreEntre < nombreMystere)
    {   
         printf(" C'est plus !\\n\\n");
    }   
         else if (nombreEntre > nombreMystere)
    {   
         printf(" C'est moin !\\n\\n");
    }
         else
    {   
         printf("Bravo, vous avez trouve le nombre mystere !\\n\\n");
    }

    }

     
    long genereNombre (const long MIN, const long MAX)
    {
         long nombreMystere;
         
         srand(time(NULL));
         nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
         
         return nombreMystere;
    } 


    int main(int argc, char *argv[])
    {
       
       long nombreMystere = 0, nombreEntre = 0;
       const long MAX = 100, MIN = 1;
       long choix = 0;
       
        // 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);
       
        printf("Souhaitez-vous recommencer ?\\n\\n");
        printf("OUI: Tapez 1\\n");
        printf("NON: Tapez 2\\n");
        scanf("%ld", &choix);
        printf("\\n\\n");
       
        switch (choix)
    {
        case 2:
             printf("\\n\\n*** FIN DU PROGRAMME ***\\n\\n");
             
             system("PAUSE");
             return 0;
             break;
             
        case 1:
             printf("Vous avez choisi de faire une nouvelle partie\\n\\n");
             printf("Initialisation d'une nouvelle partie\\n\\n\\n");
             
             do
    {
                 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);
        printf("Souhaitez-vous recommencer ?\\n\\n");
        printf("OUI: Tapez 1\\n");
        printf("NON: Tapez 2\\n");
        scanf("%ld", &choix);
        printf("\\n\\n");
    }
           while (choix == 1);     
           break;
           
           default:
        printf(" Une erreur est survenue.\\n");
        printf(" Veuillez quitter\\n\\n");
        printf(" *** FIN DU PROGRAMME ***\\n\\n");
           break;
    }
       
      system("PAUSE");     
      return 0;
    }


    en vous remerciant d'avance :)
    Et encore désolé pour avoir poster sur quelque chose déja répondu.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      16 août 2006 à 20:18:23

      srand(time(NULL));

      => Ne doit être appelé qu'une fois et une seule par programme, généralement au début du main, c'est marqué dans le cours !
      • Partager sur Facebook
      • Partager sur Twitter
        16 août 2006 à 20:20:55

        De plus, si on regarde :


        long compareNombres (long nombreEntre, long nombreMystere)


        ta fonction est censée retourner un long or elle ne retourne rien du tout. Met lui donc un type void
        • Partager sur Facebook
        • Partager sur Twitter
          17 août 2006 à 1:55:32

          bonjour , ou plutot bonsoir, tout depend de l'heure a laquel vous lirez se poste ^^
          (avant toute chose, excusez mon orthographe assez douteuse, mais j'ai jamais été une fleche en francais :p )
          je profite de ce poste, car j'ai moi aussi un probleme dans l'amélioration de ce TP (je sais, j'aurais du chercher, mais 142 page, a 2h du mat', je le sens moyen quand meme ^^' )
          tout allais bien, j'avais fait le compteur de coup, la demande de 2eme parti, le mode 2joueurs...et j'ai eu la mauvaise idée d'entamer la "difficulté" :(

          je m'explique :
          après avoir fait se que je pensais juste (vui, car je suis un vrai zér0 ^^'), plus rien marche o_O ca compile, mais rien ne se lance o_O et aucune erreur, ou en tout cas, pas noté dans le debuggeur.
          voila mon code, (desolé, c'est surement tres mal codé , mais je fais comme je peut a mon niveau ^^' ) (je suis parti de rien, j'ai juste suivi le tuto, pour vous situez mon niveau ^^ )

          #include <stdio.h>
          #include <stdlib.h>
          #include <time.h>
          int main()
          {
              long nombreMystere=0,nombreEntree=0;
              long compteur=0,joueurQuitte=0;
              long nombrejoueur=0,nombreMAX = 0, MIN = 1,difficulter = 0 ;
              printf("Bienvenu ^^\\n");
              printf("vi, je sais, c'est pas grand-chose,mais j'en suis fiere quand meme^^\\n");
              printf("allez, passons au choses \\"serieuses\\" ^^ \\n\\n\\n");
              printf ("presse une touche pour debuter");
                  do

                  {


                      printf("quel dificulter\\n?");
                      printf("1.facile");
                      prinft("2.moyen");
                      printf("3.difficile");
                      scanf("%ld", &difficulter);
                      if (difficulter = 1)
                      {
                          long nombreMAX = 100, MIN = 1,difficulter = 0 ;
                      }
                          else if (difficulter = 2)
                      {
                          long nombreMAX = 1000, MIN = 1,difficulter = 0 ;
                      }
                          else
                      {
                          long nombreMAX = 10000, MIN = 1,difficulter = 0 ;
                      }





                      printf("combien de joueurs?\\n");
                      printf("--1--\\n");
                      printf("--2--\\n");
                      scanf("%ld",&nombrejoueur);

                      if (nombrejoueur==1)
                      {
                          srand(time(NULL));
                          nombreMystere = (rand() % (nombreMAX - MIN + 1)) + MIN;
                      }
                      else
                      {
                          printf("entrer le nombre mystere\\n");
                          scanf("%ld", &nombreMystere);
                          printf("\\n");
                      }
                  do
                  {
                      printf("trouver le nombre mystere\\n");
                      scanf("%ld", &nombreEntree);
                      if (nombreMystere>nombreEntree)
                      {
                          printf("c'est plus!\\n");
                      }
                      else if (nombreMystere < nombreEntree)
                      {
                          printf("c'est moins!\\n");
                      }
                      else
                      {
                          printf("bravo, vous avez trouver!\\n");
                      }
                  compteur ++;
                  }


                  while(nombreMystere != nombreEntree);
                  printf("bravo, vous avez mis %ld coups!\\n", compteur);
                  printf("voulez-vous rejouer?\\n");
                  printf("1.oui\\n");
                  printf("2.non\\n");
                  scanf("%ld", &joueurQuitte);
                  }

                  while (joueurQuitte != 2);


          }


          et voila ce qui s'affiche en bas :
          Project   : Console application
          Compiler  : GNU GCC Compiler (called directly)
          Directory : D:\\sitezero\\c\\Tp\\petitjeu\\
          --------------------------------------------------------------------------------
          Switching to target: default
          Compiling: main.c
          Linking console executable: D:\\sitezero\\c\\Tp\\petitjeu\\console.exe
          .objs\\main.o:main.c:(.text+0xb2): undefined reference to `prinft'
          collect2: ld returned 1 exit status
          Process terminated with status 1 (0 minutes, 0 seconds)
          • Partager sur Facebook
          • Partager sur Twitter
            17 août 2006 à 5:58:44

            @ tranquil1ty:
            tu fais appel à nombreMystere = genereNombre(MIN, MAX); une seule fois dans ton programme
            etant donné que ce passage là n'est pas dans ta boucle de repetition de la phase de jeu, nombreMystere n'est pas reaffectée

            par ailleurs dans ton programme, tu as deux fois la phase de jeu, une avec repetition, et l'autre sans
            le developpeur moyen est feneant :-°

            deux fois le meme code, ça fatigue les doigts, c'est dommage
            une autre solution EXISTE!

            Secret (cliquez pour afficher)





            il faut chercher! ^^








            @ Ladalle1988:
            ton erreur se trouve tout de meme tres vite
            si ton compilateur pouvait hurler, il le ferait :p

            si il te dit
            undefined reference to `prinft'
            et que tu n'as rien remarqué d'anormal, tu dois etre dylsexique ^^ (je me moque mais je suis pareil!)

            une coquille ça arrive à tout le monde, mais n'oublie pas,
            le compilateur est ton ami, ecoute ce qu'il te dit!



            Cordialement,
            Nigel
            • Partager sur Facebook
            • Partager sur Twitter
              17 août 2006 à 9:49:56

              Et puis, il y a un autre problème aussi et tu t'en rendras compte assez vite. Celà se passe au niveau des premiers if. Bon sang, il faut se relire.
              • Partager sur Facebook
              • Partager sur Twitter
                17 août 2006 à 11:30:14

                Citation : Nigel


                @ Ladalle1988:
                ton erreur se trouve tout de meme tres vite
                si ton compilateur pouvait hurler, il le ferait :p

                si il te dit
                undefined reference to `prinft'
                et que tu n'as rien remarqué d'anormal, tu dois etre dylsexique ^^ (je me moque mais je suis pareil!)

                une coquille ça arrive à tout le monde, mais n'oublie pas,

                le compilateur est ton ami, ecoute ce qu'il te dit!




                Cordialement,
                Nigel



                merci, j'avais pas vu le "prinft" o_O je devais etre fatigué, mais en tout cas l'erreur s'affichais pas comme d'habitude :euh:
                maintenant, ca "fonctionne" :p (du moins, sa se lance, c'est deja sa :p)

                merci beaucoup pour ton aide :)
                • Partager sur Facebook
                • Partager sur Twitter
                  17 août 2006 à 12:10:31

                  A moi , je l'ameliore ce matin :

                  int main ()
                  {
                      long choix1=1 , choix2=1;
                      do
                      {
                      printf("===Menu===\\n\\n1.Facile\\n2.Moyen\\n3.Dur !\\n\\nChoississez un nombre:\\n");
                      scanf("%ld" , &choix2);
                      long nombreMystere = 0, nombreEntre = 0 , coup =0;
                      switch(choix2)
                      {
                          case 2 :
                      const long MAX = 10000, MIN = 1;
                      break;
                          case 3 :
                      const long MAX = 100000, MIN = 1;
                      break ;
                          default :
                      const long MAX = 100, MIN = 1;
                      }



                      srand(time(NULL));
                      nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;




                  ca me dis qu'il y a une erreur de syntaxe avens tout les const et que max n'est pas declaré

                  pourquoi ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 août 2006 à 12:23:32

                    j'ai mis que le bout qui deconne voila le code entier

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


                    int main ()
                    {
                        long choix1=1 , choix2=1;
                        do
                        {
                        printf("===Menu===\\n\\n1.Facile\\n2.Moyen\\n3.Dur !\\n\\nChoississez un nombre:\\n");
                        scanf("%ld" , &choix2);
                        long nombreMystere = 0, nombreEntre = 0 , coup =0;
                        switch(choix2)
                        {
                            case 2 :
                        const long MAX = 10000, MIN = 1;
                        break;
                            case 3 :
                        const long MAX = 100000, MIN = 1;
                        break ;
                            default :
                        const long MAX = 100, MIN = 1;
                        }



                        srand(time(NULL));
                        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;



                        while(nombreEntre != nombreMystere )
                        {

                            printf("Quel est le nombre ? ");
                            scanf("%ld", &nombreEntre);
                            coup++;


                            if (nombreMystere > nombreEntre)
                                {printf("C'est plus !\\n\\n");}
                            else if (nombreMystere < nombreEntre)
                               { printf("C'est moins !\\n\\n");}
                            else
                                {
                                    printf ("Bravo, vous avez trouve le nombre mystere en %ld coups !!!\\n\\nVoulez vou rejouer ?\\n\\n1.Oui\\n2.Non \\n\\n" , coup);
                                    scanf("%ld\\n" , &choix1);
                                }
                                }
                        }while(choix1!=2);


                        system("pause");
                        return 0;
                    }

                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 août 2006 à 13:06:28

                      Je dirai que la declaration de variables/constantes ne se fait pas dans les switches. L'affectation en revanche, oui.
                      Essaie de declarer tes variables et constantes au debut de tes fonctions.
                      L'initialisation de srand doit se faire au debut du main, pas dans une boucle.
                      Il te manque le do du second while.

                      Je dirai que puisque tu affectes des valeurs differentes à MAX et MIN en fonction d'une entrée utilisateur, ce ne sont pas des constantes mais des variables...

                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 août 2006 à 13:15:46

                        ou j'avais vu , j'ai declaré max et min avant le switch et j'ai enlevé const
                        • Partager sur Facebook
                        • Partager sur Twitter
                          17 août 2006 à 16:52:36

                          Salut à tous!

                          j'ai moi aussi un petit problème avec le + ou -

                          voilà le problème:

                          Image utilisateur

                          IL faut que je tape un chiffre pour ré enclencher le jeu :/

                          voilà mon code:

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


                          int main ( int argc, char** argv )
                          {
                              long nombreMystere = 0, nombreEntre = 0, nombreDeCoups = 0, continuerPartie = 1;
                              const long MAX = 100, MIN = 1;
                             

                              srand(time(NULL));
                              nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;




                          printf("Il faut trouver un nombre entre 1 et 100. \\n");
                          do
                              {

                                  printf("Quel est le nombre ? ");
                                  scanf("%ld", &nombreEntre);
                                  nombreDeCoups++;


                                  if (nombreMystere > nombreEntre)
                                      printf("C'est plus ! \\n");
                                  else if (nombreMystere < nombreEntre)
                                      printf("C'est moins ! \\n");
                                  else
                                      printf ("Bravo, vous avez trouve le nombre mystere en %ld coups !!! \\n ", nombreDeCoups);
                              } while (nombreEntre != nombreMystere);

                              printf("Voulez-vous continuer (1 pour oui 0 pour non ) ? ");
                              scanf("%ld ", &continuerPartie);

                              if (continuerPartie = 0)
                              {
                                  printf("Fermeture du programme \\n");

                                  system("PAUSE");
                                  return 0;
                          }
                          else
                          {
                                             srand(time(NULL));
                              nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;




                          printf("Il faut trouver un nombre entre 1 et 100. \\n");
                          do
                              {

                                  printf("Quel est le nombre ? \\n");
                                  scanf("%ld", &nombreEntre);
                                  nombreDeCoups++;


                                  if (nombreMystere > nombreEntre)
                                      printf("C'est plus ! \\n");
                                  else if (nombreMystere < nombreEntre)
                                      printf("C'est moins ! \\n");
                                  else
                                      printf ("Bravo, vous avez trouve le nombre mystere en %ld coups !!! \\n ", nombreDeCoups);
                              } while (nombreEntre != nombreMystere);

                              printf("Voulez-vous continuer (1 pour oui 0 pour non ) ? ");
                              scanf("%ld ", &continuerPartie);
                          }


                              system("PAUSE");
                          }


                          Je ne comprends pas poruquoi ça fait ça :(

                          Merci d'avance pour votre aide :)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 août 2006 à 17:06:40

                            La deuxieme partie où tu repetes la premiere partie car tu veux rejouer est à supprimer, car quel serait le comportement de ton programme si ton joueur veut une autre partie? (tu ne traites pas la reponse à la question 'Voulez vous rejouer' de la deuxieme partie). Pis sans faire mon faineant, c'est mieux de ne pas reecrire deux fois la même chose. :-°
                            Au lieu de cela, englobe ta premiere partie dans un autre do...while avec comme condition continuerPartie

                            PS n'initialise pas srand plusieurs fois, une seule fois au debut de ton main et hors boucle suffit.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 août 2006 à 19:53:30

                              Merci :)

                              ok je viens de le faire :D

                              mais ça marche pas o_O je vais continuer à me creuser les neurones ^^

                              PS: La partie répétée je l'avais copié/collé :-°
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Amélioration + ou -

                              × 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