Si je vous ai expliqué comment télécharger et installer Java 1.5 et Eclipse sous Windows il y a peu, c’était pas pour ma bonne action du jour, mais tout simplement pour mon projet à la Fac. Dans le cadre de notre UE Programmation Orientée Objet Avancée en Java, nous devions réaliser un projet d’Evaluateur Générique d’Expressions Arithmétiques. Bon, autant le dire tout de suite, à part dans le nom de la matière, je ne trouve pas cela très avancé. Ca reste notre cours de l’année dernière sur le C++ transposé au langage Java. Mais ça vous vous en foutez je pense.

Evaluateur Generique Expressions Java

Vous êtes soit là parce que vous avez cherché des solutions pour passer d’une expression préfixée à une expression postfixée, soit parce que vous voulez vous rassurer et ne pas regretter d’avoir choisi autre chose que l’informatique pour vos études. A moins que soit parce que vous avez cherché sur Google « les Teletubies font du Métal ». Si c’est cette dernière possibilité, et bien vous vous êtes faits piéger. Ahah.

Expression préfixée, postfixée et infixée c’est quoi d’abord ? Et bien, la dernière c’est ce que tout le monde connaît depuis la primaire. 1 + 1 est une expression arithmétique infixée. (1 + 1) * 2 aussi. Malheureusement, il est impossible de calculer cela facilement pour un ordinateur, notamment à cause des parenthèses et des priorités des opérateurs. En effet, si pour un humain il est facile d’identifier tout de suite les priorités des operateurs, c’est loin d’être le cas pour un programme. Ce sera alors à nous d’implémenter les fonctions pour le faire. Pour rendre le tout plus facile, nous avons tendance à transformer les expressions en postfixe. On appelle cela aussi la notation polonaise inversée, elle a été inventée par le mathématicien polonais Jan Łukasiewicz. Cela consiste à mettre d’abord les deux opérandes, puis l’opérateur, comme suit:

1 + 1 = 1 1 + = 2
(1 + 1) * 2 = 1 1 + 2 * = 4

Bizarre hein ? Mais très pratique puisque cela permet de supprimer définitivement les parenthèses ainsi que les priorités des operateurs. En fait, il s’agit de faire les calculs successivement en fonction de l’ordre de lecture. 1 1 + donne 2, et 2 2 * donne 4. Vous suivez ? J’avoue que c’est assez difficile à expliquer comme cela, et qu’en plus, cela ne servira qu’à ceux qui ne le savent pas. En gros, uniquement à ceux qui veulent se dégouter de l’informatique. Et j’ai peur que cela les ai aidé.

Pour voir à quel point cela peut aider, prennons l’expression (4 / 5) * ((2 + (1/2)) + 2). Bon en fait, j’aurai dû garder mon programme lancé histoire de pouvoir vous sortir directement l’expression postfixée, car c’est dans ces moments là où l’on s’apperçoit que la sortir de tête est tout sauf simple. L’operation la plus haute est 1/2, que nous ajoutons à 2. Cela donne donc 1 2 / 2 +. Vous suivez ? Ensuite, à cela nous ajoutons une nouvelle fois 2. Cela donne donc 1 2 / 2 + 2 +. Ok ok, jusque là tout le monde suit, sauf que de l’autre côté, on doit diviser 4 par 5, soit 4 5 /. Bon, maintenant, plus qu’à faire la multiplication des deux, ce qui donnerait théoriquement 4 5 / 1 2 / 2 + 2 + *. Bon, convaincu ou pas ? Essayons petit de calculer le tout maintenant.

4 5 / = 0,8. On a donc notre expression 0,8 1 2 / 2 + 2 + *. Sauf qu’on se retrouve coincé non ? Nous avons trois différents nombres qui se suivent ? Lesquels prendre ? Les deux derniers, et ce à chaque fois, en les calculant grâce à l’opérateur qui les suit. Donc on laisse de côté 0,8 pour calculer 1 2 / = 0,5, ce qui nous donne l’expression 0,8 0,5 2 + 2 + *. On va se retrouver de nouveau dans la même configuration. Pas de panique, on refait la même manipe, ce qui nous fait 0,8 0,5 2 + 2 + * = 0,8 2.5 2 + * = 0,8 4.5 * = 3,6. Génial nan ? Ouais nan.

Sinon, pour savoir à quoi sert les classes définies et expliquées dans ma javadoc, je vous invite à lire le sujet de mon prof, que j’aime bien mine de rien, et que j’invite à changer son sujet de projet maintenant que j’ai mis mon propre travail en ligne. Bref, voici donc la javadoc de mon Evaluateur Générique d’Expressions Arithmétique et donc les sources concernées ici en zip à télécharger. Ouais je sais personne le fera, c’est juste pour embêtter mon prof.

Je suis machiavélique.


Ces articles pourraient aussi vous intéresser:
5 Comments, donnez votre avis !
  • Seraf" a écrit le 1 décembre 2008 à 17 h 22 min:

    Bah écoute, heureusement que je sais de quoi tu causes. Sinon j’aurais meme pas fini l’article XDDD

    RépondreRépondre
  • dabYo a écrit le 1 décembre 2008 à 17 h 23 min:

    M’en fou je voulais juste garder mon projet dispo quelque part :D

    RépondreRépondre
  • aka a écrit le 1 décembre 2008 à 17 h 35 min:

    Certes. J’ai tout compris. A présent, tu nous expliques les opérations préfixées ? S’il te plaît ? =D

    RépondreRépondre
  • dabYo a écrit le 2 décembre 2008 à 11 h 27 min:

    Et comment on passe de l’un à l’autre en informatique ? :D

    RépondreRépondre
  • BahamutBlast a écrit le 5 avril 2009 à 14 h 53 min:

    Que de souvenir qui remontent à la surface…
    Et pas pour mon plus grand bonheur ^^

    RépondreRépondre
  • Donnez votre avis !

    Comment avoir son avatar sur ifisDead ?