Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cours de M@athéo - Question Boucle

Ben oui je demande juste le corriger

    4 novembre 2006 à 0:15:58

    Bonjour à tous,

    Voila d'une part je voulais félicité M@théo pour son cours sur les fonctions d'une part et dire aussi que j'aimerais que quelqu'un me corrige par ce que là cela fait bien quelques heures que j'essaye de réaliser son mini tp, et bien je n'y arrive pas pourtant j'ai relu le tuto 2 fois.

    Voilà je vous file mon code :

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

    double genereNombre(long MIN, long MAX)
    {
        MAX = 1000;
        MIN = 1;
    }

    double compareNombres(long nombreEntre, long nombreMystere)
    {
       if (nombreEntre > nombreMystere)
      {
                printf("C'est plus !\n");
            }
                else if(nombreEntre < nombreMystere)
            {
                printf("C'est moins !\n");
            }
                else
            {
                printf("Vous avez gagner bravo !!!");
            }
    }


    int main ( int argc, char** argv )
    {
        long nombreMystere, nombreEntre, MAX, MIN;

        // 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);

    }


    Au risque de me répéter, mais je remercie l'âme charitable qui voudra bien me corriger.

    Merci à vous.
    • Partager sur Facebook
    • Partager sur Twitter
      4 novembre 2006 à 0:26:52

      T'as oublier le return de chacunes de tes fonctions.
      Il n'y a aucun nombre mystère généré.
      Pas besoin que les fonctions soit en double, int ça suffit (ça peut contenir un entier ayant comme valeur 2*2^31 au maximum donc largement suffisant)

      Pour l'instant c'est tout ce que j'ai trouver comme erreurs en lisant en diagonale
      • Partager sur Facebook
      • Partager sur Twitter
        4 novembre 2006 à 0:57:05

        Bon j'ai un peu corriger mais à mon avis je dois avoir une erreur de logique ou bien je ne comprend pas trop le truc. Surement à force d'en faire cela finira par rentrer dans la tête. Enfin j'espère.

        Bon continuons et bien après quelques corrections, et surtout grâce à l'aide de Kurapix et bien effectivement je n'ai rien généré d'ou l'erreur.

        J'ai un peu corriger mais cela ne marche absolument pas

        V 2 :
        #include <stdio.h>
        #include <stdlib.h>
        #include <time.h>

        int genereNombre(long MIN, long MAX, long nombreM)
        {
            MAX = 100;
            MIN = 1;
            printf("Chercher un nombre donne par l'ordinateur de 1 a 100 ?\n\n");
            srand(time(NULL));
            nombreM = (rand() % (MAX - MIN + 1)) + MIN;
            return nombreM;
        }


        int compareNombres(long nombreEntre, long nombreMystere)
        {
           if (nombreEntre > nombreMystere)
          {
                    printf("C'est plus !\n");
                }
                    else if(nombreEntre < nombreMystere)
                {
                    printf("C'est moins !\n");
                }
                    else
                {
                    printf("Vous avez gagner bravo !!!");
                }
                return nombreEntre;
                return nombreMystere;

        }


        int main ( int argc, char**argv )
        {
            long nombreMystere, nombreEntre;

            // Génération du nombre aléatoire
            nombreMystere = genereNombre;

            /* 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);

        }


        J'espère qu'avec l'aide de chacune je pourrais continué à avancé.

        Toutefois je voulais savoir s'il y a d'autres exercices sur les fonctions comme ça je pourrais continué à m'entrener.
        • Partager sur Facebook
        • Partager sur Twitter
          4 novembre 2006 à 1:38:57

          Salut!
          Dans ton code, fais attention lorsque tu appelles une fonction.
          Tu déclares une fonction genereNombre qui demande 3 variables en entrées
          int genereNombre(long MIN, long MAX, long nombreM)
          {
              MAX = 100;
              MIN = 1;
              printf("Chercher un nombre donne par l'ordinateur de 1 a 100 ?\n\n");
              srand(time(NULL));
              nombreM = (rand() % (MAX - MIN + 1)) + MIN;
              return nombreM;
          }

          nombreMystere = genereNombre; // Or ici ton compilateur croit que genereNombre est une variable


          Corrigé ca donne :
          int genereNombre()
          {
             const int MIN = 1;
             const int MAX = 100;
             int nombreM = (rand() % (MAX - MIN + 1)) + MIN;
             return nombreM;
          }


          En ce qui concerne les 2 lignes que j'ai enlevé, tu les places plutôt dans la fonction main
          srand(time(NULL)); //Attention, cette instruction ne doit être executé qu'une fois dans tout ton code
          printf("Chercher un nombre donne par l'ordinateur de 1 a 100 ?\n\n");


          Et maintenant pour générer un nombre

          int main(int argc, char**argv)
          {
             // Initialisation du générateur de nombres aléatoires
             srand(time(NULL));

             //Déclaration des variables
             int nombreMystere = genereNombre();
             
             /*
                Suite du programme...
             */


             return 0;
          }


          C'est pas tout ta fonction compareNombres retourne 2 valeurs!
          Attention une fonction ne peut retourner qu'une valeur.
          Et ici ta fonction n'est pas utile, je te conseillerais de mettre le code directement dans la fonction main.

          Un conseil : relis les cours de M@téo pour bien assimiler les notions de base ;)
          @+
          • Partager sur Facebook
          • Partager sur Twitter
            4 novembre 2006 à 21:37:08

            Coucou à tous,

            La bonne nouvelle j'ai avancée mais la mauvaise nouvelle c'est que sa ne marche pas. Donc je remets mon code. Merci par avance aux personnes qui corrigent.

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

            int genereNombre()
            {
               const int MIN = 1;
               const int MAX = 100;
               int nombreM = (rand() % (MAX - MIN + 1)) + MIN;
               return nombreM;
            }



            int compareNombres()
            {
                long nombreEntre, nombreM;
                genereNombre(nombreM);
               if (nombreEntre > nombreM)
              {
                        printf("C'est plus !\n");
                    }
                        else if(nombreEntre < nombreM)
                    {
                        printf("C'est moins !\n");
                    }
                        else
                    {
                        printf("Vous avez gagner bravo !!!");
                    }
                    return nombreEntre;

            }


            int main ( int argc, char**argv )
            {
                long nombreMystere, nombreEntre;

                srand(time(NULL)); //Attention, cette instruction ne doit être executé qu'une fois dans tout ton code
                printf("Chercher un nombre donne par l'ordinateur de 1 a 100 ?\n\n");

                // Génération du nombre aléatoire
                nombreMystere = genereNombre;

                /* 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);

            }
            • Partager sur Facebook
            • Partager sur Twitter
              4 novembre 2006 à 21:54:02

              Kikou.
              Hum je lisais ton code un peu rapidement et queque chose m'as sauté aux yeux.

              Dans ce prototype:
              int compareNombres()

              Tu déclare que ta fonction ne prend pas de paramètre en entrée.
              Et pourtant, quand tu l'appelles dans ton main, tu lui en donne 2.
              Bizare...
              Voila, c'est la seule erreur qui m'a sauté aux yeux. :)
              ++
              • Partager sur Facebook
              • Partager sur Twitter
                4 novembre 2006 à 23:35:54

                bonsoir ,

                Déjà , je pense que ça ne sert à rien que , à la fin de ta fonction compareNombres, tu retournes une valeur . Donc , tu peux enlever le "return" et par conséquent mettre le type void à ta fonction . Comme l'a dit Kevin , tu lui passes des paramètres en l'appellant dans le "main" mais , tu ne les mets pas au début de ta fonction , donc en corrigeant , ça donne ça :

                void compareNombres(long nombreEntre, long nombreM)

                Il y a aussi d'autre erreurs... ;)
                • Partager sur Facebook
                • Partager sur Twitter
                  5 novembre 2006 à 0:46:00

                  Salut, voilà ton code corrigé!
                  #include <stdio.h>
                  #include <stdlib.h>
                  #include <time.h>

                  int genereNombre()
                  {
                     const int MIN = 1;
                     const int MAX = 100;
                     int nombreM = (rand() % (MAX - MIN + 1)) + MIN;
                     return nombreM;
                  }

                  int main(int argc, char **argv)
                  {
                     long nombreMystere, nombreEntre;

                     srand(time(NULL)); //Attention, cette instruction ne doit être exécuté qu'une seule fois
                     printf("Chercher un nombre donne par l'ordinateur de 1 a 100 ?\n\n");

                     // Génération du nombre aléatoire
                     nombreMystere = genereNombre();
                     
                     /* 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);
                       
                        if(nombreEntre < nombreMystere) //Attention au sens de la comparaison
                        {                               //dans ton code tu avais inversé le signe
                           printf("C'est plus !\n");
                        }
                        else if(nombreEntre > nombreMystere)
                        {
                           printf("C'est moins !\n");
                        }
                        else
                        {
                           printf("Vous avez gagner bravo !!!");
                        }

                     } while (nombreEntre != nombreMystere);
                     
                     return 0; //La fonction main attend un int en sortie
                               //On renvoie 0 pour dire que tout c'est bien passé
                  }


                  Je le répète : tu n'as pas saisi toutes les subtilités du cours, n'hésite pas à le relire :)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Cours de M@athéo - Question Boucle

                  × 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