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
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.
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
- Logiciel algorithme gratuit - Télécharger - Édition & Programmation
- Comment avoir la priorité sur le wifi ✓ - Forum Réseau
- Code ascii en algorithme - Guide
- Algorithme qui calcule le carré d'un nombre - Forum Algorithmes / Méthodes
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
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
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