Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mini calculette avec des fonctions

besoin d'explication svp

Sujet résolu
    12 août 2008 à 22:59:44

    Salut,

    pour m'entrainer a manipuler les fonctions,j'ai voulu faire une mini calculette (trés simple),mais avec des fonctions.

    Alors la 1ere chose,est ce que je mit prend bien ?

    Et ensuite j'ai besoin de quelques explication sur le pourquoi mon code me donne ce résultat ?

    Cad par exple,quel est l'ordre des variable entre parenthèse lorsque que l'on appelle une fonction ? (cf le dernier printf).

    Mon code :

    #include <stdio.h>
    #include <stdlib.h>
    
    long operation()
    {  //Demande du choix de l'operation
        long choix = 0;
        {
            printf("Quel operation voulez vous faire ?\n");
            printf("1- Multiplication\n");
            printf("2- Addition\n");
            printf("3- Soustraction\n");
            printf("Votre Choix : ");
            scanf("%ld", &choix);
        }
        return choix;
    }
    
    long calcul(long nombre1, long nombre2, long resultat, long choix)
    {
        switch(choix) //execution de l'operation en fonction du choix
          {
              case 1 :
              resultat = nombre1 * nombre2;
              break;
    
              case 2 :
              resultat = nombre1 + nombre2;
              break;
    
              case 3 :
              resultat = nombre1 - nombre2;
              break;
          }
          return resultat;
    }
    
    int main(int argc, char *argv[])
    {
        long resultat = 0, nombre1 = 0, nombre2 = 0, choix = 0;
    
        operation(calcul);
    
        //Demande des nombre a calculer
        printf("Entrez le 1er nombre : ");
        scanf("%ld", &nombre1);
        printf("Entrez le 2nd nombre : ");
        scanf("%ld", &nombre2);
        printf("le resultat est %ld\n\n", calcul(choix, nombre1, nombre2, resultat));
    
        system("PAUSE");
        return 0;
    }
    


    Et sa me donne :

    Citation : Pas de titre

    Quel operation voulez vous faire ?
    1- Multiplication
    2- Addition
    3- Soustraction
    Votre Choix : 2
    Entrez le 1er nombre : 2
    Entrez le 2nd nombre : 2
    le resultat est 2

    Appuyez sur une touche pour continuer...



    Alors pour arriver a ça,j'ai un peu fait du piffomètre pendant pas mal de temps.Alors je pense qu'a force de bidouiller sans savoir je trouverais la solution.
    Mais j'aimerais plutôt comprendre.

    Merci d'avance,.
    A+++

    • Partager sur Facebook
    • Partager sur Twitter

    L'IA se détecte par des fautes d'orthographe on la bloque en lui répondant des choses sans sens.

      12 août 2008 à 23:12:37

      :-° Mieux ?
      Lis les commentaires et va relire le cours sur les fonctions car pour arrivé à un tel "bidouillage" ^^ !
      #include <stdio.h>
      #include <stdlib.h>
      
      long operation(void)
      {  //Demande du choix de l'operation
          long choix = 0;
      
          printf("Quel operation voulez vous faire ?\n");
          printf("1- Multiplication\n");
          printf("2- Addition\n");
          printf("3- Soustraction\n");
          printf("Votre Choix : ");
          scanf("%ld", &choix);
      
          /* K : Les accolades que tu avais mis ne
              signifie rien. */
      
          return choix;
      }
      
      /* K : Tu prenais resultats en paramètre ? (Il te faut les pointeur pour faire ça) */
      long calcul(long nombre1, long nombre2, long choix)
      {
          long resultat = 0;
      
          switch(choix) //execution de l'operation en fonction du choix
          {
            case 1 :
            resultat = nombre1 * nombre2;
            break;
      
            case 2 :
            resultat = nombre1 + nombre2;
            break;
      
            case 3 :
            resultat = nombre1 - nombre2;
            break;
      
            default:
            printf("/!\\ Choix non valide !\n");
            /* K : Je te conseille de TOUJOURS mettre le default d'un switch. */
          }
      
          return resultat;
      }
      
      int main(void) /* K : Les arguments du main ne te servent pas. */
      {
          long nombre1 = 0, nombre2 = 0, choix = 0;
      
          /* K : Ce n'est pas plutôt ça ? */
          choix = operation();
      
          //Demande des nombre a calculer
          printf("Entrez le 1er nombre : ");
          scanf("%ld", &nombre1);
          printf("Entrez le 2nd nombre : ");
          scanf("%ld", &nombre2);
          printf("le resultat est %ld\n\n", calcul(nombre1, nombre2, choix));
      
          /* system("PAUSE");
              K : A éviter  C'est pas multi-plateforme :
                  moi qui suis sous linux ça ne fonctionne pas.
              Préfère utiliser getchar(); (il attend juste l'appui d'un lettre,
                  il n'affiche pas de message par contre) ! */
          getchar();
      
          return 0;
      }
      
      • Partager sur Facebook
      • Partager sur Twitter
        12 août 2008 à 23:43:20

        salut Keiristos,

        déjà se qui me rassure c'est que l'idée était là,même si j'suis un peut parti dans tout les sens.

        Ta solution est effectivement bien plus logique,et les commentaire sont bien utiles.

        Je fait une pause et je regarde de plus près juste après.

        merci pour ton aide.
        • Partager sur Facebook
        • Partager sur Twitter

        L'IA se détecte par des fautes d'orthographe on la bloque en lui répondant des choses sans sens.

          13 août 2008 à 0:02:33

          salut code rom
          moi je comprend rien dans tes fonction et je vois que ca fatigue la memoire. Mieux vaut employer les methode de debutant comme moi exemple de calculette assez repetitf mais ca marche quand meme c'est l'essentiel.
          la voici :</couleur><couleur nom="rose"><couleur nom="rose"><couleur nom="rose"><couleur nom="rose">
          #include <stdio.h>
          #include <stdlib.h>

          int main(int argc, char *argv[])
          {
          long choix;
          printf("1 pour adittioner\n");
          printf("2 pour soustraire\n");
          printf("3 pour multiplier\n");
          printf("4 pour diviser\n");
          scanf("%ld", &choix);
          if (choix == 1)
          {
          long nbre1 = 0, nbre2 = 0, resultat = 0;
          printf("entrer nombre1 : ");
          scanf("%ld", &nbre1);
          printf("\nentrer nombre2 : ");
          scanf("%ld", &nbre2);
          resultat = nbre1 + nbre2;
          printf("\n% ld + %ld = %ld\n\n\n\n", nbre1, nbre2, resultat);
          }
          else if (choix == 2)
          {
          long nbre1 = 0, nbre2 = 0, resultat = 0;
          printf("entrer nombre1 : ");
          scanf("%ld", &nbre1);
          printf("\nentrer nombre2 : ");
          scanf("%ld", &nbre2);
          resultat = nbre1 - nbre2;
          printf("\n% ld - %ld = %ld\n\n\n\n", nbre1, nbre2, resultat);
          }
          else if (choix == 3)
          {
          long nbre1 = 0, nbre2 = 0, resultat = 0;
          printf("entrer nombre1 : ");
          scanf("%ld", &nbre1);
          printf("\nentrer nombre2 : ");
          scanf("%ld", &nbre2);
          resultat = nbre1 * nbre2;
          printf("\n% ld * %ld = %ld\n\n\n\n", nbre1, nbre2, resultat);
          }
          else if (choix == 4)
          {
          long nbre1 = 0, nbre2 = 0, resultat = 0;
          printf("entrer nombre1 : ");
          scanf("%ld", &nbre1);
          printf("\nentrer nombre2 : ");
          scanf("%ld", &nbre2);
          resultat = nbre1 / nbre2;
          printf("\n% ld / %ld = %ld\n\n\n\n", nbre1, nbre2, resultat);
          }
          else
          {
          printf("vous avez entre la mauvaise donne ...\n\n\n\n");

          }



          system("PAUSE");
          return 0;
          }

          • Partager sur Facebook
          • Partager sur Twitter
            13 août 2008 à 0:08:25

            Citation : Code Rom

            pour m'entrainer a manipuler les fonctions,j'ai voulu faire une mini calculette (trés simple),mais avec des fonctions.


            - Les commentaires en C90, c'est /* */ et non //
            - long operation () Quand une fonction n'a pas de paramètres, on le précise avec (void)
            - operation (calcul); La fonction a pour paramètre une autre fonction ? C'est possible, mais je doute que ce soit ce que tu veux faire... C'est du C très avancé...
            - int main (int argc, char *argv[]) Les paramètres de main() n'étant pas utilisés, on peut utiliser la forme simplifiéeint main (void)
            -calcul (choix, nombre1, nombre2, resultat)est incohérent avec la définition de la fonction :long calcul (long nombre1, long nombre2, long resultat, long choix) En effet, ce qui compte, c'est l'ordre des paramètres et non leur nom qui est purement documentaire.

            D'autre part, il est tout à fait inutile de passer 'resultat' en paramètre, car dans la fonction, sa valeur n'est jamais lue et qu'elle par contre renseignée (écrite ou affectée) et retournée.

            - il manque une saisie pour déterminer quelle opération tu veux effectuer.

            Je te laisse déjà réfléchir à tout ça... Fait de ton mieux et poste ton code corrigé.

            Correction :
            #include <stdio.h>
            #include <stdlib.h>
            
            long operation (void)
            {
               long choix = 0;
               /* Choix de l'operation */
               printf ("Quel operation voulez vous faire ?\n");
               printf ("1- Multiplication\n");
               printf ("2- Addition\n");
               printf ("3- Soustraction\n");
               printf ("Votre Choix : ");
               scanf ("%ld", &choix);
               getchar ();
            
               return choix;
            }
            
            long calcul (long nombre1, long nombre2, long op)
            {
               long resultat;
            /* execution de l'operation en fonction du choix */
               switch (op)
               {
               case 1:
                  resultat = nombre1 * nombre2;
                  break;
            
               case 2:
                  resultat = nombre1 + nombre2;
                  break;
            
               case 3:
                  resultat = nombre1 - nombre2;
                  break;
            
               default:
                  printf ("choix invalide\n");
                  resultat = 0;
               }
               return resultat;
            }
            
            int main (void)
            {
               long nombre1 = 0, nombre2 = 0, op = 0;
            
               op = operation ();
            /* Demande des nombre a calculer */
            
               printf ("Entrez le 1er nombre : ");
               scanf ("%ld", &nombre1);
               getchar ();
            
               printf ("Entrez le 2nd nombre : ");
               scanf ("%ld", &nombre2);
               getchar ();
            
               printf ("le resultat est %ld\n\n", calcul (nombre1, nombre2, op));
            
               return 0;
            }
            
            /* 3 comments processed by CMT2 1.0 (c) ED 2007 */
            
            • Partager sur Facebook
            • Partager sur Twitter
            Music only !
              13 août 2008 à 0:26:59

              J'ai rejeter un oeil au cours des fonction et au code de Keiristos.

              Alors je vais essayer d'etre le plus clair possible dans ma question.

              Dans le cours il y a cette exple :

              le code :

              #include <stdio.h>
              #include <stdlib.h>
              
              long triple(long nombre)
              {
                  return 3 * nombre;
              }    
              
              int main(int argc, char *argv[])
              {
                  long nombreEntre = 0;
                  
                  printf("Entrez un nombre... ");
                  scanf("%ld", &nombreEntre);
              
                  // Le résultat de la fonction est directement envoyé au printf et n'est pas stocké dans une variable
                  printf("Le triple de ce nombre est %ld\n", triple(nombreEntre)); 
                  
                  system("PAUSE");    
                  return 0;
              }
              


              L'explication :

              Citation : Pas de titre

              Que fait l'ordinateur quand il tombe sur cette ligne ?

              C'est très simple. Il voit que la ligne commence par printf, il va donc appeler la fonction printf.
              Il envoie à la fonction printf tous les paramètres qu'on lui donne. Le premier paramètre est le texte à afficher, et le second est un nombre.
              Votre ordinateur voit que pour envoyer ce nombre à la fonction printf il doit d'abord appeler la fonction triple. C'est ce qu'il fait : il appelle triple, il effectue les calculs de triple, et une fois qu'il a le résultat il l'envoie directement dans la fonction printf !



              Donc ok l'exple du cours je le comprend,mais je n'ai pas encore assimiler le truc.
              Pour le code de Keiristos dans le dernier printf,l'ordi affiche d'abord le texte (1er parametre),après il voit la fonction calcul.Il apelle donc la fonction calcul...
              Jusqu'a la ok je suit,mais après c'est la que j'ai du mal,quand il y a plusieur variable entre parenthèses.

              Comment savoir l'ordre dans laquelle les mettrent sans faire du piffomètres ?

              PS: en fait c'est par exple pour la variable choix que je bloque.

              je sait pas si je suis suffisament clair dans ma demande o_O

              ________________________________________________________________________________

              PS²:merci pour vos réponses,c'est bon j'ai compris l'ordre dans lequel il faut mettre les variables lors de l'appelle d'une fonction.
              Il suffit de remmettre l'ordre des variables de la fonction appellée.
              Je ne remet pas de corriger car Keiristos l'a mit.

              Encore merci,vos post m'ont été très utiles.


              • Partager sur Facebook
              • Partager sur Twitter

              L'IA se détecte par des fautes d'orthographe on la bloque en lui répondant des choses sans sens.

              Mini calculette avec des fonctions

              × 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