begin process at 2012 05 28 10:21:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Maths

 > 

calculatrice en ligne de commande


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

calculatrice en ligne de commande

samedi 7 novembre 2009 à 10:41:25 | calculatrice en ligne de commande

devmouad

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;
}}
samedi 7 novembre 2009 à 12:44:36 | Re : calculatrice en ligne de commande

devmouad

sos ......svp !!!!!!!
dimanche 8 novembre 2009 à 14:52:25 | Re : calculatrice en ligne de commande

Adeon


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 !

mardi 10 novembre 2009 à 18:01:23 | Re : calculatrice en ligne de commande

Chouchou182

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,
--
Chouchou.


Cette discussion est classée dans : int, case, char, color, op


Répondre à ce message

Sujets en rapport avec ce message

[C++] 2 char => 1 int [ par Apaachee ] Bonjour, Je possède une opération : 1+99 que je place dans un tableau de char : coutcin>>exp; //La variable exp contient l'opération Inclure une variable int dans un char ? [ par twintornado ] Mon probleme est simple : disont que j'ai une variable entière : int variable = 488 ; // on suppose qu'elle peut changer bien sur Je veux maintenan probléme de déplacement d'une case a une autre dans un tableaux de type char* [ par mlikos ] Bonjour, est ce qq1 peut m'aider a résoudre ce problème : #include #include #include struct coordonnees { int x; int y; }; typedef struc Programmation C : 2 unsigned char dans 1 unsigned int. [ par romain60112 ] Bonjours a tous, J'ai un petit soucis pour stocker 2 unsigned char dans 1 unsigned int. Je dispose de : un tableau d'unsigned int : unsigned int con Tableaux - Gestion dynamique de la mémoire [ par Smanyx ] Salut ! Je voudrais écrire un programme qui accepte des noms saisis au clavier et les amasse dans un tableau. Comme les noms sont entrés dans un bouc Convert char** en int sous c [ par clavz40 ] Bonjour a tous, Je développe une petite application en c pour appareil de lecture de code barre dont je récupère les infos. J'avais besoin d'une fon trier un tableau de stucture en c [ par peli20 ] [^^happy13]salut, j ai un petit probleme en c ,j espere que vous m aidiez.. bon, j essaie d elaborer un programme faisant la gestion des contact, le r aide pour realiser une repertoire telephonique en langage c [ par djamel000 ] Bonjour , je souhaiterai réaliser un répertoire téléphonique à accès sécurisé(cryptage des données par mot de passe)et recherche rapide de coordonnées


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 8,018 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales