Partage
  • Partager sur Facebook
  • Partager sur Twitter

Quelque problèmes dans ma calculatrice

certainement a cause du type "double"

    19 décembre 2005 à 15:53:00

    Bonjour ! :)

    J'ai fais une calculatrice, et j'ai quelques problèmes

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

    int main(int argc, char *argv[])
    {
      long calcul=0, autres=0, nbre1=0, Asup = 0, Ainf = 0, nbre2=0, resultat=0, result2 = 0, arrondis = 0;
      double absolu = 0, nombre1 = 0, nombre2 = 0, resul1 = 0;
       
      printf("==Calculatrice==\n\n");
      printf("5.Autres\n");
      printf("\nFaites votre choix: ");
      scanf("%ld", &calcul);
     
      switch (calcul)
      {
           
      case 5:
           printf("\n\n==Autres==\n\n");
           printf("1.Valeur Absolu\n");
           printf("2.Arrondis\n");
           printf("3.Puissance\n");
           printf("4.Racine Carre\n");
           printf("\nFaites votre choix:");
           scanf("%ld", &autres);
           break;
       
      default:
           printf("\n->Vous n'avez pas rentre un nombre correct . Vous ne calculerez rien du tout !\n");
           break;
      }
           
      switch (autres)
    {
    case 1:
      printf("-Entrez un nombre decimal :");
      scanf("%ld", &nombre1);
      absolu = fabs(nombre1);
      printf("->La valeur absolu est %ld \n", absolu); //PROBLEME  pas de valeur absolu, garde la meme valeur
     
      break;
    case 2:
      printf("\n\n==Arrondis==\n");
      printf("\n1.Superieur");
      printf("\n2.Inferieur\n");
      printf("\nChoisissez: ");
      scanf("%ld", &arrondis);
      break;
    case 3:
      printf("Entrez un nombre: ");
      scanf("%ld", &nombre1);
      printf("Entrez l'exposant: ");
      scanf("%ld", &nombre2);                         //PROBLEME affiche ZERO
     
      resul1 = pow(nombre1, nombre2);
      printf("Le resultat est :%ld\n", resul1);
      break;
    case 4:
      printf("Entrez un nombre");
      scanf("%ld", &nombre1);
      resul1 = sqrt(nombre1);
      printf("La racine carré est %ld\n", resul1);    //PROBLEME affiche ZERO
      break;
     
    default:
      printf("\n->Vous n'avez pas rentre un nombre correct . Vous ne calculerez rien du tout !\n");
    }
       
           
    switch (arrondis)
           {
                  case 1:
                       printf("Entrez un chiffre : ");
                       scanf("%ld", &nombre1);
                       Asup = ceil(nombre1);
                       printf("Le resultat est : %ld", Asup); //PROBLEME n'affiche que 1
                       break;
                             
                  case 2:
                       printf("Entrez un chiffre : ");
                       scanf("%ld", &nombre1);
                       Ainf = floor(nombre1);
                       printf("Le resultat est : %ld", Ainf); //PROBLEME n'affiche que 0
                       break;
                       
                  default:
                       printf("\n->Vous n'avez pas rentre un nombre correct . Vous ne calculerez rien du tout !\n");
                       
           }
                       
                       
           
      system("PAUSE");     
      return 0;
    }


    ca c'est le code ( Je n'ai afficher QUE ce dont il y avait un probleme ( donc je n'ai pas afficher les autres trucs utiliser pour "long" ).


    J'ai expliquer mes problèmes en commentaire dans le code.

    Alors je vous demande de trouvez les problèmes, car je ne les trouve pas.

    Merci d'avance :D
    • Partager sur Facebook
    • Partager sur Twitter
      19 décembre 2005 à 15:57:16

      Pour récupérer un nombre décimal avec un scanf c'est %lf et non %ld
      Idem pour le printf
      • Partager sur Facebook
      • Partager sur Twitter
        19 décembre 2005 à 16:09:47

        Pas de quoi ;)

        Bonne continuation en C :)
        • Partager sur Facebook
        • Partager sur Twitter
          19 décembre 2005 à 18:15:59

          reSalut ;)

          j'ai encore un petit probleme dans ma calculatrice

          long calcul=0, autres=0, nbre1=0, Asup = 0, Ainf = 0, nbre2=0, resultat=0, result2 = 0, arrondis = 0;
            double absolu = 0, nombre1 = 0, nombre2 = 0, resul1 = 0;
             
            printf("==Calculatrice==\n\n");
            printf("1.Addition\n");
            printf("2.Soustraction\n");
            printf("3.Multiplication\n");
            printf("4.Division\n");
            printf("5.Autres\n");
            printf("\nFaites votre choix: ");
            scanf("%ld", &calcul);
           
            switch (calcul)
            {
            case 1:
                 printf("\n-Entrez le premier nombre : ");
                 scanf("%ld", &nbre1);
                 printf("-Entrez le second nombre : ");
                 scanf("%ld", &nbre2);
                 resultat = nbre1 + nbre2;
                 printf ("\n-> %ld + %ld = %ld\n\n", nbre1, nbre2, resultat);
                 break;
                 
            case 2:
                 printf("\n-Entrez le premier nombre (superieur au second) :");
                 scanf("%ld", &nbre1);
                 printf("-Entrer le second nombre (inferieur au premier) :");
                 scanf("%ld", &nbre2);
                 if(nbre1 > nbre2)
                          {
                 resultat = nbre1 - nbre2;
                 printf("\n-> %ld - %ld = %ld \n\n", nbre1, nbre2, resultat);
                          }
                 else
                          {
                 printf("\n-> IMPOSSIBLE : votre premier nombre est inferieur au second !\n\n");
                          }
                 break;
                 
            case 3:
                 printf("\n-Entrez le premier nombre : ");
                 scanf("%ld", &nbre1);
                 printf("-Entrez le second nombre : ");
                 scanf("%ld", &nbre2);
                 resultat = nbre1 * nbre2;
                 printf("\n-> %ld * %ld = %ld\n\n", nbre1, nbre2, resultat);
                 
                 break;
                 
            case 4:
                 printf("\n-Entrez le premier nombre : ");
                 scanf("%ld", &nbre1);
                 printf("-Entrez le second nombre : ");
                 scanf("%ld", &nbre2);
                 
                 resultat = nbre1 / nbre2;
                 result2 = nbre1 % nbre2;
                 printf("-> %ld / %ld = %ld, et reste %ld\n\n", nbre1, nbre2, resultat, result2);
                 break;
                 
            case 5:
                 printf("\n\n==Autres==\n\n");
                 printf("1.Valeur Absolu\n");
                 printf("2.Puissance\n");
                 printf("3.Racine Carre\n");
                 printf("\nFaites votre choix:");
                 scanf("%ld\n\n", &autres);
                 break;
             
            default:
                 printf("\n->Vous n'avez pas rentre un nombre correct . Vous ne calculerez rien du tout !\n");
                 break;
            }
                 
            switch (autres)
          {
          case 1:
            printf("-Entrez un nombre decimal :");
            scanf("%lf", &nombre1);
            absolu = fabs(nombre1);
            printf("->La valeur absolu est %lf \n\n", absolu);
           
            break;
          case 2:
            printf("-Entrez un nombre: ");
            scanf("%lf", &nombre1);
            printf("-Entrez l'exposant: ");
            scanf("%lf", &nombre2);                         
           
            resul1 = pow(nombre1, nombre2);
            printf("-> Le resultat est :%lf\n\n", resul1);
            break;
          case 3:
            printf("-Entrez un nombre");
            scanf("%lf", &nombre1);
            resul1 = sqrt(nombre1);
            printf("-> La racine carre est %lf\n\n", resul1);   
            break;
           
          }
               
               


          Cette fois je vous affiche tout ^^ (ou presque)

          Bref à partir de
          switch (autres)
          l'interieur d'un printf ne s'affiche pas! :o


          Pourquoi ? je trouve pas !

          merci d'avance :)
          • Partager sur Facebook
          • Partager sur Twitter
            20 décembre 2005 à 6:42:37

            Voila pour ton erreur:

            De 1:
            scanf("%ld\n\n", &autres);

            Tu peux pas mettre de \n dans un scanf hein !!

            De 2:
            A mon avis, ça marche à moitié mais tu n'as pas le temps de le voir!
            Essayer de rajouter un system("pause"); ou un scanf après tes résultats.

            Edit pour améliorer: tu sais que tu peux soustraire 2 nombres dont le 1er est inférieur au second... la réponse sera un nombre négatif mais existera dans les réels.

            Par contre, tu peux pas diviser par 0 et tu peux pas non plus extraire la racine carrée d'un nombre négatif.

            De plus, je ne comprend pas pourquoi tu interdis les nombres décimaux dans les calculs, sans le préciser en plus, en utilisant long au lieu de double et en mettant %ld au lieu de %lf)
            • Partager sur Facebook
            • Partager sur Twitter
              20 décembre 2005 à 14:11:00

              Merci Seb087 :)

              je vais essayé ;)

              et pour la soustraction : oué mais en faite j'avais fais un essaie et ça n'avais pas marché....


              Merci :)
              • Partager sur Facebook
              • Partager sur Twitter

              Quelque problèmes dans ma 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