Priorité opérateurs en algo

Fermé
Yacouba Messages postés 48 Date d'inscription samedi 25 mai 2002 Statut Membre Dernière intervention 6 janvier 2006 - 30 oct. 2003 à 05:03
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 30 oct. 2003 à 10:03
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.
A voir également:

1 réponse

sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 662
30 oct. 2003 à 10:03
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