begin process at 2012 02 10 19:18:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths et Algorithmes

 > CALCULER UNE ÉQUATION MATHÉMATIQUE COMPLEXE DANS UN STRING ET OBTENIR SON RÉSULTAT

CALCULER UNE ÉQUATION MATHÉMATIQUE COMPLEXE DANS UN STRING ET OBTENIR SON RÉSULTAT


 Information sur la source

Note :
8 / 10 - par 4 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths et Algorithmes Classé sous :calcul, expression, mathématique, string, évaluer Niveau :Expert Date de création :22/07/2006 Date de mise à jour :22/07/2006 20:17:03 Vu / téléchargé :25 796 / 1 181

Auteur : DeadlyPredator

Ecrire un message privé
Site perso
Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Ce code permet de calculer des expressions complexes. Exemple, avec -3+(2+(2*2)/4)^2-1 on obtient 5.0. L'utilisation est simple:

JCalculateur calculateur = new JCalculateur();
calculateur.setEquation(taEquation .getText()); // l'équation
try {
    calculateur.calculer(); //calcule
    tResult.setText(calculateur.toString()); //la réponse
} catch (Exception e) { //Si erreur
    tResult.setText(e.getMessage()); //affiche le message d'erreur à la place de la réponse
}

Supporte de nombreuses fonctions (sin, cos, tan, log, ln, pi, ...) et les opérateurs +, -, *, /, ^, les nombres négatifs et les nombres à virgule. Pour les fonctions, les arguments doivent être entre des crochets et non des parentèses. Ex log[10]

Le but de cette source est que je planifie faire un petit langage de programmation et cet évaluateur d'expression constitue une grosse étape. Je vais essayer de trouver une solution au crochets et penser à une implémentation de and &, or |, xor %, modulo \ et d'un log plus efficace logx[argument, base].


 Conclusion

Le résonnement pour arriver à calculer des expressions est complexe, c'est pourquoi je l'ai diviser en fonctions, pour l'afficher plus clairement.

Donnez moi vos commentaires

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

22 juillet 2006 07:21:10 :
fautes de frappes
22 juillet 2006 08:03:26 :
Ajout des opérateurs \ (modulo), & (AND), | (OR), % (XOR) ATTENTION, ces trois derniers travaillent avec des entiers Ajout de la notation scientifique ex 10E-2 10E3 Ajout d'une page de test HTML
22 juillet 2006 20:17:03 :
Correction d'un léger bug: point ou virgule ne fait maintenant plus de différence

 Sources du même auteur

Source avec Zip APPELER DES APIS SANS PROGRAMMATION JNI

 Sources de la même categorie

IMPLÉMENTATION DE L'ENSEMBLE C AVEC JAVA par Scupper
CALCUL D'EXPONENTIEL ( PRÉCISION MODIFIABLE) par Scupper
Source avec Zip TRANSFORMATION D'UNE EXPRESSION ARITHMETIQUE (INFIXÉ) EN POS... par billatosco
PROBLÈME DES N-REINES par jojolemariole
Source avec Zip ARRAYMATRIX -MATRICE MULTIDIMENSIONELLE ET GÉNÉRIQUE- , IMP... par labandus

 Sources en rapport avec celle ci

Source avec Zip TOUTES LES OPÉRATIONS POSSIBLES SUR UNE MATRICE par Captain Igloo
Source avec Zip CALCULATRICE par javajoum
CALCUL DE PI par cyberfastfred
ADDITION par paradoxreal8
CALCUL DE NOMBRES PREMIERS par niiizzzz

Commentaires et avis

Commentaire de DeadlyPredator le 22/07/2006 08:04:37

Les possibilités d'expension de ce code sont grandes, vous pouvez facilement implenté des opérateurs et des fonctions.

Commentaire de amezghal le 22/07/2006 14:12:14

est ce que je peut utilser votre class pour en faire un petit traceur des fonctions et d'integrales ,si non je suis obliger de construire le mien(j'ai dejà réaliser cela avec vb mais je n'arrive pas a le traduire en java ) merci.

Commentaire de DeadlyPredator le 22/07/2006 20:14:43

