Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MINI EVALUATEUR D'EXPRESSION ARITHMÉTIQUES


Information sur la source

Catégorie :Application Classé sous : analyseur, syntaxique, arithmétique, evaluateur, grammaire Niveau : Débutant Date de création : 28/08/2006 Date de mise à jour : 21/12/2006 23:08:27 Vu / téléchargé: 6 298 / 619

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
Cette mini classe permet d'évaluer des expressions arithmétiques. Calcule sur des reels (double) et il y a que les opérations suivantes : plus,moins, multiplier,diviser,parentheses,sin,cos.

On peut aussi utiliser des variables

Se base sur la théorie des langages! utilise un analyseur syntaxique qui permet de calculer une expression a partir d'une grammaire.

Pour évaluer l'expression, on utilise une pile.

Voici la grammaire :
  S' -> E
  E -> TE'
  E' -> +TE'
  E' -> -TE'
  E' -> $
  T -> FT'
  T' -> *FT'
  T' -> /FT'
  T' -> $
  F -> id
  F -> (E)

En modifiant légérement la grammaire on peut trés facilement gerer les nombres a virgules (voir dans la méthode F)

La grammaire et la source ont été inspirés du cours de M. Krajecki disponible a l'adresse suivante :

                http://cosy.univ-reims.fr/~mkrajecki/enseignement/info62/info62Chap3.pdf
 

Source

  • //utilisation :
  • //on instancie
  • Evalueur e=new Evalueur();
  • //on évalue une expression
  • double r=e.evalue("2*5+10");
  • //le résultat n'est valable que si getErreur() ne renvoi pas d'erreur
  • if (e.getErreur()==Evalueur.NO_ERROR)
  • System.out.println("resultat : "+r);
  • else
  • System.out.println("Erreur de syntaxe");
  • NOUVEAU MAJ : on peut mettre des variables et utiliser des fonctions prédéfinies (sin et cos)
  • Pour evaluer une expression avec une variable :
  • e.addVar("x",5.0);
  • e.evalue("2.5*x");
  • Pour utiliser sin ou cos :
  • e.evalue("cos(2.0)");
  • e.evalue("cos(2.0*x+5.0)+2");
  • e.evalue("sin(2.0)");
  • NOUVEAU : Si l'expression ne change pas, on peut optimiser l'évaluation de l'expression avec reevalue :
  • -la 1ere fois, utiliser evalue pour calculer la formule (genere l'expression)
  • e.addVar("x",5.0);
  • e.evalue("cos(x)");
  • -ensuite, on peut utiliser reevalue qui rejoue la derniere expression mais en prenant compte tout de meme des variables modifiées :
  • e.addVar("x",15.0);
  • e.reevalue();
  • L'execution de reevalue est plus rapide que evalue car reevalue réutilise la pile de fonctions générée par evalue
  • Tout simplement! :)
//utilisation :
//on instancie 
Evalueur e=new Evalueur();

//on évalue une expression
double r=e.evalue("2*5+10");

//le résultat n'est valable que si getErreur() ne renvoi pas d'erreur
if (e.getErreur()==Evalueur.NO_ERROR)
 System.out.println("resultat : "+r);
else
 System.out.println("Erreur de syntaxe");

NOUVEAU MAJ : on peut mettre des variables et utiliser des fonctions prédéfinies (sin et cos)

Pour evaluer une expression avec une variable :
e.addVar("x",5.0);
e.evalue("2.5*x");

Pour utiliser sin ou cos :
e.evalue("cos(2.0)");
e.evalue("cos(2.0*x+5.0)+2");
e.evalue("sin(2.0)");

NOUVEAU : Si l'expression ne change pas, on peut optimiser l'évaluation de l'expression avec reevalue :
-la 1ere fois, utiliser evalue pour calculer la formule (genere l'expression)
e.addVar("x",5.0);
e.evalue("cos(x)");
-ensuite, on peut utiliser reevalue qui rejoue la derniere expression mais en prenant compte tout de meme des variables modifiées :
e.addVar("x",15.0);
e.reevalue();

L'execution de reevalue est plus rapide que evalue car reevalue réutilise la pile de fonctions générée par evalue

Tout simplement! :)

Conclusion

