begin process at 2010 02 10 06:09:59
  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é :18 063 / 986

Auteur : DeadlyPredator

Ecrire un message privé
Site perso
Commentaire sur cette source (9)
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

Source avec Zip CLASSE MATRICE par frankladen11
Source avec Zip Source avec une capture RÉSOLUTION D'ÉQUATION GRÂCE AU CALCUL DES DÉTERMINANTS par frankladen11
Source avec Zip TYPE DE DONNÉES ABSTRAIT GRAPHE par smutsonberg
Source avec Zip Source avec une capture SIMPLEXE ET DUAL par MrRenaud
Source avec Zip ALGORITHME DE BELLMAN, CALCUL DES TEMPS AU PLUS TÔT ET RECHE... par michaelcourcy2005

 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 !

 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 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 String-date pour informix [ par hluder ] Bonjour!Alors voilà le problèmeJe doit insérer une date via une application web dans ma base de donnée informixtable: contient une variable de type Da Remplacer string entre tags [ par c1rd3c ] Bonjour,Je souhaiterai remplacer les strings entre 2 tags html. Le tag de debut et fin peuvent etre presents plusieurs fois dans le string. Par exempl entrer le doc xml en paramètre???????? [ par blatifa2008 ] Bonjour,j'ai posé mon problème plusieur fois et j'ai essayer de le résoudre mais je n'arrive à rien svp s'il y a qlq un peut m'aider parce que c'est t


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,562 sec (4)

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