ok, tu veux dire avoir une fonction comme x^2+3x-2=y ou 3x+4=y? Si oui, pas de problèmes. Il ne te suffit que de conserver la formule de l'utilisateur et quand tu trace, tu fait un while et à chaque boucle, tu remplace avec .replace sur le string la variable x par la valeur requise et tu trace le résultat.

Commentaire de amezghal le 23/07/2006 23:53:35

merci; mais j'arrive a faire la mienne;rendevous dans 2 jrs d'ici.

Commentaire de laurent1024 le 27/07/2006 23:18:36

Ca m'a pas l'air mal cette source. par contre j'ai regarde vite fait le code, pourquoi n'as tu  pas realiser un automate à pile pour la décomposition des sous equations ?
Je pense qu'il te permettrait aussi de gerer ton probleme avec les crochets, et si mes souvenirs sont bons, les compilateurs utilisent cette technique.

++

Commentaire de Neutrino216 le 18/02/2007 15:19:22

Salut,
Je viens de jeter un coups d'oeil à ton code. Un conseil : pense à faire des commentaires. Avant j'en faisais jamais, mais maintenant je peux t'assurer que c'est très important, ça facilite enormément la compréhension du code.

Enfin une proposition : Tu aurai pu penser à utiliser une structture de donnée de type arbre et le contruire progressivement en lisant ton string. Ensuite en parcourant l'arbre de maniére 'in-fixe' CAD fils gauche, pere, fils droit tu obtient une formule mathématique ensuite t'a plus qu'a la lancer. Je crois que c'est ce qui est fait par les programmes de calcul usuels.

Commentaire de verdy_p le 25/02/2009 06:04:20

Quel choix étrange de choisir \ pour modulo (au lieu du % usuel) et % pour XOR (au lieu du ^ usuel)...

Autre remarque à Neutrino216 : les programmes évaluant des expressions ne construisent pas un arbre, mais évaluent directement l'expression avec une pile. Construire un arbre en mémoire pour ensuite l'évaluer est une perte de temps et de ressources, complètement inutile. Le seul intéret de l'arbre estde stocker les résultats intermédiaires évalués dans la pile, quand ceux-ci ne peuvent pas être exprimés par une simple constante (par exemple lorsque l'expression contient des variables non évaluables immédiatement ou qui doivent être évaluées lorsque le programme obtenu sera utilisé et réutilisé avec des valeurs différentes des variables).

La construction d'arbre sert plutôt pour la compilation du code afin de le transformer en langage intermédiaire ou en code d'assemblage ou code objet (assembleur ou code objet pour CPU ou pour GPU, ou pour langage d'assemblage binaire pour machine virtuelle Java ou .Net ou Python, etc.).

Ceci dit, même pour la compilation, l'évaluation directe des expressions a également lieu avec une pile, destinée à synthétiser les résultats et précalculer les constantes ou simplifier l'expression avant de produire le code machine: la pile, au lieu de ne stocker que des nombres constant, peut stocker aussi des sous-arbres contenant des références de variables, et au cours de l'évaluation, certains sous-arbres pourtant non valués peuvent devenir inutilisés et seront éliminés par le compilateur, qui ne gardera que le dernier arbre totalement simplifié où toutes les sous-expressions constantes auront été préévaluées.

L'utilité de l'évaluation avec un arbre intermédiaire avant la production de code objet est surtout de permettre des manipulations diverses de l'arbre (en vue de son optimisation avant production du code objet) et de mémoriser divers indicateurs utilisés dans différents parcours (par exempel pour l'évaluation sémantique, ou l'analyse des prédictions de branchement, ou de l'allocation de mémoire ou de registre, ou pour la détermination des résultats intéremédiaires qui doivent faire ou non l'objet d'un cache).

Dans le cadre de ce programme, qui ne fait qu'évaluer une expression simple sans variables, l'arbre ne sert à rien du tout, on évalue tout directement dans la pile. Le but de ce programme n'est pas de faire un moteur de script.

Commentaire de DeadlyPredator le 25/02/2009 16:27:34

