Calculer une équation mathématique complexe dans un string et obtenir son résultat

5/5 (14 avis)

Vue 32 470 fois - Téléchargée 1 707 fois

Description

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

Codes Sources

A voir également

Ajouter un commentaire Commentaires
DeadlyPredator Messages postés 222 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 30 juin 2008
22 juil. 2006 à 08:04
Les possibilités d'expension de ce code sont grandes, vous pouvez facilement implenté des opérateurs et des fonctions.
amezghal Messages postés 385 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 21 août 2015 5
22 juil. 2006 à 14:12
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.
DeadlyPredator Messages postés 222 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 30 juin 2008
22 juil. 2006 à 20:14
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.
amezghal Messages postés 385 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 21 août 2015 5
23 juil. 2006 à 23:53
merci; mais j'arrive a faire la mienne;rendevous dans 2 jrs d'ici.
mercier134 Messages postés 6 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 5 janvier 2010
3 janv. 2010 à 19:03
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 !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.