Priorité opérateurs en algo

Yacouba Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   -  
sebsauvage Messages postés 33415 Statut Modérateur -
Salut à tous! dans un projet avec Delphi pour realiser une calculatrice élaborée, j'ai des difficultées pour implementer la priorité des operateurs et des parenthèses.

En clair comment calculer une expresion telle que
( a*(b-c/2) ) sans utiliser laborieusement des" case of"ou des" if" intempestifs sachant bien sur que cette epression est consideree comme une chaine (string) par Delphi

une procedure recursive par ex pour prendre en compte tous les cas de priorité?

merci de m'aider.

1 réponse

sebsauvage Messages postés 33415 Statut Modérateur 15 667
 
Hello.

Pour traiter ce genre d'expression, on a l'habitude de la transformer en notation polonaise inverse.
C'est à dire qu'on travaille avec une pile.

On empile les opérandes sur la pile, et chaque opérateur effectue l'opération sur les 2 éléments les plus hauts de la pile.

(a*(b-c/2))

donnerait:
empiler a
empiler b
empiler c
empiler 2
/ ( cela calcul c/2 )
- ( cela calcul b-(c/2) )
* ( cela calcul a*(b-(c/2)) )

Après, c'est à toi de traiter correctement les parenthèses et la précédence pour empiler les opérandes et opérateurs dans le bon ordre.

Il faut savoir que l'ordinateur ne procède pas autrement pour décomposer et calculer de telles expressions.

Par contre je n'ai pas sous la main d'algo pour effectuer cette conversion expression numérique --> polonaire inverse mais ça devrait se trouver sur Google.

http://www.google.com/search?q=notation+polonaise+inverse
0