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 -
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.
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:
- Priorité des opérateurs en algorithme
- Logiciel algorithme euromillion - Télécharger - Loisirs créatifs
- Algorithme ajout rapide snapchat - Forum Snapchat
- Ajout rapide snap - Forum Snapchat
- Algorithme euromillion excel gratuit - Forum Algorithmes / Méthodes
- Quels sont les préfixes des opérateurs de téléphonie mobile en france - Guide
1 réponse
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
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