Partage

Calculatrice avec puissance

5 puissance 2 = 24 !

Sujet résolu
Le 28 mars 2007 à 13:29:27

bonjour,
j'essai de faire comme premier programme une calculatice.
j'ai bien reussi les o<code type="c"></code>pérations simple : +, -, /, x
j'ai voulu y intégrer les puissance, pour cela j'avais trouvé le code
resultat=pow(nombre1, nombre2);
cela fontionne très bien la plupart du temps,
malheurement, lorsque je calcule 5^2 cela me mets 24 au lieu de 25
D'ou le probleme peut-il venir ?
Merci d'avance de vos reponses.
Cordialement
Publicité
Le 28 mars 2007 à 13:29:27
Le 28 mars 2007 à 13:33:44

Pourrai tu posté le code de ta fonction pow, stp.
Le 28 mars 2007 à 13:35:46

mon code est :


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




int main(int argc, char** argv[])


{


COORD         dwTaille = {80, 25};
                    HANDLE        hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

                  SetConsoleScreenBufferSize(hConsole, dwTaille);
                  SetConsoleTitle("XDOS Calculatrice Ultimate");



    // Panneau "d'affichage" //



                       printf("\n\n\n\n\n\n\n\n");


                       printf("                     **************************************\n");
                       printf("                     *          XDOS CALCULATRICE         *\n");
                       printf("                     **************************************\n");
                       printf("\n");

                       printf("                             Chargement en cours");


Sleep(300);

Sleep(350);
printf(".");
Sleep(350);
printf(".");
Sleep(350);
printf(".\n");

printf("             Chargement effectue avec succes. Ouverture de la session.");


Sleep(1700);

                       printf("\n\n\n\n");



    // Panneau "d'affichage" //


                       printf("                     **************************************\n");
                       printf("                     *          XDOS CALCULATRICE         *\n");
                       printf("                     **************************************\n");
                       printf("\n");

                       printf("                        XDOS Calculatrice  7.03\n\n");



printf("\n\n");


      long resultat=0,choix=0,nombre1=0,nombre2=0;

  while (resultat == nombre1+nombre2 || resultat ==nombre1+nombre2 || resultat==nombre1*nombre2 ||nombre1/nombre2)
  {




printf("                               Que voulez-vous faire ?\n\n");

   printf("     1- une addition                                10- License\n");
   printf("     2- une soustraction                            11- Aide\n");
   printf("     3- une multiplication                          12- Mises a jour\n");
   printf("     4- une division                                13- Nous contacter\n");
   printf("     5- un modulo\n");
   printf("     6- une puissance\n");
   printf("     7- un cosinus (non fonctionnel)\n");
   printf("     8- un sinus (non fonctionnel)\n");
   printf("     9- une tangente (non fonctionnel)\n");


   printf("\n");
   printf("Votre choix et valider avec Entree: ");
   scanf("%ld",&choix);

   printf("\n\n");

                          printf("\n\n\n\n");
   switch(choix)
   {
    case 1:


                       printf("\n\n\n\n\n\n\n\n");


    // Panneau "d'affichage" //


                       printf("                     **************************************\n");
                       printf("                     *          XDOS CALCULATRICE         *\n");
                       printf("                     **************************************\n");
                       printf("\n");



                          printf("\n\n\n\n");

     printf("Entrez le premier nombre a additionner et valider : ");
     scanf("%ld",&nombre1);
     printf("                                                   +");
     scanf("%ld",&nombre2);
     resultat=nombre1+nombre2;
     printf("Le resultat est : %ld\n\n\n\n",resultat);
     break;

     case 2:



                       printf("\n\n\n\n\n\n\n\n");

    // Panneau "d'affichage" //



                       printf("                     **************************************\n");
                       printf("                     *          XDOS CALCULATRICE         *\n");
                       printf("                     **************************************\n");
                       printf("\n");

                          printf("\n\n\n\n");

     printf("Entrez le premier nombre a soustraire et valider : ");
     scanf("%ld",&nombre1);
     printf("                                                  -");
     scanf("%ld",&nombre2);
     resultat=nombre1-nombre2;
     printf("Le resultat est : %ld\n\n\n\n",resultat);
     break;

   case 3:



                       printf("\n\n\n\n\n\n\n\n");

    // Panneau "d'affichage" //


                       printf("                     **************************************\n");
                       printf("                     *          XDOS CALCULATRICE         *\n");
                       printf("                     **************************************\n");
                       printf("\n");

                          printf("\n\n\n\n");

     printf("Entrez le premier nombre a multiplier et valider : ");
     scanf("%ld",&nombre1);
     printf("                                                  x");
     scanf("%ld",&nombre2);
     resultat=nombre1*nombre2;
     printf("Le resultat est : %ld\n\n\n\n",resultat);
     break;

     case 4:



                       printf("\n\n\n\n\n\n\n\n");

    // Panneau "d'affichage" //


                       printf("                     **************************************\n");
                       printf("                     *          XDOS CALCULATRICE         *\n");
                       printf("                     **************************************\n");
                       printf("\n");

                          printf("\n\n\n\n");


     printf("Entrez le premier nombre a diviser et valider : ");
     scanf("%ld",&nombre1);
     printf("                                               /");
     scanf("%ld",&nombre2);
     resultat=nombre1/nombre2;
     printf("Le resultat est : %ld\n\n\n\n",resultat);
     break;

     case 5:




                       printf("\n\n\n\n\n\n\n\n");

    // Panneau "d'affichage" //



                       printf("                     **************************************\n");
                       printf("                     *          XDOS CALCULATRICE         *\n");
                       printf("                     **************************************\n");
                       printf("\n");

                          printf("\n\n\n\n");


     printf("Entrez le premier nombre et valider : ");
     scanf("%ld",&nombre1);
     printf("Entrez le deuxieme nombre et valider : ");
     scanf("%ld",&nombre2);
     resultat=nombre1%nombre2;
     printf("Le resultat est : %ld\n\n\n\n",resultat);
     break;

    case 6:




                       printf("\n\n\n\n\n\n\n\n");

    // Panneau "d'affichage" //



                       printf("                     **************************************\n");
                       printf("                     *          XDOS CALCULATRICE         *\n");
                       printf("                     **************************************\n");
                       printf("\n");

                          printf("\n\n\n\n");


     printf("Entrez le premier nombre et valider : ");
     scanf("%ld",&nombre1);
     printf("                                     ^");
     scanf("%ld",&nombre2);
     resultat=pow(nombre1, nombre2);
     printf("Le resultat est : %ld\n\n\n\n",resultat);
     break;



     case 10:



    // Panneau "d'affichage" //


                       printf("                     **************************************\n");
                       printf("                     *         LICENSE  XDOS 7.03         *\n");
                       printf("                     **************************************\n");


     printf("L'utilisation du programme informatique est protege par les droits de propriete intellectuelle.");
     printf(" Il est interdit de vendre, donner, louer, preter le logiciel, de meme que de le ceder de quelque autre maniere que ce soit ou de le remettre a des tiers pour qu'ils l'utilisent.");
     printf(" L'ingenierie inverse (reverse engineering), la decompilation et le desassemblage, ainsi que toutes les autres formes de reconstitution de la logique du logiciel, sont defendus.\n");
     printf("\n");
     break;

     case 11:



    // Panneau "d'affichage" //


                       printf("                     **************************************\n");
                       printf("                     *           AIDE POUR  XDOS          *\n");
                       printf("                     **************************************\n");

     printf("Vous trouverez dans le menu a droite, les differentes operations que le logiciel peux effectuer.\n");
     printf("A droite, vous trouverez les options de fonctionnement du logiciel.\n");
     printf("Quand le logiciel vous demande -votre choix-, choisissez l'une des options\n disponible au dessus.\n");
     printf("N'oubliez pas que l'on valide toujours avec la touche Entree.\n");
     printf("\n");
     break;

     case 12:



    // Panneau "d'affichage" //


                       printf("                     **************************************\n");
                       printf("                     *       MISE A JOUR POUR  XDOS       *\n");
                       printf("                     **************************************\n");

                       printf("\n");

     printf("    Si vous n'avez pas de connexion a internet ou si vous n'etes pas connecte,\n");
     printf("                  aucune mise a jour ne pourra etre effectue\n\n");




       printf("                         Connexion au site");
       Sleep(500);
       printf(".");
       Sleep(500);
       printf(".");
       Sleep(500);
       printf(".\n");

       Sleep(2000);

       ShellExecute(NULL, NULL, "http://www.orange.fr", NULL, NULL, SW_SHOWNORMAL);

                       printf("\n\n");


     break;




     case 13:



    // Panneau "d'affichage" //


                       printf("                     **************************************\n");
                       printf("                     *            CONTACT  XDOS           *\n");
                       printf("                     **************************************\n");

                       printf("\n");

     printf("     Pour nous contacter, veuillez nous ecrire a axel@informaticien.com\n\n\n");

     printf("\n\n");

     break;





     break;



     default:
     printf("-- ERREUR 604 : veuillez entrer une valeur numerique correcte --\n\n");
     break;

}

   }

Sleep(750);


    system("PAUSE");

}
Le 28 mars 2007 à 14:01:06

