EVALUATION RÉCURSIVE D'UNE EXPRESSION SOUS FORME DE CHAÎNE
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 2019
-
30 juin 2003 à 13:20
yassirone
Messages postés2Date d'inscriptionmercredi 5 janvier 2011StatutMembreDernière intervention 6 janvier 2011
-
5 janv. 2011 à 18:20
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
yassirone
Messages postés2Date d'inscriptionmercredi 5 janvier 2011StatutMembreDernière intervention 6 janvier 2011 5 janv. 2011 à 18:20
Bonjour,
Merci pour l'effort
Stp je voulais te demander si avec le meme algorithme
je pourrai avoir le meme résultat sous java
si c'est le cas est ce que ça vous dérange de me passer l'algo
parce ce que je maitrise pas l VB
merci d'avance
willow07rosenberg
Messages postés15Date d'inscriptionsamedi 28 décembre 2002StatutMembreDernière intervention17 août 2004 8 déc. 2004 à 11:43
Merci pour ce code !!! Pour mes besoins il est super !!! Juste peut-être une modification pour le problème de 45/5/3 :
modifier la ligne p = InStr(a$, "/")
en p = InStrRev(a$, "/")
dans la fonction a_EvalString...
9/10
olivier6530
Messages postés5Date d'inscriptionjeudi 26 juin 2003StatutMembreDernière intervention25 juillet 2003 25 juil. 2003 à 11:19
Bonjour cartvb.
Je suis d'accord pour la priorité gauche - droite mais pour le reste ...
exp(45) = 3,49 E+19 , et log(exp(45)) donne bien 45.
Le problème vient du fait que j'ai utilisé VAL dans la fonction au lieu de CDBL pour que la fonction tienne compte des paramètre régionaux comme expliquer par rené juste avant toi.
carlvb
Messages postés199Date d'inscriptionmercredi 23 avril 2003StatutContributeurDernière intervention25 mai 201711 25 juil. 2003 à 11:07
réctification : 45/5/3=3 et non 1 (je m'en excuse)
carlvb
Messages postés199Date d'inscriptionmercredi 23 avril 2003StatutContributeurDernière intervention25 mai 201711 25 juil. 2003 à 11:03
salut 0livier,
ta source est très interressante et je trouve que tu as de très bonnes idées.
Mais, ton évaluateur a le même problème que mon ancien évaluateur (n°8750) liée à l'ordre de calcul pour les opérateurs de même priorité. Tu le fais de droite à gauche au lieu de gauche à droite ce qui cause quelques surprises.
exemples : 5-4-1 donne 2 (au lieu de 0) car il est interprété comme 5-(4-1)
45/5/3 donne 27,0000006437302 (au lieu de 1)
un autre problème (plus délirant) exp(45) donne ...22 et ainsi log(exp(45)) donne 3 au lieu de 45
là tu dois te poser des questions.
allez 7/10 (Mention bien)
cs_rene38
Messages postés1858Date d'inscriptionsamedi 29 juin 2002StatutMembreDernière intervention17 octobre 201311 17 juil. 2003 à 00:43
Rectification : pas "très bien" mais presque parfait après les explications d'Olivier : paramètres régionaux de Windows :
Séparateur décimal : le point
Séparateur de milliers : espace
Séparateur de liste : la virgule
Encore bravo.
cs_rene38
Messages postés1858Date d'inscriptionsamedi 29 juin 2002StatutMembreDernière intervention17 octobre 201311 16 juil. 2003 à 15:42
Très bien, mais pourquoi s'obstine-t-il à m'affirmer que
a_EvalString("exp(1)") = 2 au lieu de 2.718....
a_EvalString("cos(n'importe quoi) = 0 ?
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 3 juil. 2003 à 09:33
Desolé j'ai pas encore eu le temp de regarder ton code de plus pres...
je le fait des que possible
@ bientot
olivier6530
Messages postés5Date d'inscriptionjeudi 26 juin 2003StatutMembreDernière intervention25 juillet 2003 3 juil. 2003 à 09:18
Merci à EBartSoft. J'ai mis à jour le code pour le traîtment des erreurs.
Les fonctions mathématiques de base sont interprétée.
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 30 juin 2003 à 13:20
C'est pas mal du tout ... tu m'as bleuffé j'y croyais pas au debut
mais ça marche assez bien. bon j'ai vue a_EvalString("1(2)") qui
ne marche pas et qlq details a pauffiner mais c'est cool !
5 janv. 2011 à 18:20
Merci pour l'effort
Stp je voulais te demander si avec le meme algorithme
je pourrai avoir le meme résultat sous java
si c'est le cas est ce que ça vous dérange de me passer l'algo
parce ce que je maitrise pas l VB
merci d'avance
8 déc. 2004 à 11:43
modifier la ligne p = InStr(a$, "/")
en p = InStrRev(a$, "/")
dans la fonction a_EvalString...
9/10
25 juil. 2003 à 11:19
Je suis d'accord pour la priorité gauche - droite mais pour le reste ...
exp(45) = 3,49 E+19 , et log(exp(45)) donne bien 45.
Le problème vient du fait que j'ai utilisé VAL dans la fonction au lieu de CDBL pour que la fonction tienne compte des paramètre régionaux comme expliquer par rené juste avant toi.
25 juil. 2003 à 11:07
25 juil. 2003 à 11:03
ta source est très interressante et je trouve que tu as de très bonnes idées.
Mais, ton évaluateur a le même problème que mon ancien évaluateur (n°8750) liée à l'ordre de calcul pour les opérateurs de même priorité. Tu le fais de droite à gauche au lieu de gauche à droite ce qui cause quelques surprises.
exemples : 5-4-1 donne 2 (au lieu de 0) car il est interprété comme 5-(4-1)
45/5/3 donne 27,0000006437302 (au lieu de 1)
un autre problème (plus délirant) exp(45) donne ...22 et ainsi log(exp(45)) donne 3 au lieu de 45
là tu dois te poser des questions.
allez 7/10 (Mention bien)
17 juil. 2003 à 00:43
Séparateur décimal : le point
Séparateur de milliers : espace
Séparateur de liste : la virgule
Encore bravo.
16 juil. 2003 à 15:42
a_EvalString("exp(1)") = 2 au lieu de 2.718....
a_EvalString("cos(n'importe quoi) = 0 ?
3 juil. 2003 à 09:33
je le fait des que possible
@ bientot
3 juil. 2003 à 09:18
Les fonctions mathématiques de base sont interprétée.
30 juin 2003 à 13:20
mais ça marche assez bien. bon j'ai vue a_EvalString("1(2)") qui
ne marche pas et qlq details a pauffiner mais c'est cool !
:-D
9/10
b@nne prog