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

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
Oucha222 Messages postés 2 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 10 février 2012 - 10 févr. 2012 à 17:00
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/38717-calculer-une-equation-mathematique-complexe-dans-un-string-et-obtenir-son-resultat

Oucha222 Messages postés 2 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 10 février 2012
10 févr. 2012 à 17:00
Sachant que le résultat obtenu est soit true soit false ?? j'ai beau cherché sur internet mais le principe de JCalculateur fait des prouesses en terme de performance ...
Oucha222 Messages postés 2 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 10 février 2012
10 févr. 2012 à 16:58
Bonsoir, est il possible d'utiliser le méme principe du JCalculateur pour calculer des expressions booleene du genre "3>2 || 0<-1"??
Mohamed13101989 Messages postés 2 Date d'inscription dimanche 22 mai 2011 Statut Membre Dernière intervention 22 mai 2011
22 mai 2011 à 14:27
calculateur.setEquation?? mais la methode setEquation n'est pas defini dans la classe jCALCULATEYR????????
Mohamed13101989 Messages postés 2 Date d'inscription dimanche 22 mai 2011 Statut Membre Dernière intervention 22 mai 2011
22 mai 2011 à 12:41
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é :((
yassirone Messages postés 2 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 6 janvier 2011
6 janv. 2011 à 01:38
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 ?
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 !
DeadlyPredator Messages postés 222 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 30 juin 2008
25 févr. 2009 à 16:27
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.
verdy_p Messages postés 202 Date d'inscription vendredi 27 janvier 2006 Statut Membre Dernière intervention 29 janvier 2019
25 févr. 2009 à 06:04
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.
Neutrino216 Messages postés 25 Date d'inscription mardi 21 février 2006 Statut Membre Dernière intervention 12 juillet 2007
18 févr. 2007 à 15:19
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.
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
27 juil. 2006 à 23:18
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.

++
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.
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
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 à 08:04
Les possibilités d'expension de ce code sont grandes, vous pouvez facilement implenté des opérateurs et des fonctions.
Rejoignez-nous