Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème fonction

Sujet résolu
    27 novembre 2008 à 11:09:42

    Tout d'abord je tiens a signaler que je suis débutant ici (j'ai commencé hier matin...) aussi ne soyez pas trop cruels avec moi :-° .
    Alors voila mon problème, en suivant le cours de m@teo21 sur le c j'en suis arrivé a l'étape des fonctions et je me retrouve bloqué, mon compilateur de veut pas compiler :'( .
    Voici mon code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    long genereNombre(MIN, MAX)
    {
         srand(time(NULL));
         nombreMystere = (rand() % (MAX - MIN + 1)) + MIN; // l'erreur est sur cette ligne 
         return nombreMystere;
    }
    
    long compareNombres(nombreEntre, nombreMystere)
    {
         if (nombreEntre<nombreMystere)
                               {
                                  printf("\nTrop petit\n");
                               }
                               else if (nombreEntre>nombreMystere)
                               {
                                    printf("\nTrop grand\n");
                               }
                               else
                               {
                               printf("Vous avez gagne le nombre mystere est bien %ld\n", nombreMystere);
                               }
    }
    
    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;
    }
    

    et voici l'erreur que j'obtiens:
    In function `genereNombre'  `nombreMystere' undeclared (first use in this function)   (Each undeclared identifier is reported only once )  [Build Error]  [fonctions.o] Error 1
    


    je ne comprends pas mon erreur (je la vois même pas en fait) donc si quelqu'un pouvait voler a mon secours...

    merci d'avance

    ps: je code sous dev c++

    EDIT:
    j'ai remplacé la première ligne de ma première fonction:
    long genereNombre(MIN, MAX)
    

    par:
    long genereNombre(nombreMystere, MIN, MAX)
    


    nouveau problème:
    la première fonction ne tient pas compte des variables MIN et MAX et me sort du coup un nombre dont les limites sont inconnues...
    si quelqu'un a une idée...

    (ps: je vais pas tarder a fracasser mon ordi et a aller me pendre...)
    • Partager sur Facebook
    • Partager sur Twitter
      27 novembre 2008 à 11:17:46

      Dans ta fonction genereNombre, ou as tu déclaré "nombreMystere" ? Nulle part, le compilateur te met donc une erreur. Déclare le au début de ta fonction
      • Partager sur Facebook
      • Partager sur Twitter
        27 novembre 2008 à 14:10:18

        bah en fait j'ai essayé mais ça n'a pas donné de résultats concluant je réessayerais
        • Partager sur Facebook
        • Partager sur Twitter
          27 novembre 2008 à 14:24:13

          Comme le dit joccd, surtout ton compiltaeur ^^ la variable n'a pas été déclarée.
          • Partager sur Facebook
          • Partager sur Twitter
            27 novembre 2008 à 19:49:40

            mais y'a un truc que je comprends pas c'est que normalement si la variable est déclarée dans le main j'ai pas besoin de la déclarer dans la fonction si??
            • Partager sur Facebook
            • Partager sur Twitter
              27 novembre 2008 à 19:52:55

              Salut !
              Justement, si !
              On appelle cela la portée des variables.
              Lorsque tu déclares une variable dans une fonction, cette variable est locale à cette fonction, c'est-à-dire que tu ne peux y accéder que dans cette fonction.

              C'est pour cela que l'on "s'amuse" à passer des variables en paramètre pour les fonctions ^^

              Une variable qui est déclarée hors d'une fonction est une variable dites globale. Celles-ci, contrairement, est accessible partout dans le programme. Cependant, il est déconseillé d'utiliser ces variables.

              Bonne soirée ;-)
              • Partager sur Facebook
              • Partager sur Twitter
                27 novembre 2008 à 19:57:25

                Pour ta deuxième fonction je crois que tu devrais mettre un type « void » vu qu'elle ne retourne rien.
                • Partager sur Facebook
                • Partager sur Twitter
                  27 novembre 2008 à 20:08:54

                  je comprends mieux tout ça donc en gros ce qu'il faudrait que je fasse c'est déclarer les variables qui sont utiles qu'a une fonction dans cette fonction et celles pour lesquelles j'ai aps le choix dans le main??
                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 novembre 2008 à 20:36:57

                    Citation : Pas de titre

                    je comprends mieux tout ça donc en gros ce qu'il faudrait que je fasse c'est déclarer les variables qui sont utiles qu'a une fonction dans cette fonction et celles pour lesquelles j'ai aps le choix dans le main??



                    Le but est que ta fonction puisse etre utilser par un autre programme, donc oui.
                    Par exemple ta fonction compareNombres est inutile (ou seulement pour la lisibilité du code), alors que genereNombre (si elle était juste) pourrait tres bien te servir dans un futur code ou tu a besoin de génerer un nombre aléatoire, tu aurais juste a l' inclure .

                    Mais continue a apprendre tu comprendra mieux car la tu a pas encore les notions nécessaires.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 novembre 2008 à 21:17:02

                      bon c'est bon j'suis arrivé a faire marcher tout ça voici le code final:
                      #include <stdio.h>
                      #include <stdlib.h>
                      #include <time.h>
                      
                      long genereNombre(nombreMystere)
                      {
                           long MIN=1, MAX=100;
                           srand(time(NULL));
                           nombreMystere = (rand() % (MAX - MIN + 1)) + MIN; // l'erreur est sur cette ligne 
                           return nombreMystere;
                      }
                      
                      void compareNombres(nombreEntre, nombreMystere)
                      {
                           if (nombreEntre<nombreMystere)
                                                 {
                                                    printf("\nTrop petit\n");
                                                 }
                                                 else if (nombreEntre>nombreMystere)
                                                 {
                                                      printf("\nTrop grand\n");
                                                 }
                                                 else
                                                 {
                                                 printf("Vous avez gagne le nombre mystere est bien %ld\n", nombreMystere);
                                                 }
                      }
                      
                      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;
                      }
                      


                      voila si vous trouvez des erreurs ou des trucs a améliorer faites moi en part :):) .
                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 novembre 2008 à 21:25:06

                        Re,

                        Au niveau de la conception, tu pourrais faire renvoyer à ta fonction compareNombre() un Int:
                        - 0 -> les nombres sont différents
                        - 1 -> les nombres sont identiques

                        et utiliser cette fonction directement dans la condition de ton while.

                        (Parce que actuellement ça fait un peu redondance, tu as la fonction qui affiche que le chiffre est plus grand/petit et en plus tu re-testes si le chiffres est égal ou pas)

                        Bonne soirée ;-)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          27 novembre 2008 à 21:41:49

                          Citation : yann34150

                          voila si vous trouvez des erreurs ou des trucs a améliorer faites moi en part




                          Bah ouai , si tu pouvais mettre le type de tes variables dans tes fonctions ...(entre les parenthèses).


                          Bonne chance ;) .
                          • Partager sur Facebook
                          • Partager sur Twitter
                            28 novembre 2008 à 9:54:55

                            Citation : moustick1991




                            Bah ouai , si tu pouvais mettre le type de tes variables dans tes fonctions ...(entre les parenthèses).


                            Bonne chance ;) .



                            sur le conseil d'un pote j'avais essayé ça mais j'ai pas du comprendre comment faire parce que l'IDE me disait que je déclarais trop de paramètres
                            • Partager sur Facebook
                            • Partager sur Twitter

                            problème fonction

                            × 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