effectivement la fonction pow de la librairie math.h a un problème avec 5^2 mais je n'en connait pas la raison.
Par contre tu peut écrire toi même une fonction qui calcule les puissances ;)
par exemple

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

long puissance(long nombre1, long nombre2);

int main(int argc, char *argv[])
{
  long resultat=0, nombre1=5, nombre2=2;
 
  resultat = puissance(nombre1, nombre2);
  printf("resultat: %ld\n", resultat);
 
  system("PAUSE");     
  return 0;
}

long puissance(long nombre1, long nombre2)
{
     long i;
     
     for(i=0; i<(nombre2-1); i++)
     nombre1*=nombre1;
     if(nombre2 == 0)
     nombre1 = 0;
     
     return nombre1;
}


si tu veux qque explication n'ésite pas mais je pense que tu n'en a pas besoin.(je ne connait pas ton niveau)
Le 28 mars 2007 à 14:10:00

Citation : percudada

effectivement la fonction pow de la librairie math.h a un problème avec 5^2


o_O Ah ? Quel problème ?


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

int main (void)
{
   double n = pow (5, 2);
   printf("n = %e %f %g\n", n, n, n);
   return 0;
}


n = 2.500000e+001 25.000000 25

Press ENTER to continue.
Le 28 mars 2007 à 14:15:45

