A noter qu'avec aussi le problème des parenthèses et autres symboles prioritaires en mathématiques, on préfère représenter ce genre de formule sous forme d'un arbre avant de la calculer, ce qui rends le calcul plus facile à faire et l'arbre peux se construire en scannant la chaine.
1 2 3 4 5
| -
/ \
+ *
/ \ / \
5 6 2 3 |
Si on construit en scannant la chaine, ça fait ceci:
1 2 3 4 5 6 7
| 5 -> noeud = (5)
+ -> noeud = + (5)
6 -> noeud = + (5) (6)
- -> noeud = - ( + (5) (6))
2 -> noeud = - ( + (5) (6) ) 2
* -> prioritaire, on remplace l'élément de droite par un nouveau noeud: - ( + (5) (6) ) (* (2) )
3 -> on termine le sous noeud et on remonte d'un cran: - ( + (5) (6) ) (* (2) (3) ) |
Et pour le calcul:
calcul (- ( + (5) (6) ) (* (2) (3) )) = calcul ( + (5) (6) ) - calcul (* (2) (3) )
Partager