begin process at 2010 02 10 14:33:37
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caratère

 > EVALUER UNE EXPRESSION MATHEMATIQUE, UTILISATION D'UN ARBRE BINAIRE

EVALUER UNE EXPRESSION MATHEMATIQUE, UTILISATION D'UN ARBRE BINAIRE


 Information sur la source

Note :
Aucune note
Catégorie :Chaîne de caratère Classé sous :parsing, arbre, binaire, expressions, eval Niveau :Expert Date de création :18/05/2007 Date de mise à jour :28/05/2007 18:57:22 Vu / téléchargé :6 814 / 194

Auteur : coucou747

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note


 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

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


 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

18 mai 2007 18:05:59 :
corrections diverses, sur les priorites d'operateurs, les racines n emes de nombres negatifs, pour un n impair, ajout de variables...
28 mai 2007 18:57:22 :
gestion des fonctions methode pour transformer en ecriture RPN

 Sources du même auteur

Source avec une capture IMAGES GENETIQUES
Source avec Zip Source avec une capture RUBIX CUBE
Source avec Zip INTERPRETEUR BRAINFUCK
Source avec Zip PROXY HTTP : SAUVEZ VOS VIDEOS PREFEREES.
Source avec une capture ECRIRE UN TEXTE EN CERCLE SUR UNE IMAGE

 Sources de la même categorie

Source avec Zip GÉNÉRER UN MOT DE PASS ALÉATOIRE par narkos2
UNICODE TO HTML ENTITIES par CrazyShooter
Source avec Zip DÉBUTANT : FONCTION POUR TRANSFORMER UN TEMPS EN SECONDES EN... par MonkeyIsBack
FONCTION QUI GÉNÈRE UN CODE GRÂCE À L'ORTOGRAPHE ET LA PRONO... par foofymany
Source avec Zip TRADUCTION DE FICHIERS DE LANGUE AVEC GOOGLE GTRANSLATE par madislak

 Sources en rapport avec celle ci

Source avec Zip EVALUER UNE EXPRESSION À PARTIR D'UNE CHAINE DE CARACTÈRE par TheWeasel47
FONCTION EQUATION LÉGÈRE par ff5
SQUELETTE DE GESTION DES DROITS par malalam
Source avec Zip Source avec une capture CONVERTISEUR BINAIRE OCTAL DEC HEX... par sitajony
Source avec Zip CONVERTISSEUR DE BASE DÉCIMALE, BINAIRE, HEXADÉCIMAL, ... par nicof3

Commentaires et avis

Commentaire de coockiesch le 18/05/2007 08:48:17

Salut!
  Sympa! :)

Juste une petite remarque: "On ne peut pas prendre un exposant non entier sur un nombre negatif"
Que dire de (-8) ^(-1/3) ?

@++

R@f

Commentaire de coucou747 le 18/05/2007 12:25:11

a^b peut avoir plusieurs sens ca peut etre
pour b entier
b>0 le produit de a quand i varie i de 0 a b
b<0 1/le produit de a quand i varie i de 0 a -b
1 si b=0
pout b non entier
e^(b*ln(a))
la, a doit etre positif
la condition est :
if ($b!=intval($b) && $a<0)

le message est mal formule, desole, d'ailleur c'est <=0...

Commentaire de juki_webmaster le 18/05/2007 12:31:46

