Calculatrice en ligne de commande

Signaler
Messages postés
27
Date d'inscription
samedi 26 janvier 2008
Statut
Membre
Dernière intervention
6 décembre 2010
-
Messages postés
252
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
25 avril 2011
-
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
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>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;
}}

3 réponses

Messages postés
27
Date d'inscription
samedi 26 janvier 2008
Statut
Membre
Dernière intervention
6 décembre 2010

sos ......svp !!!!!!!
Messages postés
293
Date d'inscription
jeudi 21 août 2003
Statut
Membre
Dernière intervention
10 avril 2015
2
Salut,

Le but du Forum n'est pas de copier coller de façon bourrin tout son code et de demander l'erreur.
Donc je ne lis pas ton code, toutefois voici 2 conseils pour t'aider à avancer:

- ton code n'est pas du tout indenté ! ca ne m'étonne pas que tu soit dans une boucle infinie. comment tu peux t'y retrouver?

- pour voir d'ou vienne les problèmes de boucles infinie, si tu n'a aucunes idées ou chercher, execute en mode debug avec ton compilateur.

______________________
Adeon, programmeur de jeux sur directX 9 (www.theolith.com) à votre service !
Messages postés
252
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
25 avril 2011

Salut,

Dans tous les if de la fonction main, tels:
if(*argv[i]=='x' && *argv[i]!='!')
tu en fais trop. Si *argv[i] vaut 'x', nécessairement
il ne vaut pas '!'. Donc ce test peut s'écrire plus
simplement:
if (*argv[i]=='x')

Ensuite, dans toute cette suite de if, le bloc exécuté
en cas de validité d'un de ces tests est le même quel
que soit le test. Tu peux écrire, par exemple:

switch(*argv[i]){
case '(':
case '+':
case '-':
case 'x':
case '/':
case '%':
if ( k != 0) { ... }
...
break;
default:
;
}

Enfin, et plus important, il faut allouer de la
mémoire pour le tableau t! Combien ? J'ai cru
comprendre qu'il n'y a pas plus de valeurs que argc.
Et puis un tableau de char semble suffire:
char *t = new char[argc];
Sans oublier le
delete[] t;
correspondant (à la fin de la fonction main).

Ces quelques remarques t'aiderons, j'espère, à écrire
du C(++) correct. En ce qui concerne l'algorithme, je ne
suis pas sûr d'avoir bien compris comment il fonctionne.
En tous cas, sur l'entrée
1 + 2
il me répond:
«le résultat de l'opération est 3»
C'est prometteur.

Bonne prog,