j'avais essayer avec %g mais je n'avais pas utiliser le double
mais je veux bien qque explication, stp
après test si j'ai bien compris la fonction pow renvoi un double donc il faut le stocker dans un double
et utiliser la notation %g pour afficher la valeur correct. Sinon notre variable de type long tronque la valeur
renvoyer par pow (5.09279e-313) soit 24. Donc il y devrai y avoir d'autre cas, non?
Le 28 mars 2007 à 14:37:58

Citation : Pas de titre

printf(" **************************************\n");
printf(" * CONTACT XDOS *\n");
printf(" **************************************\n");


Juste pour preciser aue le caractere '\t' fais des tabulations. ;)
Le 28 mars 2007 à 17:52:19

percudada -> et si l'exposant est égal à zero? un petit return ?


                       printf("                             Chargement en cours");


Sleep(300);

Sleep(350);
printf(".");
Sleep(350);
printf(".");
Sleep(350);
printf(".\n");

printf("             Chargement effectue avec succes. Ouverture de la session.");



Je ne vois pas l'interet de cette partie de code.
Le 28 mars 2007 à 19:05:09

C'est pour faire style ;)
Le 8 août 2008 à 3:01:26

Citation : Yoshito

C'est pour faire style ;)


Ben c'est bien laid, il aurait dû éviter.

Calculatrice avec puissance

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown