bossaug
Messages postés3Date d'inscriptionsamedi 8 décembre 2007StatutMembreDernière intervention 4 janvier 2008
-
2 janv. 2008 à 16:54
idoudiabdelbasset
Messages postés1Date d'inscriptionjeudi 10 mars 2011StatutMembreDernière intervention10 mars 2011
-
10 mars 2011 à 14:34
bonjour à tous,
je dois remettre un projet calculatrice arithmétique parenthésé en C mais etant debutant en prog je ne sais par ou commencer auriez vous des exemples de calculatrice a me soumettre par avance merci
en partant de la droite:
si on a Expr1 ^ Expr2 alors remplacer par TmpExprX = Expr1 ^ Expr2
en partant de la gauche:
si on a Expr1*Expr2 alors remplacer par TmpExprX = Expr1 * Expr2
si on a Expr1 / Expr2 alors remplacer par TmpExprX = Expr1 / Expr2
jusqu'à ce que toutes les puissances multiplications divisions aient été mises dans des TmpExpr
ensuite tu fais le calcul de chaque TmpExpr et le calcul du résultat final, simplement de la gauche vers la droite puisque tu as parenthésé en fonction des priorités des opérations
bossaug
Messages postés3Date d'inscriptionsamedi 8 décembre 2007StatutMembreDernière intervention 4 janvier 2008 3 janv. 2008 à 12:32
Ca semble très simple (pour toi lol) en envoyant ton commentaire penses tu pouvoir m'aider si bien sur tu as du tps je sais pas en combien de temps cela est faisable j'aimerai comprendre ta technique de code je n'arrive pas à avoir la logique du codage Merci par avance sinon jessaierai de me debrouiller avec ce ke tu m'a donné
comme indication
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 20146 3 janv. 2008 à 14:14
tu ne connais pas les arbres ?
je vais te proposer une méthode générale pour ton programme
tu as par exemple (2 + 3) * 5
tu vas commencer par lire ta chaine de caratère pour la découper en éléments simples:
parenthèse ouvrante, parenthèse fermante, opération, nombre
tu vas mettre dans un tableau les éléments simples:
int elem_simples[500];
int nb_elem_simples;
int nombres[500];
char operateurs[500];
int pou 0, pfe 1, op = 2, nb = 3; // parenthèse ouvrante, parenthèse fermante, opération, nombre
avec l'exemple (2 + 3) * 5 tu auras mis dans tes tableaux:
elem_simples : pou, nb, op, nb, pfe, op, nb
nombres : 0, 2, 0, 3, 0, 0, 5
operateurs: 0, 0, '+', 0, 0, '*', 0
et nb_elem_simples = 7;
ensuite pour calculer bêtement l'expression de la gauche vers la droite (sans les priorités des opérations) ça devient simple:
int calculer_expr(int *pind) {
int nb1, nb2, ind;
char op;
ind = *pind;
/*
si elements_simples[ind] est une parenthèse ouvrante
alors on appelle calculer_expr sur l sous expression:
ind++;
calculer_expr(&ind);
sinon c'est un nombre on le stocke dans nb1
on incrémente ind
ensuite si il n'y a rien après on renvoie nb1
sinon c'est un opérateur et on le stocke dans op = operateurs[ind]
enfin on refait pareil: soit c'est un nombre soit c'est une sous expression parenthésée
on stocke dans nb2
on renvoie le résultat nb1 op nb2 (selon si op est + - * / ^)
et on renvoie aussi l'index de la fin de l'expression
*pind = ind
*/
}
l'astuce c'est que c'est la même fonction qui calcule l'expression entière que une sous expression,
grâce à l'index qui se positionne au début de l'expression et qui à la fin de la fonction est positionné à la fin de l'expression (après la parenthèse fermante si c'est une sous expression)
calculer_expr est donc récursive elle s'appelle elle même pour calculer les sous expressions
ensuite il ne te reste qu'à rajouter des parenthèses autour des expressions prioritaires comme je t'ai dit plus haut
d'abord de la droite vers la gauche pour ^
puis de la gauche vers la droite pour * /
cs_safsafa
Messages postés1Date d'inscriptionlundi 24 mars 2008StatutMembreDernière intervention26 mars 2008 26 mars 2008 à 22:54
bonsoir tout le monde
moi aussi je dois remettre un projet calculatrice arithmétique programmé en C mais etant debutante en programmation je ne sais par ou commencer sachant ke le prof ns a recommander de travailler avec les piles
je lance un sos à tte l'equipe
merci