L'arbre aurait été une meilleure solution, mais quand j'ai fait ce code j'étais jeune et je n'avais presque pas d'expérience en programmation ;-) J'ignorait encore que les arbres existait aussi en programmation à part dans un treeview. Normalement ce qu'il aurait fallut faire, c'est scanner l'expression, la compilée et après l'exécuter avec les paramètres requis (comme placer les variables par exemple). Un moteur de script complexe et portable capable de gérer les boucles, fonctions, expressions, conditions, ... est dans mes cartons actuellement. Peut-être qu'un jour je vais m'y mettre et terminer cela.

Commentaire de mercier134 le 03/01/2010 19:03:23 7/10

Bonjour,
1. Chaque fois que j'essaye de faire un calcul avec une fonction cela m'indique "Erreur de syntaxe".
2+exp[2] fonctionne mais pas exp[2]+2 ... idem pour 3*pi[] (fonctionne) et pi[]*3 (ne fonctionne pas) ... et cela devient encore plus embêtant pour pi[]/2 (ne fonctionne pas) car c'est pas la même chose que 2/pi[] ... ^^

2. Un conseil : Commente plus le code et les méthodes ... ce sera beaucoup plus facile à te (re)lire (pour toi plus tard et nous maintenant)

Sinon, ça m'a l'air d'être un très bon code !

Commentaire de yassirone le 06/01/2011 01:38:24

bonjour,

1) meme blem avec les fonction que celui qu'à signaler MERCIER134
2) si je veux garder le principe en utilisant des piles ou des arbres, comment pourrai je le faire  ?

Commentaire de Mohamed13101989 le 22/05/2011 12:41:32

bonjour ,
je veux utuliser votre code pour calculer les images des points d'une fonction.on faite je veux tracer la courbe d'une fonction donné. please, pouvez vous m'aider..chui bloqué :((

Commentaire de Mohamed13101989 le 22/05/2011 14:27:00

calculateur.setEquation?? mais la methode setEquation n'est pas defini dans la classe jCALCULATEYR????????

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Automate java (calcul d'une expression mathématique simple) [ par Raph113 ] Bonjour à tous, je m'adresse à vous car j'ai un projet en java à réaliser et je suis un desesperé. Voila donc notre projet consiste à réaliser une app expression régulière [ par ludoW21 ] Bonjour,quelqu'un  peut-il m'aider? je ne connais pas les expressions régulières. Bref, voici mon problème.J'ai par exemple la String suivante :    ro Pb calcul avec un string [ par nicboi ] Salutje cherche a faire un calcul a partir d'un string du style "10+12*52/36-4" sans tenir compte des priorite d'operation.Existe t'il une fonction ja parseur d'expression mathématique (progammation java) [ par geomax05 ] Salut, il faut faire comme un projet universitaire une calculatrice scientifique graphique qui lit toute une expression avec des parenthèses. ... Mais URGENT AIDEZ MOI SVP [ par Aymanovitch ] salut tout le monde j'ai un petit problème !!! Je suis entrain de faire une calculatrice d'une expression arithmétique simple en JAVA. j'ai réussi à f Calcul sur de grand nombre [ par Dinsfire ] Bonjour, Je suis actuellement sur un projet où mon but est de créer une calculatrice qui sera capable de calculer des nombres plus grand que des doub Expression dynamique [ par kityof33 ] je possède une fenêtre avec 3 boutons (Button class) nommés Rouge, Vert et Bleu.J'ai une methode assignColor qui a pour parametre une String S1 qui pe Graphes et expressions arithmétiques (Etudiant en galère !!!) [ par mrginto ] Bonjour, On a vite fait appris la prog en Java pour faire une petite interface graphique nous permetant de créer des figures, de le déplacer , grouper conversion d'une expression infixée en une expression postfixée (Probleme avec les parenthés ds l'expression) [ par Strick9 ] Salut a tous, j ai un probleme lors de la coversion d'une expression arithmétique infixée ( exemple:  4 * 3 / ( 2 + 2 )      ) en un exprssion arithme conception java [ par samplaid ] J'ai plusieur problèmes de conceptions surtout pour l'héritage. Imaginons que je construises un arbre tel que celui-ci. J'aimerais savoir quelle est l


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,122 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales