Calcul

coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 - 29 déc. 2002 à 16:34
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 - 29 déc. 2002 à 18:31
Hello.
Je cherche a faire un prog qui calcule des ptits trucs dans le style 2.5+4.6*3-2*3. Il faut qu'il respecte l'ordre des ops.
Je ne sais pas comment m'y prendre...
J'ai essayé en stockant le calcul dan sun char[] et en travaillant avec la recherche de caractères mais c'est beaucoup trop lent et impossible à mettre en oeuvre avec plus d'op (sqrt, ^, sin, !, ...). Quelqu'un aurait une petite piste... Juste pour le début. Merci bcp!
coockiesch

2 réponses

cyrianox Messages postés 17 Date d'inscription samedi 9 février 2002 Statut Membre Dernière intervention 8 avril 2005
29 déc. 2002 à 17:08
Ce dont tu parles s'appelle un interpréteur d'expressions.

Pour le faire marcher il te faut :
une classe parser qui reconnait dans une expression les lettres, les symboles "/ * ( ) + -", puis traite de manière récursive les éléments.

ex : 3 * ( 1 + 4)

les parenthèses sont comptées comme un élément évalué récursivement.

tu as donc à évaluer :
1 + 4
opérateur '+', donc on additione 1 et 4
on remonte d'un cran :
3 * resultat , soit : 3 * 5
c'est une multiplication, donc on retourne 15
l'ordre de recherche pour le parser (du 1er au dernier element) :
+ - (unaire)
^
* / %
+ -
=

Voila j'espère que ça pourra t'aider.
Ces explications sont fournies à partir du livre :
"Référence Complète C++" de H.Schildt chez First Interactive.
Dans le bouquin, le prog dont tu parles est en exemple.
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
29 déc. 2002 à 18:31
SI j'utilise la recherche de caractère:

char *pdest;
pdest = strchr(calcul, '*');
int result = (int)(pdest - calcul);

Est - ce voué à l'echec car trop lent???

Y a t il une autre manière de procéder???

Merci
0
Rejoignez-nous