Comment chercher un opérande central d'une expression arithmétique

kadermissoum Messages postés 3 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 6 décembre 2014 - 27 nov. 2009 à 21:50
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 28 nov. 2009 à 13:47
Bonjour;
J'ai l'expression arithmétique suivante :

S = "((A+B)*(C-(D/E)))";
    |-----| |-||---|
    |-----| |---------|
       PG       PD

- Je voudrai chercher l'opérande centrale de cette expression (op est '*')
char cherche_op_cenrale(char s[]);
return opérande
--> l'opérande centrale de partie gauche est '+'
--> l'opérande centrale de partie droite est '-'

- Finalement je voudrai une function qui return les opérandes dans un vecteur de cette classement qui utiliser function
char cherche_op_cenrale(char s[]); (récurssive)
les arbres.

    --+-+-+--
Tab |*|+|-|/|
    --+-+-+--

char (char S[]) --> return un vecteur compli Tab

Merci...

1 réponse

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
28 nov. 2009 à 13:47
La méthode est la suivante, en récursif, et pas forcément la plus optimisée:

1) Tu avances jusqu'à trouver un caractère spécial prioritaire (*, % ou /).
Sinon, tu recommences en cherchant un caractère spécial non prioritaire (+ ou -).
Une fois que tu en as trouvé un, tu relances la fonction avec la partie à gauche de ce que tu as trouvé et la partie à droite, tout en conservant l'opérande actuelle.

2) Pour gérer les parenthèse, c'est pas compliqué, il te faut une pile. Si tu vois une parenthèse ouvrante, tu l'empiles. Tu avances ensuite jusqu'à la prochaine parenthèse fermantes, tout en empilant toutes les parenthèses ouvrantes que tu verrais. Si tu tombes sur une parenthèse fermantes, tu dépiles. Si ta pile est vide, tu peux utiliser la méthode décrite en 1). Si ta pile n'est pas vide, tu continues la méthode 2).

Je te conseil de le faire par étape, d'abord tu codes la méthode 1), sur des expressions non parenthésées. Puis te met en place la méthode 2) en te servant de la méthode 1) qui devrait alors fonctionner.
0
Rejoignez-nous