AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  

 

 script calculatrice en C++

Aller en bas 
AuteurMessage
doggydog24
Utilisateur confirmé: Rang *
doggydog24

Messages : 259
Localisation : Quebec,quebec

script calculatrice en C++ Empty
MessageSujet: script calculatrice en C++   script calculatrice en C++ EmptyJeu 30 Déc 2010 - 20:36

Avec de la recherche et j'ai modifier le script j'ai fait une calculatrice je vous donne mon script.

Code:
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
double nombre1, nombre2;
int signe;
float res;

cout << "quel est le premier nombre? " << endl;
cin >> nombre1;
cout << "quel est le deuxieme nombre? " << endl;
cin >> nombre2;
cout << "operation (1=/ 2=* 3=- 4=+)" << endl;
cin >> signe;
if (signe == 1)res = nombre1 / nombre2;
else if (signe == 2)res = nombre1 * nombre2;
else if (signe == 3)res = nombre1 - nombre2;
else if (signe == 4)res = nombre1 + nombre2;
cout << "le resultat est " << res << endl;
system ("pause");
return (0);
}
Revenir en haut Aller en bas
[TheDarkTiger]
Modérateur
[TheDarkTiger]

Messages : 7420
Localisation : Essonne

script calculatrice en C++ Empty
MessageSujet: Re: script calculatrice en C++   script calculatrice en C++ EmptyJeu 30 Déc 2010 - 22:15

C'est ici, à mon avis, qu'on voit l'utilitée du switch :


Code:
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
double nombre1, nombre2;
int signe;
float res;

cout << "quel est le premier nombre? " << endl;
cin >> nombre1;
cout << "quel est le deuxieme nombre? " << endl;
cin >> nombre2;
cout << "operation (1=/ 2=* 3=- 4=+)" << endl;
cin >> signe;
switch(signe)
{
case 1 : {res = nombre1 / nombre2; break;}
case 2 : {res = nombre1 * nombre2; break;}
case 3 : {res = nombre1 - nombre2; break;}
case 4 : {res = nombre1 + nombre2; break;}
default : break;
}
cout << "le resultat est " << res << endl;
system ("pause");
return (0);
}

ceci dit, c'est sympa de poster pour ceux qui débuteraient Wink

_________________
Bonne chance pour vos projets actuels ! Prêt à aider ceux qui en ont besoin ^^
script calculatrice en C++ U3dfr2 l'antique http://www.membres.lycos.fr/thedarkminousite/script calculatrice en C++ Sign
Bienvenue au 2549eme utilisateur : Setsuna !
Revenir en haut Aller en bas
http://www.tdms.fr
doggydog24
Utilisateur confirmé: Rang *
doggydog24

Messages : 259
Localisation : Quebec,quebec

script calculatrice en C++ Empty
MessageSujet: Re: script calculatrice en C++   script calculatrice en C++ EmptyJeu 30 Déc 2010 - 22:20

Justement je débute mais je suis avancé.
Revenir en haut Aller en bas
Gab666
Modérateur 'Zut'
Gab666

Messages : 5339
Localisation : **I move away from the mic to breathe in

script calculatrice en C++ Empty
MessageSujet: Re: script calculatrice en C++   script calculatrice en C++ EmptyJeu 6 Jan 2011 - 5:10

Si ça t'intéresses, je te poste une calculatrice que j'ai fait qui prend en compte la priorité des opérations. Tout d'abord je change l'expression en jetons, ensuite avec le Shunting-yard de Dijkstra je le change en RPN et finalement j'évalue l'expression. C'est sûr que quand on est pas familier avec les piles et les algorithmes utilisés c'est un peu plus lourd, mais bon c'est pour la science.

Code:
#include <iostream>
#include <cctype>
#include <cmath>
#include <stack>
#include <list>


#define OPERATOR 0
#define NUMBER 1

#define SHOW_POSTFIX_NOTATION 1

void stripSpaces(std::string &str)
{
   for(int i=0;i<str.size();i++)
      while(str[i]==' ')
         str.erase(i,1);
}

struct Token
{
   Token(int number)
   {
      this->type = NUMBER;
      this->number = number;
   }
   Token(char op)
   {
      this->type = OPERATOR;
      this->op = op;
   }
   union
   {
      int number;
      char op;
   };
   int type;
};

