begin process at 2012 02 13 08:37:01
  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é :8 889 / 242

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

ADRESSE ABSOLUE DE LA PAGE EN COURS, AVEC VARIABLES $_GET par Dariumis
Source avec Zip CLASSE D'OBJET DE RECHERCHE DE MOTS DANS DES TABLEAUX ET/OU ... par 8Tnerolf8
RÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBE par tefa24600
Source avec Zip Source avec une capture CONVERTISSEUR DE NOMBRES EN TEXTE par macruz
Source avec Zip Source avec une capture CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGE par Salva9473

 Sources en rapport avec celle ci

CRÉER UN PARSEUR LL par Morphinof
Source avec une capture CRÉATION D'UN TABLEAU AVEC CONTENU DYNAMIQUE par tesniced
Source avec Zip LEVELPARSER par jonguignolo
Source avec Zip EVALUER UNE EXPRESSION À PARTIR D'UNE CHAINE DE CARACTÈRE par TheWeasel47
FONCTION EQUATION LÉGÈRE par ff5

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 administrateur CS

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 administrateur CS

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 administrateur CS

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 administrateur CS

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 administrateur CS

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 administrateur CS

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 administrateur CS

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 administrateur CS

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 traçage d'une arbre binaire avec php [ par memoiremorte ] bonsoir, je cherche comment je peut dessiner un arbre binaire comme celle de l'image, sachant que j'utilise une base de données mysql. merci [img]http arbre binaire en php [ par mejdichebbi ] S.V.P je veux créer une arbre binaire en php et msql ,je suis débutant en php mais et je ne sais comment la faire [^^sad1] S.V.P ce travail trés urgen Expressions régulieres [ par Nini ] Trouvez l'expression régulière (Syntaxe basée sur le PHP) et entrez la ci-dessous (en suivant l'exemple).Cette regex doit extraire le texte et le cont Enregistrer un binaire dans une base de données [ par astien ] astienComment fais-ton en php pour inserer un resgistre avec un objet binaire ?Quelqu'un peut m'aider ? Parsing et performances ... [ par guiguimac ] bonjour,je viens de reprendre un site web tout en php. son principe est le suivant : les pages html sont préparée sous formes de template que le code parsing error !?! [ par Arkko ] c cmt qu'on fait pour pas avoir cet erreur lol Parse error: parse error, unexpected $end in debug.php on line 71 Comparaison Binaire [ par 6Po ] Bonjour,J'aimerais effectué une comparaison binaire. 6 = 110 2 = 010 Donc normal 6 & 2 devrait faire 010 (soit 2)... si j'effectue le test suivant if image dans mysql sous forme binaire ! [ par fmazoue ] bonjour mon pb c que j'ai enregistré des image jpeg dans ma base de donnée sous forme binaire (blob)et que je voudrai maintenant recuperer ces images image dans mysql sous forme binaire ! [ par fmazoue ] bonjour mon pb c que j'ai enregistré des image jpeg dans ma base de donnée sous forme binaire (blob)et que je voudrai maintenant recuperer ces images


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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,749 sec (3)

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