EVALUER UNE EXPRESSION MATHEMATIQUE, UTILISATION D'UN ARBRE BINAIRE
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 2013
-
18 mai 2007 à 08:48
JaguarK
Messages postés2Date d'inscriptionlundi 15 mars 2010StatutMembreDernière intervention 6 février 2013
-
6 févr. 2013 à 15:52
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
JaguarK
Messages postés2Date d'inscriptionlundi 15 mars 2010StatutMembreDernière intervention 6 février 2013 6 févr. 2013 à 15:52
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és2Date d'inscriptionlundi 15 mars 2010StatutMembreDernière intervention 6 février 2013 6 févr. 2013 à 15:40
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és12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 28 mai 2007 à 18:59
mis a jours, ca gere les fonctions, et la conversion vers rpn
amezghal
Messages postés385Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention21 août 20155 24 mai 2007 à 22:46
salut
bravo !!
mais faudrai quand meme les: sin,cos,tan
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 23 mai 2007 à 16:25
non rien à redire... .. . ;o)
@ tchaOo°
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 23 mai 2007 à 16:17
pas de commentaires sur la nouvelle mise a jour ?
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 23 mai 2007 à 15:43
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 22 mai 2007 à 18:51
Okay, merci!
Z'avez un lien sympa? :)
@++
R@f
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 21 mai 2007 à 11:31
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...
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 21 mai 2007 à 10:50
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°
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 21 mai 2007 à 10:19
Et ca sert à quoi? :)
@++
R@f
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 20 mai 2007 à 20:57
une classe qui n'a qu'une seule instance...
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 20 mai 2007 à 20:49
Petite question: un "singletons", késsako?
Merci!
@++
R@f
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 19 mai 2007 à 19:49
c'est du parsing pas des maths...
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 19 mai 2007 à 19:19
# 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...... ^^
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 18 mai 2007 à 18:10
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
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 18 mai 2007 à 15:51
"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°
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 18 mai 2007 à 12:41
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...
juki_webmaster
Messages postés947Date d'inscriptionmercredi 19 novembre 2003StatutMembreDernière intervention 5 avril 20083 18 mai 2007 à 12:31
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
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 18 mai 2007 à 12:25
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...
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 18 mai 2007 à 08:48
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) ?
6 févr. 2013 à 15:52
Mais '36^(24/20)' trouve 36 (à la place de 73,72) !
6 févr. 2013 à 15:40
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.
28 mai 2007 à 18:59
24 mai 2007 à 22:46
bravo !!
mais faudrai quand meme les: sin,cos,tan
23 mai 2007 à 16:25
@ tchaOo°
23 mai 2007 à 16:17
23 mai 2007 à 15:43
@ tchaOo°
22 mai 2007 à 18:51
Z'avez un lien sympa? :)
@++
R@f
21 mai 2007 à 11:31
21 mai 2007 à 10:50
une class sql => une seule instance => une seule connection au serveur => plusieurs objets
@ tchaOo°
21 mai 2007 à 10:19
@++
R@f
20 mai 2007 à 20:57
20 mai 2007 à 20:49
Merci!
@++
R@f
19 mai 2007 à 19:49
19 mai 2007 à 19:19
# $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...... ^^
18 mai 2007 à 18:10
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
18 mai 2007 à 15:51
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°
18 mai 2007 à 12:41
18 mai 2007 à 12:31
}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
18 mai 2007 à 12:25
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...
18 mai 2007 à 08:48
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