doggydog24 Utilisateur confirmé: Rang *
Messages : 259 Localisation : Quebec,quebec
| Sujet: script calculatrice en C++ Jeu 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); } |
|
[TheDarkTiger] Modérateur
Messages : 7420 Localisation : Essonne
| Sujet: Re: script calculatrice en C++ Jeu 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 _________________ Bonne chance pour vos projets actuels ! Prêt à aider ceux qui en ont besoin ^^ l'antiqueBienvenue au 2630eme utilisateur : Mike Kennedy ! |
|
doggydog24 Utilisateur confirmé: Rang *
Messages : 259 Localisation : Quebec,quebec
| Sujet: Re: script calculatrice en C++ Jeu 30 Déc 2010 - 22:20 | |
| Justement je débute mais je suis avancé. |
|
Gab666 Modérateur 'Zut'
Messages : 5340 Localisation : **I move away from the mic to breathe in
| Sujet: Re: script calculatrice en C++ Jeu 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 !
|
|
daminetreg Administrateur
Messages : 16998 Localisation : Siege du CBNA! Projet Actuel : Site Web du CBNA, version beta :
| Sujet: Re: script calculatrice en C++ Jeu 6 Jan 2011 - 16:16 | |
| Nickel ta calculatrice Gab! _________________ Mon CV : fr - de - en Tous Ensemble! Réalisons! |
|
Contenu sponsorisé
| Sujet: Re: script calculatrice en C++ | |
| |
|