Pas mal :)


}else if ($this->operateur==='+'){
}else if ($this->operateur==='-'){

et encore à d'autres endroits, pourais se reduire à un switch qui serais bien plus lisible.

for ($i=0; $i<($l=strlen($in));$i++){

il ne serais pas possible de traduire en : for ($i = 0, $l = strlen($in); $i < $l; $i++) ?

function __construct($in){

il est passer où sa visibilité ?
En utilisant les singletons ont doit pouvoir ameliorer les performances du code.


9/10  

Commentaire de coucou747 le 18/05/2007 12:41:10

t'as pas besoin de singletons ici... ce qui peut etre utilise pour les perfs, c'est ecouper l'arbre avec des variables et les evaluer ensuite plus rapidement, je veux dire pouvoir utiliser des variables a la place des nombres...

Commentaire de kankrelune le 18/05/2007 15:51:06

"et encore à d'autres endroits, pourais se reduire à un switch qui serais bien plus lisible."

Plus lisible... mais moins performant... .. .

Sinon...

for ($i=0; $i<($l=strlen($in));$i++){

je ne vois pas l'interet de recalculer la longueur de $in à chaque itération cette dernière ne changeant pas en cours de boucle (ou alors j'ai pas vu)...

for ( $i=0, $l=strlen($in); $i<$l; ++$i){

sinon c'est du détail mais...

else if ($p==0...

ligne 19 et

if ($p!=0)

ligne 33 ==>

elseif ($p === 0

ou

elseif(empty($p)

et

if($p !== 0)

ou

if(!empty($p))

A part ça rien à redire... hormis que tu pourrais peut être garder dans un attribut l'expression originale dans l'optique d'un affichage... genre...

public function getResult()
{
    return $this->exp.' = '.$this->getVal();
}

enfin... c'est pas pour ce que ça change... .. . ;o)

@ tchaOo°

Commentaire de coucou747 le 18/05/2007 18:10:39

voila, c'est corrige normalement, je gere maintenant, les racines n eme pour n impair, les choses sympas de ce genre...
corrige une erreur sur les priorites d'operateurs... hier a 4h, ce m'avait echape...
ajoute aussi la possibilite de mettre une variable, de changer sa valeur et de reevaluer sans se faire tout le parsing

Commentaire de FhX le 19/05/2007 19:19:13

#  public function setval($var, $val){
# $this->vars[$var]=$val;
# if ($this->expra!==null) $this->expra->setval($var, $val);
# if ($this->exprb!==null) $this->exprb->setval($var, $val);
# }

==>
public function __set($var, $val) {
$this->$vars[$var] = $val;
if ($this->expra!==null) $this->expra->setval($var, $val);
if ($this->exprb!==null) $this->exprb->setval($var, $val);
}

// Ce qui te permet par la suite de faire :
$parseur->x = 27;


Cela étant, belle classe.
Bien que moi et les maths avancées...... ^^

Commentaire de coucou747 le 19/05/2007 19:49:03

c'est du parsing pas des maths...

Commentaire de coockiesch le 20/05/2007 20:49:10

Petite question: un "singletons", késsako?

Merci!

@++

R@f

Commentaire de coucou747 le 20/05/2007 20:57:54

une classe qui n'a qu'une seule instance...

Commentaire de coockiesch le 21/05/2007 10:19:08

Et ca sert à quoi? :)

@++

R@f

Commentaire de kankrelune le 21/05/2007 10:50:08

A moins charger la mémoire... à utiliser la même instance d'une classe tout au  long de ton script... par ex...

une class sql => une seule instance => une seule connection au serveur => plusieurs objets

@ tchaOo°

Commentaire de coucou747 le 21/05/2007 11:31:17

a premiere vue, on peut penser que faire des fonctions ou une classe disons avec que des methodes static (un namespace...) peut faire l'affaire, mais pour l'heritage ca peut etre preferable de faire un singleton...

Commentaire de coockiesch le 22/05/2007 18:51:51

Okay, merci!
Z'avez un lien sympa? :)

@++

R@f

Commentaire de kankrelune le 23/05/2007 15:43:51

http://qwix.media-box.net/index.php/2004/09/29/24-LeSingletonEnPhp5

@ tchaOo°

Commentaire de coucou747 le 23/05/2007 16:17:52

pas de commentaires sur la nouvelle mise a jour ?

Commentaire de kankrelune le 23/05/2007 16:25:00

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

@ tchaOo°

Commentaire de amezghal le 24/05/2007 22:46:54

salut
bravo !!
mais faudrai quand meme les: sin,cos,tan

Commentaire de coucou747 le 28/05/2007 18:59:23

mis a jours, ca gere les fonctions, et la conversion vers rpn

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Expressions Rationnelles et Parsing [ par Erkethan ] Salut à tous. :)J'ai un petit problème que je n'arrive pas à résoudre seul, j'en appelle donc à cette charmante communauté. ^^La ligne qui ne marche p un probléme de parsing [ par reflexinfo ] bonjour ,je suis débutant en phpje suis actuellement sur un développement dun peit moteur de recherche (tout est ok)mais je chercher à faire du parsin Evaluer le contenu d'une variable [ par joye ] Bonjour,Je suis d&#233;butant en PHP et je suis &#224; la recherche d'une fonction qui me permettrait d'&#233;valuer une variable :exemple : (la fonct eval me prend la tete [ par neo090 ] bonjour Je d&#233;sir remplacer le code : $login =$_POST["login"];$_SESSION["login"]="$login"; par une fonction : function addvar ($variable) { $t encodage mime64 binaire [ par mageonyme ] salut,j'aimerai savoir s'il existe une fonction qui encode une chaine en binaire type mime64 (javascript oblige)genre une fonction comme la fonction p Expressions régulières.. [ par syndrael ] Bonjour, J'ai un texte dans lequel je retrouve des balises &lt; et &gt;. Je tourne en rond pour &#233;crire un reg_replace qui me les supprime toutes. Possible de faire un comparateur d image ?? [ par morpheus262 ] Salut,C'est encore moi et mon explorateur "surpuissant" lol.Alors je me demander suite a mon post sur les fichier video (au faite ca marche pas trop b Fichier et binaire [ par kangoo75 ] Bonjour , J'ai cr&#233;&#233; cette fonction&nbsp; : function VisuBin($chemin_fichier){ &nbsp; $id_fichier = fopen($chemin_fichier, "rb"); &nbsp; [BLOB->GD] Redimensionner un "flux image binaire"... [ par arnal69130 ] Bonjour &#224; tous,Je cherche &#224; faire une page pour afficher la carte d'identit&#233; d'un "agent", pour simplifier disons juste son nom et sa p Expressions regulières [ par greyswandir ] Bonjour J'ai un soucis lors de la lecture d'un fichier csv separateur ",": voici une ligne type : xxx,yyy,zzz,"plop,plop,plop","toto vnspotnpoirt,pl


Nos sponsors


Sondage...

Comparez les prix

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 : 1,264 sec (4)

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