Evaluer une expression mathematique, utilisation d'un arbre binaire

Soyez le premier à donner votre avis sur cette source.

Vue 11 509 fois - Téléchargée 346 fois

Description

Suite a de nombreuses sources sur ce sujet, j'ai ete attriste de voir sur sur phpcs, on ne trouvait pas de source qui presente un arbre binaire, methode disons conseillee...

J'ai fait comme je l'aurais fait dans un autre langage : une classe... ca utilise un arbre binaire, une valeur etant un operateur, et les deux autres valeurs etant les deux membres...

Les expressions qui manquent de parentheses avec des signes moins ou des exposans peuvent porter des erreurs

Pour ne pas bloquer un script, et ne pas renvoyer NaN, (Not a Number), j'ai decide d'utiliser des exceptions, pardonnez moi si je n'ai pas fait une classe qui herite d'Exception, mais je ne fais pas un framework, juste une classe pour montrer la methode...

Source / Exemple :


try{
	$parseur=new Parseur('sin((-x)^(1/3)*100)', array('x'=>2));
	echo $parseur->ToRpn();
}catch (Exception $e){
	echo $e;
}

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

JaguarK
Messages postés
2
Date d'inscription
lundi 15 mars 2010
Statut
Membre
Dernière intervention
6 février 2013

Autre résultat étrange : '36^(24/2)' donne le bon résultat : 4,738.10^18.
Mais '36^(24/20)' trouve 36 (à la place de 73,72) !
JaguarK
Messages postés
2
Date d'inscription
lundi 15 mars 2010
Statut
Membre
Dernière intervention
6 février 2013

Bonjour,
A priori, cette classe n'arrive pas à évaluer "36^0.5" par exemple (qui devrait donner 6).
$parseur=new Parseur('36^1', array()); fonctionne, comme $parseur=new Parseur('36^2', array()); mais $parseur=new Parseur('36^0.5', array()); ou même $parseur=new Parseur('36^(0.5)', array()); plante la session php.
coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
mis a jours, ca gere les fonctions, et la conversion vers rpn
amezghal
Messages postés
385
Date d'inscription
lundi 27 février 2006
Statut
Membre
Dernière intervention
21 août 2015
2
salut
bravo !!
mais faudrai quand meme les: sin,cos,tan
kankrelune
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

non rien à redire... .. . ;o)

@ tchaOo°

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.