Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec ma calculette

la trigonométrie....

Sujet résolu
    16 décembre 2005 à 17:47:20

    Bonsoir,

    J'ai encore un petit problème avec ma calculette, depuis que je lui ai ajouté les 3 fonctions de calcul de trigonométrie cos, sin, tan au moment de la compilation on m'indique qu'il y a un bug au niveau du else pour le choix n°2. :colere:

    Voici mon code:


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

    int main(int argc, char *argv[])
    {
      double nbr1 = 0, nbr2 = 0, resultat = 0, choix = 0, angle = 0;
      char operateur, trigo;
     
      printf("                    \\\\\\\\\\\\\\\\ calculette by casper //////////////\n\n\n\n\n\n");
     
      printf("                       Quel mode choisissez-vous ?\n\n");
     
      printf("   Tapez 1 pour des operations de base\n\n");   /* Menu de départ choix des fonctions */
     
      printf("   Tapez 2 pour la trigonometrie\n\n");
     
      printf("   Tapez 3 pour les arondis\n\n");
     
      scanf("%lf", &choix);
       
         /* debut de si pour les operations de base */
         
        if ( choix == 1 )
                   
        {

        /* depart de la boucle */
       
               /* Cette partie concerne les operations de base */
     
               /* operation */
     
               printf ("     rentrer votre operation de cette maniere <nbr1><operateur><nbr2> :\n\n");
               scanf("%lf%c%lf", &nbr1, &operateur, &nbr2);
     
               /* Si c'est une addition */
     
               if   ( operateur == '+' )
                        {
                             resultat = nbr1 + nbr2;
                             printf ("resultat: %lf\n\n", resultat);   /* affiche le résultat */
             
                        }
     
               /* Si c'est une soustraction */
     
               else if  ( operateur == '-' )
                            {
                                 resultat = nbr1 - nbr2;
                                 printf ("resultat: %lf\n\n", resultat);
             
                            }
     
              /* Si c'est une multiplication */
       
               else if  ( operateur == '*' )
                            {
                                 resultat = nbr1 * nbr2;
                                 printf ("resultat: %lf\n\n", resultat);
           
                            }
     
             /* Si c'est une division */

               else if ( operateur == '/')
                           
                            {     
               
                         if ( nbr2 == 0 )
               
                                 {
                                       
                                      printf ("le denominateur ne peut-etre nul\n\n");
                           
                                 }
                                 
                        else
                           
                                 {
                                      resultat = nbr1 / nbr2;
                                      printf ("resultat: %lf\n\n", resultat);
                           
                                 }
                            }
        }
         
       /* Fin de si pour les operations de base */
      /* fin de la boucle retour aux operations de base */


                       
     
              /* Ceci est la seconde partie ( trigonométrie ) */

        else if ( choix == 2 )
           
           {
               
                printf ("taper votre calcul sous la forme <operateur cos, sin...><angle en radian>\n\n");
                scanf ("%c%lf", &trigo, &angle );
           
                      if ( trigo == 'cos' )
                     
                           {
                                  resultat = cos(angle);
                                  printf ("%lf", resultat);
                           }
           
                      else if ( trigo =='sin' )
                     
                           {
                                  resultat = sin(angle);
                                  printf ("%lf", resultat);
                           }
           
                      else if ( trigo == 'tan' )
                           
                           {
                                resultat = tan(angle);
                                printf ("%lf", resultat);
                           }
                   system ("PAUSE");
           
           }     
                                       
        /* Fin du choix n°2 */         

    return 0;
    }


    Voili voilou merci d'avance @++ :)
    • Partager sur Facebook
    • Partager sur Twitter
      16 décembre 2005 à 18:52:04

      et bien l'erreur c'est que ça ne marche pas
      dès que je choisis le choix n°2 le programme s'arrete ou windows me mets un message d'erreur comme quoi il doit fermer
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        16 décembre 2005 à 18:58:47

        T'as oublié le & dans ton scanf après le else if(choix == 2) et en plus tu utilise %s qui est pour une chapine alors que t'as qu'un char.

        ;)
        • Partager sur Facebook
        • Partager sur Twitter
          16 décembre 2005 à 19:50:53

          Ok merci, voilà j'ai corrigé mais maintenant que j'ai corrigé ces fautes de syntaxe et j'ai aussi enlevé le system ("PAUSE"); avant le else if pour le choix n°2, mais maintenant j'ai un nouveau problème quand je rentre cos 2 il ne me renvoit aucun résultat apart le system ("PAUSE") qui s'affiche...
          Vous avez une idée de ce que ça pourrait être ????
          o_O

          Merci
          • Partager sur Facebook
          • Partager sur Twitter
            16 décembre 2005 à 21:05:26

            pour comparer une suite de caractère (ou string) on utilise pas la syntaxe
            string == 'cos'


            mais celle là :
            (strcmp( string, "cos" )) == 0

            en fait, strcmp ca veut dire string compare (comparation de chaines de caractères). ensuite j'ai tapé string, "cos". c'est les deux valeurs qui vont être comparées (la valeur de la variable string et "cos").
            si après comparaison, la fonction renvoi 0, ca veut dire que les deux chaines comparées sont les même. si ca renvoi 1, la première est plus grande que la 2eme et si ca renvoi -1, la 2eme est plus grande que la 1ere je crois.
            donc quand on tape
            if (strcmp( string, "cos" )) == 0)

            si les deux string sont les même alors la fonction renvoie 0 et le test est exact et le if est true. Sinon, la fonction renvoi 1 ou -1 et le if est false.

            et voila ton code modifié :)

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

            int main(int argc, char *argv[])
            {
              double nbr1 = 0, nbr2 = 0, resultat = 0, choix = 0, angle = 0;
              char operateur, trigo[3];
             
              printf("                    \\\\\\\\\\\\\\\\ calculette by casper //////////////\n\n\n\n\n\n");
             
              printf("                       Quel mode choisissez-vous ?\n\n");
             
              printf("   Tapez 1 pour des operations de base\n\n");   /* Menu de départ choix des fonctions */
             
              printf("   Tapez 2 pour la trigonometrie\n\n");
             
              printf("   Tapez 3 pour les arondis\n\n");
             
              scanf("%lf", &choix);
               
                 /* debut de si pour les operations de base */
                 
                if ( choix == 1 )
                           
                {

                /* depart de la boucle */
               
                       /* Cette partie concerne les operations de base */
             
                       /* operation */
             
                       printf ("     rentrer votre operation de cette maniere <nbr1><operateur><nbr2> :\n\n");
                       scanf("%lf%c%lf", &nbr1, &operateur, &nbr2);
             
                       /* Si c'est une addition */
             
                       if   ( operateur == '+' )
                                {
                                     resultat = nbr1 + nbr2;
                                     printf ("resultat: %lf\n\n", resultat);   /* affiche le résultat */
                     
                                }
             
                       /* Si c'est une soustraction */
             
                       else if  ( operateur == '-' )
                                    {
                                         resultat = nbr1 - nbr2;
                                         printf ("resultat: %lf\n\n", resultat);
                     
                                    }
             
                      /* Si c'est une multiplication */
               
                       else if  ( operateur == '*' )
                                    {
                                         resultat = nbr1 * nbr2;
                                         printf ("resultat: %lf\n\n", resultat);
                   
                                    }
             
                     /* Si c'est une division */

                       else if ( operateur == '/')
                                   
                                    {     
                       
                                 if ( nbr2 == 0 )
                       
                                         {
                                               
                                              printf ("le denominateur ne peut-etre nul\n\n");
                                   
                                         }
                                         
                                else
                                   
                                         {
                                              resultat = nbr1 / nbr2;
                                              printf ("resultat: %lf\n\n", resultat);
                                   
                                         }
                                    }
                }
                 
               /* Fin de si pour les operations de base */
              /* fin de la boucle retour aux operations de base */


                               
             
                      /* Ceci est la seconde partie ( trigonométrie ) */

                else if ( choix == 2 )
                   
                   {
                       
                        printf ("taper votre calcul sous la forme \n<operateur cos, sin...><espace><angle en radian>\n\n");
                        scanf ("%s %lf", &trigo , &angle );
                       
                        if ((strcmp( trigo, "cos" )) == 0)
                             
                                   {
                                          resultat = cos(angle);
                                          printf ("%lf\n", resultat);
                                          getchar();
                                   }
                   
                        if ((strcmp( trigo, "sin" )) == 0)
                             
                                   {
                                          resultat = sin(angle);
                                          printf ("%lf\n", resultat);
                                          getchar();
                                   }
                   
                        if ((strcmp( trigo, "tan" )) == 0)
                                   
                                   {
                                        resultat = tan(angle);
                                        printf ("%lf\n", resultat);
                                        getchar();
                                   }
                           system ("PAUSE");
                   
                   }     
                                               
                /* Fin du choix n°2 */         

            return 0;
            }


            par contre ifl faudrait rajouter des else qui donne une valeur par défaut si tu tapes pas qqchose de valable.

            a++
            • Partager sur Facebook
            • Partager sur Twitter
              17 décembre 2005 à 13:55:29

              Re,
              donc si j'ai bien compris le == 0 c pour montrer que la condition est vraie ?? Bon par contre la calculette ne marche toujours pas :colere:
              Merci beaucoup @++, je vais continuer ma petite calculette ^^
              • Partager sur Facebook
              • Partager sur Twitter
                17 décembre 2005 à 17:42:28

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

                int main(int argc, char *argv[])
                {
                  double nbr1 = 0, nbr2 = 0, resultat = 0, choix = 0, angle = 0;
                  char operateur, trigo[3];
                 
                  printf("                    \\\\\\\\\\\\\\\\ calculette by casper //////////////\n\n\n\n\n\n");
                 
                  printf("                       Quel mode choisissez-vous ?\n\n");
                 
                  printf("   Tapez 1 pour des operations de base\n\n");   /* Menu de départ choix des fonctions */
                 
                  printf("   Tapez 2 pour la trigonometrie\n\n");
                 
                  printf("   Tapez 3 pour les arondis\n\n");
                 
                  scanf("%lf", &choix);
                   
                     /* debut de si pour les operations de base */
                     
                    if ( choix == 1 )
                               
                    {

                    /* depart de la boucle */
                   
                           /* Cette partie concerne les operations de base */
                 
                           /* operation */
                 
                           printf ("     rentrer votre operation de cette maniere <nbr1><operateur><nbr2> :\n\n");
                           scanf("%lf%c%lf", &nbr1, &operateur, &nbr2);
                 
                           /* Si c'est une addition */
                 
                           if   ( operateur == '+' )
                                    {
                                         resultat = nbr1 + nbr2;
                                         printf ("resultat: %lf\n\n", resultat)/* affiche le résultat */         
                                    }
                 
                           /* Si c'est une soustraction */
                 
                           else if  ( operateur == '-' )
                                        {
                                             resultat = nbr1 - nbr2;
                                             printf ("resultat: %lf\n\n", resultat);
                                        }
                 
                          /* Si c'est une multiplication */
                   
                           else if  ( operateur == '*' )
                                        {
                                             resultat = nbr1 * nbr2;
                                             printf ("resultat: %lf\n\n", resultat);
                                        }
                 
                         /* Si c'est une division */

                           else if ( operateur == '/')
                                       
                                        {     
                           
                                     if ( nbr2 == 0 )
                           
                                             {
                 
                                                  printf ("le denominateur ne peut-etre nul\n\n");
                                             }
                                             
                                    else
                                       
                                             {
                                                  resultat = nbr1 / nbr2;
                                                  printf ("resultat: %lf\n\n", resultat);
                                             }
                                        }
                    }
                     
                   /* Fin de si pour les operations de base */
                  /* fin de la boucle retour aux operations de base */


                                   
                 
                          /* Ceci est la seconde partie ( trigonométrie ) */

                    else if ( choix == 2 )
                       
                       {
                           
                            printf ("taper votre calcul sous la forme \n<operateur cos, sin...><espace><angle en radian>\n\n");
                            scanf ("%s %lf", &trigo , &angle );
                           
                            if ((strcmp( trigo, "cos" )) == 0)
                                 
                                       {
                                              resultat = cos(angle);
                                              printf ("%lf\n", resultat);
                                              getchar();
                                       }
                       
                            if ((strcmp( trigo, "sin" )) == 0)
                                 
                                       {
                                              resultat = sin(angle);
                                              printf ("%lf\n", resultat);
                                              getchar();
                                       }
                       
                            if ((strcmp( trigo, "tan" )) == 0)
                                       
                                       {
                                            resultat = tan(angle);
                                            printf ("%lf\n", resultat);
                                            getchar();
                                       }
                       
                       } 
                       
                       system("pause");   
                                                   
                    /* Fin du choix n°2 */         

                return 0;
                }


                voila le bon code, j'avais oublié de remettre un system("pause")

                a++
                • Partager sur Facebook
                • Partager sur Twitter
                  17 décembre 2005 à 18:45:27

                  Merci beaucoup Neodyme et les autres ça marche enfin :-°
                  @++
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Problème avec ma calculette

                  × 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