Calculatrice en c parenthésé [Résolu]

bossaug 3 Messages postés samedi 8 décembre 2007Date d'inscription 4 janvier 2008 Dernière intervention - 2 janv. 2008 à 16:54 - Dernière réponse : idoudiabdelbasset 1 Messages postés jeudi 10 mars 2011Date d'inscription 10 mars 2011 Dernière intervention
- 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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
acx01b 281 Messages postés dimanche 7 septembre 2003Date d'inscription 8 juillet 2014 Dernière intervention - 2 janv. 2008 à 18:36
3
Merci
bonjour je pense que la technique la plus simple est la suivante:

tu commences par faire ton arbre à partir de ton expression parenthésée:

(1 * ( 2 + 3) - (6 - 7))
devient
TmpExpr1 = 2 + 3
Tmp Expr2 = 6 - 7
Resultat = 1 * TmpExpr1 - TmpExpr2

ensuite tu appliques successivement ces règles:

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

Merci acx01b 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de acx01b
Meilleure réponse
bossaug 3 Messages postés samedi 8 décembre 2007Date d'inscription 4 janvier 2008 Dernière intervention - 3 janv. 2008 à 12:32
3
Merci
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

Merci bossaug 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de bossaug
acx01b 281 Messages postés dimanche 7 septembre 2003Date d'inscription 8 juillet 2014 Dernière intervention - 3 janv. 2008 à 14:14
0
Merci
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 * /

Renaud
Commenter la réponse de acx01b
bossaug 3 Messages postés samedi 8 décembre 2007Date d'inscription 4 janvier 2008 Dernière intervention - 4 janv. 2008 à 16:22
0
Merci
Merci beaucoup pour ton aide si précieuse je dois la rendre demain et j'ai toujours pas fini mon cerveau commence à chauffer lol
Encore Merci
Commenter la réponse de bossaug
cs_safsafa 1 Messages postés lundi 24 mars 2008Date d'inscription 26 mars 2008 Dernière intervention - 26 mars 2008 à 22:54
0
Merci
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

              
Commenter la réponse de cs_safsafa
Popelku 1 Messages postés mardi 3 mars 2009Date d'inscription 4 mars 2009 Dernière intervention - 4 mars 2009 à 00:05
0
Merci
Est-ce que quelqu'un aurait un code à partager pour cette calculatrice sans avoir à utiliser de pointeurs ?
Commenter la réponse de Popelku
idoudiabdelbasset 1 Messages postés jeudi 10 mars 2011Date d'inscription 10 mars 2011 Dernière intervention - 10 mars 2011 à 14:34
0
Merci
comment réaliser un simple calculatrice a base de c++
Commenter la réponse de idoudiabdelbasset

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.