1) Je sais qu'une autre source pour évaluer des expression est disponible mais la mienne me parait interressante a publier aussi car elle montre l'utilisation de grammaire (utilisé pour faire par exemple des compilateur (c'est génial a faire ;) )). ça peut aider certain qui auront un point de départ pour comprendre les grammaires (ça peut aider en Master info par exemple!! lol)

2) Un exemple d'utilisation est inclus

Sous Windows, pour lancer le test : executez le script run.bat
executez compile.bat pour compiler les classes

En ligne de commande :
Pour executer : tapez java TestEvalueur
Pour compiler : tapez javac *.java

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   Evalueur
    • compile.batTélécharger ce fichier [Réservé aux membres club]Voir ce fichier21 octets
    • Evalueur$1.classTélécharger ce fichier [Réservé aux membres club]175 octets
    • Evalueur$Fonction.classTélécharger ce fichier [Réservé aux membres club]442 octets
    • Evalueur$FonctionCos.classTélécharger ce fichier [Réservé aux membres club]728 octets
    • Evalueur$FonctionCst.classTélécharger ce fichier [Réservé aux membres club]782 octets
    • Evalueur$FonctionDiv.classTélécharger ce fichier [Réservé aux membres club]696 octets
    • Evalueur$FonctionMoins.classTélécharger ce fichier [Réservé aux membres club]700 octets
    • Evalueur$FonctionMulu.classTélécharger ce fichier [Réservé aux membres club]698 octets
    • Evalueur$FonctionPlus.classTélécharger ce fichier [Réservé aux membres club]690 octets
    • Evalueur$FonctionSin.classTélécharger ce fichier [Réservé aux membres club]728 octets
    • Evalueur$FonctionVar.classTélécharger ce fichier [Réservé aux membres club]860 octets
    • Evalueur.classTélécharger ce fichier [Réservé aux membres club]5 176 octets
    • Evalueur.javaTélécharger ce fichier [Réservé aux membres club]Voir ce fichier12 930 octets
    • Evalueur.java.bakTélécharger ce fichier [Réservé aux membres club]12 950 octets
    • run.batTélécharger ce fichier [Réservé aux membres club]Voir ce fichier23 octets
    • TestEvalueur.classTélécharger ce fichier [Réservé aux membres club]1 127 octets
    • TestEvalueur.javaTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 147 octets

Télécharger le zip

Historique

21 décembre 2006 01:14:53 :
ajout des variables. calcul en double. ajout des fonctions cos et sinus
21 décembre 2006 01:34:35 :
rajout de la fonction reevalue pour optimiser l'exécution d'une requête
21 décembre 2006 23:08:27 :
maj du texte

Commentaires et avis

signaler à un administrateur
Commentaire de sheorogath le 02/09/2006 12:52:34 administrateur CS

pas mal comme source
je pense qu'elle va pas mal me servir pour essayer de faire un mini interpreteur de script

mais bon ce n'est pas facil tout ca lol

allez encore une bonne source ;)

++

signaler à un administrateur
Commentaire de amateur_java le 15/09/2006 15:27:16

exellent ca je pourrais l'utiliser pour mes devoirs de maths

signaler à un administrateur
Commentaire de sheorogath le 15/09/2006 18:04:27 administrateur CS

yep moi j'ai vite arreté lol
je n'ai pas le niveau mathematiques :s

signaler à un administrateur
Commentaire de o00zeus00o le 31/10/2007 15:10:58 10/10

Très bon ! Utile et basé sur des connaissances serieuses en info, pro quoi ! Merci ^^

signaler à un administrateur
Commentaire de missrosa le 18/03/2008 12:34:09

bravo pour votre tolerance et votre simplicité basé sur la métrise des notions informatique
chapeau!!

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Analyseur Parc Matériel d'un Réseau [ par arrakeen80 ] Bonjour,Je viens de commencer à travailler sur un projet qui consiste en la création d'un utilitaire autonome capable d'analyser les différentes requê Sql Server + Analyseur de Requetes [ par syndrael ] J'accède à un serveur SQL Server distant via l'Analysuer de requetes. Mais j'ai oublié de garder une procédure stockée dans un fichier et donc celle-c Coloration syntaxique textarea [ par encaps2003 ] lo!je debute en java, et je cherche comment colorer de differentes couleurs la police a l'intérieur d'un même textarea,je développe un ptit editeur de Recherche classes pour analyse syntaxique [ par cibouseb ] Bonjour,j'aimerais savoir s'il existe en Java des classes permettant de faire de l'analyse syntaxique.Merci pour vos reponseSeb analyseur XML en java [ par rubo ] Salut tt le monde!!je dois réaliser un parseur xml en java et j'ai un peu de mal a debuter!!alors si qq1 a une petite idee ou autres choses ce sera sy Coloration syntaxique [ par youp_iup ] Je pense que cette question à déjà été posé des dizaines de fois mais bon ...Je cherche à faire de la coloration syntaxique dans un JEditorPane (ou da coloration syntaxique dans un JTextComponent [ par julwoko ] Bonjour, Je voulais savoir si c'est possible d'avoir une coloration syntaxique dans un JTextComponent à la manière d'un IDE en effet je vo Coloration syntaxique [ par Desdinova66 ] Salut les mecs, Je suis en train de developper un editeur de script en java et g besoin d'une ptite API qui gere la coloration syntaxique dans un JTe Principe coloration syntaxique [ par ouassit ] Salutje cherche un algorithme optimal de la coloration syntaxique , j'ai travailer avec le traitement de tous le code à chaque modification , mai Organigramme [ par hoymille ]   Bonjour,Je voudrais pouvoir exécuter l'organigramme, donc je veux créer un compilateur avec javacc. Pour créer ce compilate


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,499 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.