Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Débutant] Première calculatrice

Avec des conditions :)

    29 janvier 2006 à 21:13:14

    Hello ! :D

    J'ai fini de lire ce matin le chapitre sur les conditions (j'ai appris plein de choses) et j'ai essayé, comme M@teo21 le conseille à la fin du chapitre, de faire une calculatrice avec des conditions. Voici sans plus attendre le plan logique de ma calculatrice (en théorie) :

    1. On demande (avec un switch) l'opération qu'on veut faire
    2. L'utilisateur choisit (avec un scanf) le premier terme de l'opération ...
    3. ...Puis le second
    4. Enfin, on affiche le résultat à l'aide d'un printf.

    Le problème est en fait lors de la "mémorisation" (à l'aide de variables") du choix de l'opération. En effet, une variable ne peut contenir que des chiffres et il m'est donc impossible de faire quelque chose comme
    long choixOperation = +
    :euh: ...

    Pour ceux que ça intéresse, voici le code que j'ai actuellement :
    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char *argv[])
    {
      printf("=== Choix de l'operation ===\n\n");
      printf("1. Addition\n");
      printf("2. Soustraction\n");
      printf("3. Multiplication\n");
      printf("4. Division\n\n");
      printf("Votre choix ?\n\n");
     
      long choixOperation;
      scanf("%lf", choixOperation);
      switch (choixOperation)
      {
             case 1 :
                  choixOperation = +
                  printf("Vous avez choisi d'effectuer une addition.");
                  break;
             case 2 :
                  choixOperation = -
                  printf("Vous avez choisi d'effectuer une addtion.");
                  break;
             case 3 :
                  choixOperation = x
                  printf("Vous avez choisi d'effectuer une multiplication.");
                  break;
             case 4 :
                  choixOperation = /
                  printf("Vous avez choisi d'effectuer une division.");
                  break;
             default :
                  printf("Choisissez une operation parmi les choix proposes");
                  break;
      }
     
      printf("Saisissez deux valeurs");
      long premierTerme;
      scanf("%lf", premierTerme);
      long secondTerme;
      scanf("%lf", secondTerme);
      long resultat;
      resultat = premierTerme choixOperation secondTerme;
     
      printf("\n\n");
      printf("Operation effectuee avec succes : %lf %lf %lf = %lf", premierTerme, choixOperation, secondTerme, resultat);
     
      system("PAUSE");
      return 0;
    }


    Si quelqu'un pouvait m'éclairer sur ce sujet, ça serait sympa :)

    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
      29 janvier 2006 à 21:17:46

      Ca marche pas comme ça. :p On peut pas faire ça comme ça^^. En fait il faut que tu rentres les informations directement dans le switch. Ah, et aussi : pour afficher le symbole "+", tu le mets directement, pas besoin de mettre "%ld". Et aussi : tu utilises des variables "long" mais tu mets %lf, c'est contradictoire puisque les variables long ne contiennent que des nombres entiers, et que %lf est fait pour afficher des nombres décimaux. Utilise plutôt "%ld".

      Voici un exemple de ce que tu dois faire, si jamais tu trouves pas. (faut dire suis rarement clair dans mes explications^^)

      Secret (cliquez pour afficher)
      switch (choixOperation)
      {
               case 1 :
                    printf ("Veuillez entrer le premier terme\n");
                    scanf ("%ld", &nombre1);
                    printf ("Veuillez entrer le second terme\n");
                    scanf ("%ld", &nombre2);
                    resultat = nombre1 + nombre2;
                    printf ("%ld + %ld = %ld\n", nombre1, nombre2, resultat);
                    break;
      • Partager sur Facebook
      • Partager sur Twitter
        29 janvier 2006 à 21:19:32

        utilise les caractères :)

        EDIT : heu non j'raconte n'importe quoi désole :(
        • Partager sur Facebook
        • Partager sur Twitter
          29 janvier 2006 à 21:22:15

          En fait, j'ai fait comme ca car avant je codais en mIRC et j'ai des vieux réflexes :( ...

          Sinon, dans ton exemple tu ne traites que l'addition or je voudrais faire + - / * ^^
          • Partager sur Facebook
          • Partager sur Twitter
            29 janvier 2006 à 21:23:25

            Non, je traite les quatre opérations mais je t'ai mis que le premier, puisque les trois autres c'est la même chose en changeant juste un signe, donc tu peux le faire tout seul je suppose^^. :)
            • Partager sur Facebook
            • Partager sur Twitter
              29 janvier 2006 à 21:24:43

              Ah donc je mets plusieurs switch (quatre donc) à la suite avec les signes différents ?

              [EDIT]

              Ah non j'ai rien dit, j'rajoute simplement 3 "case" à ce que tu as mis :D :magicien:!
              • Partager sur Facebook
              • Partager sur Twitter
                29 janvier 2006 à 21:25:46

                Non lol tu mets pas plusieurs switch. Tu fais juste :
                case 1 : addition (ce que j'ai fait)
                case 2 : soustraction
                case 3 : multiplication
                case 4 : division.
                • Partager sur Facebook
                • Partager sur Twitter
                  29 janvier 2006 à 21:28:38

                  ERF ! T'as été plus rapide que mon edit ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 janvier 2006 à 21:30:44

                    Ouaip', on dirait^^. :)
                    Score 1-0. :clown: (j'déconne hein. :) )

                    Allez amuse-toi bien avec ta calculette, tu vas voir ça se corsera dans quelques chapitres. :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 janvier 2006 à 11:55:21

                      Bon, j'ai bien avancé (presque terminé) ma calculatrice mais j'ai un problème que je n'arrive pas à résoudre. En effet, lorsque je demande quel opération choisir, elle est comme par défaut réglée sur "soustraction" ... D'où est-ce que ça peut provenir ?

                      Mon code :
                      #include <stdio.h>
                      #include <stdlib.h>

                      int main(int argc, char *argv[])
                      {
                        printf("=== Choix de l'operation ===\n\n");
                        printf("1. Addition\n");
                        printf("2. Soustraction\n");
                        printf("3. Multiplication\n");
                        printf("4. Division\n\n");
                        printf("Votre choix ?\n\n");
                        long choixOperation;
                        switch (choixOperation)
                        {
                          case 1 :
                             printf("Veuillez entrer le premier terme");
                             long nombre1 = 0;
                             scanf("%ld", &nombre1);
                             printf("\n\nVeuillez entrer le second");
                             long nombre2 = 0;
                             scanf("%ld", &nombre2);
                             long resultat;
                             resultat = nombre1 + nombre2;
                             printf("Calcul effectue avec succes. %ld + %ld = %ld", nombre1, nombre2, resultat);
                             break;
                          case 2 :
                             printf("Veuillez entrer le premier terme");
                             nombre1 = 0;
                             scanf("%ld", &nombre1);
                             printf("\n\nVeuillez entrer le second");
                             nombre2 = 0;
                             scanf("%ld", &nombre2);
                             resultat;
                             resultat = nombre1 - nombre2;
                             printf("Calcul effectue avec succes. %ld - %ld = %ld", nombre1, nombre2, resultat);
                             break;
                          case 3 :
                             printf("Veuillez entrer le premier terme");
                             nombre1 = 0;
                             scanf("%ld", &nombre1);
                             printf("\n\nVeuillez entrer le second");
                             nombre2 = 0;
                             scanf("%ld", &nombre2);
                             resultat;
                             resultat = nombre1 * nombre2;
                             printf("Calcul effectue avec succes. %ld * %ld = %ld", nombre1, nombre2, resultat);
                             break;
                          case 4 :
                             printf("Veuillez entrer le premier terme");
                             nombre1 = 0;
                             scanf("%ld", &nombre1);
                             printf("\n\nVeuillez entrer le second");
                             nombre2 = 0;
                             scanf("%ld", &nombre2);
                             resultat;
                             resultat = nombre1 + nombre2;
                             printf("Calcul effectue avec succes. %ld + %ld = %ld", nombre1, nombre2, resultat);
                             break;
                             
                         default :
                             printf("Choisissez une operation parmi les choix proposes");
                             break;
                        }   
                       
                        system("PAUSE");
                        return 0;
                      }


                      Merci d'avance :)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 janvier 2006 à 12:32:34

                        Citation : Luciole

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

                        int main(int argc, char *argv[])
                        {
                          /* un conseil:
                           * déclare toutes tes variables en début de main(), on s'y
                           * retrouve mieux lorsque ça devient sérieux
                           */

                          printf("=== Choix de l'operation ===\n\n");
                          printf("1. Addition\n");
                          printf("2. Soustraction\n");
                          printf("3. Multiplication\n");
                          printf("4. Division\n\n");
                          printf("Votre choix ?\n\n");
                          long choixOperation;
                          /* ici aurait dû se trouver un ``scanf("%ld", &choixOperation);
                           * en gros, tu n'as pas demandé à l'utilisateur d'entrer son choix
                           * avant de l'interpréter >_>
                           */

                          switch (choixOperation)
                          {
                            case 1 :
                               printf("Veuillez entrer le premier terme");
                               long nombre1 = 0;
                               scanf("%ld", &nombre1);
                               printf("\n\nVeuillez entrer le second");
                               long nombre2 = 0;
                               scanf("%ld", &nombre2);
                               long resultat;
                               resultat = nombre1 + nombre2;
                               printf("Calcul effectue avec succes. %ld + %ld = %ld", nombre1, nombre2, resultat);
                               break;
                            case 2 :
                               printf("Veuillez entrer le premier terme");
                               nombre1 = 0;
                               scanf("%ld", &nombre1);
                               printf("\n\nVeuillez entrer le second");
                               nombre2 = 0;
                               scanf("%ld", &nombre2);
                               resultat;
                               resultat = nombre1 - nombre2;
                               printf("Calcul effectue avec succes. %ld - %ld = %ld", nombre1, nombre2, resultat);
                               break;
                            case 3 :
                               printf("Veuillez entrer le premier terme");
                               nombre1 = 0;
                               scanf("%ld", &nombre1);
                               printf("\n\nVeuillez entrer le second");
                               nombre2 = 0;
                               scanf("%ld", &nombre2);
                               resultat;
                               resultat = nombre1 * nombre2;
                               printf("Calcul effectue avec succes. %ld * %ld = %ld", nombre1, nombre2, resultat);
                               break;
                            case 4 :
                               /* tiens c'était pas censé être une division ici? */
                               printf("Veuillez entrer le premier terme");
                               nombre1 = 0;
                               scanf("%ld", &nombre1);
                               printf("\n\nVeuillez entrer le second");
                               nombre2 = 0;
                               scanf("%ld", &nombre2);
                               resultat;
                               resultat = nombre1 + nombre2;
                               printf("Calcul effectue avec succes. %ld + %ld = %ld", nombre1, nombre2, resultat);
                               break;
                               
                           default :
                               printf("Choisissez une operation parmi les choix proposes");
                               break;
                          }   
                         
                          system("PAUSE");
                          return 0;
                        }



                        Merci d'avance :)

                        Voir commentaires
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          31 janvier 2006 à 17:10:08

                          Bon j'ai fait l'exercice de la calcullete. :p
                          C'est sympa ce que tu as fais mais voila ma version. Je me suis permis de faire quelques modifications...
                          Par example, une boucle pour pouvoir répeter le programme si l'utilisateur en a envie.(do...while)
                          Et le résultat de la division aussi^^
                          Je vous laisserai voir par vous même les autres. :D

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

                          int main(int argc, char *argv[])
                          {
                            long choixB;
                            do
                            {

                            printf("=== Choix de l'operation ===\n\n");
                            printf("1. Addition\n");
                            printf("2. Soustraction\n");
                            printf("3. Multiplication\n");
                            printf("4. Division\n\n");
                            printf("Votre choix : ");
                            long choixOperation;
                            scanf("%ld", &choixOperation);
                            switch (choixOperation)
                            {
                              case 1 :
                                 printf("\n\nVeuillez entrer le premier terme : ");
                                 long nombre1 = 0;
                                 scanf("%ld", &nombre1);
                                 printf("\n\nVeuillez entrer le second : ");
                                 long nombre2 = 0;
                                 scanf("%ld", &nombre2);
                                 long resultat;
                                 resultat = nombre1 + nombre2;
                                 printf("\nCalcul effectue avec succes. %ld + %ld = %ld\n\n", nombre1, nombre2, resultat);
                                 break;
                              case 2 :
                                 printf("\n\nVeuillez entrer le premier terme : ");
                                 nombre1 = 0;
                                 scanf("%ld", &nombre1);
                                 printf("\n\nVeuillez entrer le second : ");
                                 nombre2 = 0;
                                 scanf("%ld", &nombre2);
                                 resultat;
                                 resultat = nombre1 - nombre2;
                                 printf("\nCalcul effectue avec succes. %ld - %ld = %ld\n\n", nombre1, nombre2, resultat);
                                 break;
                              case 3 :
                                 printf("\n\nVeuillez entrer le premier terme : ");
                                 nombre1 = 0;
                                 scanf("%ld", &nombre1);
                                 printf("\n\nVeuillez entrer le second : ");
                                 nombre2 = 0;
                                 scanf("%ld", &nombre2);
                                 resultat;
                                 resultat = nombre1 * nombre2;
                                 printf("\nCalcul effectue avec succes. %ld * %ld = %ld\n\n", nombre1, nombre2, resultat);
                                 break;
                              case 4 :
                                 printf("\n\nVeuillez entrer le premier terme : ");
                                 nombre1;
                                 scanf("%ld", &nombre1);
                                 printf("\n\nVeuillez entrer le second : ");
                                 nombre2;
                                 scanf("%ld", &nombre2);
                                 resultat;
                                 resultat = nombre1 / nombre2;
                                 long resultat2;
                                 resultat2 = nombre1 % nombre2;
                                 double nombre3, nombre4, resultat3;
                                 nombre3 = nombre1;
                                 nombre4 = nombre2;
                                 resultat3 = nombre3 / nombre4;
                                 printf("\nCalcul effectue avec succes. %ld / %ld = %ld avec un reste de %ld.", nombre1, nombre2, resultat, resultat2);
                                 printf("\nOu plutot : %lf / %lf = %lf.\n\n", nombre3, nombre4, resultat3);
                                 break;
                             default :
                                 printf("\nChoisissez une operation parmi les choix proposes\n\n");
                                 break;
                            }
                            printf("Vous souhaitez peut-etre recommencer le programme?\n");
                            printf("Si oui, entrez 1, si non entrez n'importe quel autre chiffre.");
                            scanf("%ld", &choixB);
                            printf("\n\n\n\n\n");
                            }while(choixB == 1);
                            printf("Calculette Version 1.1,\ncreee par Cosmonotonouille et avec l'aide des Membres du site du zero.\n\n");
                            system("PAUSE");
                            return 0;
                          }


                          P.S.: Mais il est vrai que d'annoncer toutes les variables en début de fonction est beaucoup mieux! c'est plus lisible
                          Mais j'avais la flème de tout réecrire :-°
                          • Partager sur Facebook
                          • Partager sur Twitter
                            31 janvier 2006 à 17:27:14

                            Tu as testé ton programme? J'ai l'impression que tu ne déclares pas ta variable "résultat" lors de la division.
                            C'est un bon programme (très bonne idée d'incorporer le modulo ;) ), ceci dit je pense qu'il serait beaucoup plus simple de déclarer toutes ta variables au début de la fonction main, ainsi tu n'as pas à les redéclarer dans chaque "case" du switch comme tu le fais ici. Ca allègera le programme. :)


                            Edit : Erf, grillé d'à peine une minute! :(^^
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              31 janvier 2006 à 17:29:16

                              J'ai mis à jour mon message...mais tu as tout a fais raison! ;)

                              On fait que de se croiser :lol:
                              • Partager sur Facebook
                              • Partager sur Twitter
                                1 février 2006 à 7:44:45

                                Salut,
                                Ma solution moins longue!!!

                                #include <stdio.h>
                                main ()
                                {
                                float a, b, resultat;
                                char operateur;
                                printf ("calcul à effectuer (ex: 5+3): \n");
                                scanf ("%f %c %f", &a, &operateur, &b);
                                switch (operateur)
                                {
                                case '*': resultat = a * b;
                                break;
                                case '/': resultat = a / b;
                                break;
                                case '+': resultat = a + b;
                                break;
                                case '-': resultat = a - b;
                                break;
                                default : printf ("Saisie incorrect");
                                }
                                printf ("Le résultat de %.2f %c %.2f est: %.2f", a, operateur, b, resultat);
                                while (1);
                                }
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  1 février 2006 à 13:28:54

                                  ouais c'est vrai elle est beaucoup plus pratique...BRAVO!)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    1 février 2006 à 13:33:49

                                    Sauf que ta solution nécessite des connaissances bien supérieures à celles du niveau demandé pour la calculatrice. (chapitre 5-6 du cours je crois. Alors que chaînes de caractères : chapitre 13 (12 si on prend pas le TP^^))
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      1 février 2006 à 13:34:37

                                      Je pense que c'ets le bon endroit pour poser la question, moi je n'utilise jamais de swith tjrs des conditions pour mon choix, par exemble, je fais , si le mec tape un, alors ou fait ça , si il tape 2 alors on fait ça, et si il tape plus de 2 alors on affiche un mess d'erreur et on le renvoi au menu...
                                      C'ets grave ou pas ?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        1 février 2006 à 13:37:02

                                        Ben avant je croyais que les case ne pouvaient pas prendre en "argument" des strings, je faisait comme ça... mais je suis perplexe:
                                        case 'blabla':

                                        juste avec stdio o_O ?
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          1 février 2006 à 13:50:02

                                          Citation : V1944

                                          Ben avant je croyais que les case ne pouvaient pas prendre en "argument" des strings, je faisait comme ça... mais je suis perplexe:

                                          case 'blabla':


                                          juste avec stdio o_O ?



                                          Tu dois confondre caractère et chaine de caractère, tu utilise string.h avec des chaines de caractères et non des caractères
                                          les caractères sont entre double cote et sont ecrit %c alors que les chaines sont ecrit avec %s...
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            1 février 2006 à 13:50:38

                                            Kcam==>Ben on t'obligeras jamais à utiliser de switch, mais c'est bien plus pratique pour ce genre de situations. (imagine un menu où t'as le choix entre 20 possibilités, c'est plus simple de faire "case 1, case 2 [...] case 50" que "if (choix = 1)", etc...mais tu fais comme tu veux en fait. :-)
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              1 février 2006 à 13:53:49

                                              c'est clair que le switch c'est bien pratique surtout que les menus on les utilise quasiement tout le temps
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                1 février 2006 à 13:57:50

                                                Ca fait pratiquement autant de caractère ^^ lol, non mais je pense que je vais continué avec mes conditions, je trouve ça plus claire ds ma tête (peut être parceque l'autre je ne l'ai jms utilisé ^^ )Merci quand même.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  1 février 2006 à 14:00:00

                                                  Ah non je te rassure, ça fait pas autant de caractères.^^ T'en écris quand même vachement plus avec les "else if".
                                                  Ceci dit, si ta méthode te convient, ça poste pas de problème je pense, elle marche aussi bien^^.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Anonyme
                                                    1 février 2006 à 15:48:27

                                                    Pour moi il n'y a pas de meilleur solution...Mais peut-être une plus pratique que l'autre dans certain cas...

                                                    Mais si tu n'as jamais utilisé de "switch", je te conseil d'apprendre cette fonction quand même. ça te sera peut-être util un jour qui sait
                                                    ^^
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      1 février 2006 à 19:56:20

                                                      Citation : niabocloveemi

                                                      Citation : V1944

                                                      Ben avant je croyais que les case ne pouvaient pas prendre en "argument" des strings, je faisait comme ça... mais je suis perplexe:

                                                      case 'blabla':


                                                      juste avec stdio o_O ?

                                                      Tu dois confondre caractère et chaine de caractère, tu utilise string.h avec des chaines de caractères et non des caractères
                                                      les caractères sont entre double cote et sont ecrit %c alors que les chaines sont ecrit avec %s...

                                                      Non, mais à l'époque où j'utilisais encore des switch(), je ne pouvais proposer que des case purement numériques... mon Dev-Cpp buggait pas mal à cause de bidouillages/changements de répertoire >_>

                                                      message subliminal: Vive Code::Blocks!
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter

                                                      [Débutant] Première calculatrice

                                                      × 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