bonjour a tous et merci d'avance dans le cadre d'un tp c++ je dois réaliser une calculatrice en ligne de commande ,voici l'enancé de l'exercice
Realiser un programme qui simule une calculatrice :
1. Ecrire un programme qui recoit sur sa ligne de commande une expression
quelconque, contenant des parentheses, des nombres reels et des operateurs
(+,. ,.,/), puis affiche sa valeur si elle est evaluable, sinon il affiche
un message signalant l¡¯erreur.
2. Completer le programme en ajoutant le cas des expressions avec des fonctions
mathematique telles que : sin, cos, tan,
j'ai déjà fait un code mais ca donne rien comme resultat est plonte comme ci j'ai une boucle infini voici mon code et merci d'avance
#include <iostream>
using namespace std;
float calculer(char x,char op, char y);
int main(int argc, char* argv[])
{
float r=0;
char** t;
int i,k=0,e=0;
for(i=1;i<argc;i++){
if(*argv[i]=='(' && *argv[i]!='!' && *argv[i]!=')'){
if(k!=0){*t[k]= *argv[i-2];*argv[i-2]='!';}
*t[k]= *argv[i-1];
*t[k+1]= *argv[i];
*t[k+2]= *argv[i+1];
k=k+3;
*argv[i-1]='!';
*argv[i]='!';
*argv[i+1]='!';
}
if(*argv[i]=='x' && *argv[i]!='!'){
if(k!=0){*t[k]= *argv[i-2];*argv[i-2]='!';}
*t[k]= *argv[i-1];
*t[k+1]= *argv[i];
*t[k+2]= *argv[i+1];
k=k+3;
*argv[i-1]='!';
*argv[i]='!';
*argv[i+1]='!';
}
if(*argv[i]=='/' && *argv[i]!='!'){
if(k!=0){*t[k]= *argv[i-2];*argv[i-2]='!';}
*t[k]= *argv[i-1];
*t[k+1]= *argv[i];
*t[k+2]= *argv[i+1];
k=k+3;
*argv[i-1]='!';
*argv[i]='!';
*argv[i+1]='!';
}
if(*argv[i]=='%' && *argv[i]!='!'){
if(k!=0){*t[k]= *argv[i-2];*argv[i-2]='!';}
*t[k]= *argv[i-1];
*t[k+1]= *argv[i];
*t[k+2]= *argv[i+1];
k=k+3;
*argv[i-1]='!';
*argv[i]='!';
*argv[i+1]='!';
}
if(*argv[i]=='-' && *argv[i]!='!'){
if(k!=0){*t[k]= *argv[i-2];*argv[i-2]='!';}
*t[k]= *argv[i-1];
*t[k+1]= *argv[i];
*t[k+2]= *argv[i+1];
k=k+3;
*argv[i-1]='!';
*argv[i]='!';
*argv[i+1]='!';
}
if(*argv[i]=='+' && *argv[i]!='!'){
if(k!=0){*t[k]= *argv[i-2];*argv[i-2]='!';}
*t[k]= *argv[i-1];
*t[k+1]= *argv[i];
*t[k+2]= *argv[i+1];
k=k+3;
*argv[i-1]='!';
*argv[i]='!';
*argv[i+1]='!';
}
}
for(i=0;i<k;i++){ r = calculer(*t[i],*t[i+1],*t[i+2]);
cout << *t[i];
//cout <<"le résultat de l'opération est " <<r << endl;
}
cout <<"le résultat de l'opération est " <<r << endl;
return 0;
}
float calculer(char a,char b, char c){
int x,y,z=0;
float r=0;
char op;
/*cout << "entrez un entier suivi d'un opérateur arithmetique suivi d'un autre entier :" << endl;
cin >>x >>op >>y;*/
x = (int)(a -'0');
op = (char) b;
y = (int)(c -'0');
if((op != '+') && (op != '-') && (op != 'x') && (op != '/') && (op != '%')){ cout <<"opérant invalide ..!!!" << endl;z=1; }
if(op =='-' && x<y) {cout <<"opération invalide sur des entires ..!!!" << endl;z=1; }
if(op =='/' && y==0){ cout <<"opération invalide sur des entires division par zero ..!!!" << endl;z=1; }
if(z==0){
switch(op){
case '+':r = x + y ;break;
case '-':r = x - y ;break;
case 'x':r = x * y ;break;
case '/':r = x / y ;break;
case '%':r = x % y ;break;
}
return r;
}}