class Formula
{
   public:
      Formula()
      {
         
      }
      Formula(std::string in)
      {
         insertFormula(in);
      }
      void insertFormula(std::string in)
      {
         std::stack<char> stack;
         std::list<Token> infixFormula = readFormula(in);
         m_formula.clear();
         int count = 0;
         int lastOpPrecedence = 0;
         for(std::list<Token>::iterator i=infixFormula.begin();i!=infixFormula.end();i++)
         {   
            if(stack.empty())
            {
               lastOpPrecedence = 0;
            }
            else
            {
               lastOpPrecedence = getPrecedence(stack.top());
            }
            
            if(i->type==NUMBER)
            {
               m_formula.push_back(*i);
            }
            else if(i->type==OPERATOR)
            {
               if(i->op=='(')
               {
                  stack.push('(');
               }
               else if(i->op==')')
               {
                  while(stack.top() != '(')
                  {
                     m_formula.push_back(Token(stack.top()));
                     stack.pop();
                  }
                  stack.pop();
               }
               else
               {
                  while(getPrecedence(i->op)<=lastOpPrecedence)
                  {
                     m_formula.push_back(Token(stack.top()));
                     stack.pop();
                     if(stack.empty())
                        lastOpPrecedence = 0;
                     else
                        lastOpPrecedence = getPrecedence(stack.top());
                  }
                  stack.push(i->op);
               }
            }
            
         }
         
         while(!stack.empty())
         {
            m_formula.push_back(Token(stack.top()));
            stack.pop();
         }
         
#if SHOW_POSTFIX_NOTATION
         for(std::list<Token>::iterator i=m_formula.begin();i!=m_formula.end();i++)
         {
            if(i->type==NUMBER)
               std::cout<<i->number<<" ";
            else
               std::cout<<i->op<<" ";
         }
         std::cout<<std::endl;
#endif
         
      }
      int evaluate()
      {
         std::stack<int> stack;
         int val1;
         int val2;
         for(std::list<Token>::iterator i=m_formula.begin();i!=m_formula.end();i++)
         {
            if(i->type==NUMBER)
            {
               stack.push(i->number);
            }
            else
            {
               val2=stack.top();
               stack.pop();
               val1=stack.top();
               stack.pop();
               switch(i->op)
               {
                  case '+':
                     stack.push(val1+val2);
                     break;
                  case '-':
                     stack.push(val1-val2);
                     break;
                  case '*':
                     stack.push(val1*val2);
                     break;
                  case '/':
                     stack.push(val1/val2);
                     break;
                  case '^':
                     stack.push((int)round(pow(val1,val2)));
                     break;
               }
            }
         }
         return stack.top();
      }
      
      static int getPrecedence(char op)
      {
         switch(op)
         {
            case '(':
               return 0;
               break;
            case '^':
               return 3;
               break;
            case '/':
               return 2;
               break;
            case '*':
               return 2;
               break;
            case '+':
               return 1;
               break;
            case '-':
               return 1;
               break;
            default:
               return -1;
               break;
         }
      }
      
      static std::list<Token> readFormula(std::string formula)
      {
         int temp;
         int i = 0;
         std::list<Token> retVal;
         stripSpaces(formula);
         while(i<formula.size())
         {
            if(formula[i]=='\0')
            {
               i++;
            }
            else if(isdigit(formula[i]))
            {
               temp = i;
               for(;isdigit(formula[i]);i++);
               retVal.push_back(Token(atoi(formula.substr(temp, i-temp).c_str())));
            }
            else
            {
               retVal.push_back(Token(formula[i]));
               i++;
            }
         }
         return retVal;
      }
   private:
      std::list<Token> m_formula;
};

int main()
{
   std::string input;
   Formula formule;
   std::cout<<"Mini-calculatrice : "quit" pour quitter"<<std::endl;
   do
   {
      getline(std::cin, input);
      if(input!="quit")
      {
         formule.insertFormula(input);
         std::cout<<formule.evaluate()<<std::endl;
      }
   }while(input!="quit");
   return 0;
}


Après compilation on se ramasse avec un truc du genre :
Code:
gabriel@IForgotAboutTheName:~/Bureau$ ./calculatrice
Mini-calculatrice : "quit" pour quitter
32*4(on entre l'expression)
32 4 *(formule en RPN)
128(résultat)
21+3^2*(4/2)
21 3 2 ^ 4 2 / * +
39

_________________
PIS MANIAC PREND DES BAINS !
Revenir en haut Aller en bas
http://www.dermanium-online.webou.net/
daminetreg
Administrateur
daminetreg

Messages : 16996
Localisation : Siege du CBNA!
Projet Actuel : Site Web du CBNA, version beta :

script calculatrice en C++ Empty
MessageSujet: Re: script calculatrice en C++   script calculatrice en C++ EmptyJeu 6 Jan 2011 - 16:16

Nickel ta calculatrice Gab! happy1

_________________
Mon CV : fr - de - en
Le CBNA Tous Ensemble! Réalisons!
script calculatrice en C++ U3dfr2
Revenir en haut Aller en bas
http://lecbna.org/
Contenu sponsorisé




script calculatrice en C++ Empty
MessageSujet: Re: script calculatrice en C++   script calculatrice en C++ Empty

Revenir en haut Aller en bas
 
script calculatrice en C++
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Programmation-
Sauter vers: