Algo d'évaluation

cs_iama Messages postés 6 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 23 mai 2007 - 22 mai 2007 à 16:49
cs_iama Messages postés 6 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 23 mai 2007 - 23 mai 2007 à 17:02
Bonjour,

J'ouvre ce post pour demander de l'aide sur la réalisation d'un algorithme d'évaluation d'une expression arithmétique
Un joueur va ramasser au hasard durant le jeu des nombres, et des opérateurs, ainsi que des =.
on veux savoir si l'expression qu'il a réalisé est bonne

par exemple, s'il a ramassé respectivement un 1 un + un 4 un = et un 6 et qu'il valide l'expression il perd.
si c'est 1 + 5 =6 il gagne...
Chaque opérateur est défini par sa priorité (par exemple * a une priorité supérieure a +)

comment pourrait on écrire un tel algorithme??

merci d'avance
E.B

4 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
22 mai 2007 à 19:01
Tu peux utiliser les arbres binaires. Ceux-ci sont très pratique pour ton cas.
L'utilisation d'une grammaire formelle te permettra de determiner les expressions erronées.

Avec cette technique il t'est très facile de réaliser ce que tu veux.

Exemple de grammaire formelle qui pourrait te convenir:

line:
  expression '=' expression

expression:
  '(' expression ')'
| expression op num
| num op expression
| num

op:
  '+'
| '-'
| '*'
| '/'

num:
  1
| 2
| 3
| 4
| 5
| 6
| 7
| 8
| 9
| 0

Tu crée un lexer, puis un parser. Enfin tu crée un AST (arbre abstrait de syntaxe).
J'espere ne pas m'être trompé dans la grammaire. (Il faudra établir une priorité des opérateurs lors de la construction des opérateurs, chose que je n'ai pas spécifié dans la grammaire formelle)

Bonne chance.
0
cs_iama Messages postés 6 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 23 mai 2007
22 mai 2007 à 22:42
merci de vos réponses 
0
cs_iama Messages postés 6 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 23 mai 2007
23 mai 2007 à 17:02
merci!
0
Rejoignez-nous