Interpréter une formule utilisateur

Résolu
sigmatc24 Messages postés 53 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 22 avril 2013 - 10 nov. 2010 à 12:52
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012 - 11 nov. 2010 à 15:04
Bonjour,

Pour schématiser ma requête, Nous avons 3 contrôles TextBox nommés A, B, C et un dernier contrôle text nommé Formule.

Dans ce Textbox Formule, l'utilisateur saisit par exemple (A+B)/C

Ma question est la suivante:

Comment interpréter cette expression pour afficher le résultat arithmétique pour l'utilisateur final ?

La difficulté pour moi est de savoir interpréter les parenthèses (très importantes dans le calcul) et les signes arithmétiques

Je vous prie de bien vouloir prendre la peine de m'aider

Merci

10 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
10 nov. 2010 à 18:19
Bonsoir
Ah des nouveaux détails
Dans le textbox formul tu as un string
1 il va falloir écrire une sub qui remplace tous
les A par A.text B par B.text etc
2 supprimer tous les espaces
3 pour résoudre tu peux utiliser le control script as tu le droit de l'utiliser ?
3
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
10 nov. 2010 à 13:55
Salut

(A + B) *C
un représente un nombre ou veux tu le résultat
algébrique A*C + AB

(A+B)(A-B) = A^2 -B^2

ou l'utilisateur frappe seulement des nombres
(70+30)*(70-30)
0
sigmatc24 Messages postés 53 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 22 avril 2013
10 nov. 2010 à 14:06
Il fallait que je précise aussi que l'utilisateur frappe un nombre dans le textbox A, un autre dans le textbox B et un autre dans le textbox C, Enfin dans le textbox formule, il saisit une formule de son choix qui fait intervenir les 3 champs textbox.

Il peut saisir une formule de son choix comme par exemple (A+B) * C ou (A/B) + C

A fait référence au textbox A

B fait référence au textbox B

C fait référence au textbox C

A moi d'interpréter ce qu'il a saisi pour afficher le résultat numérique souhaité

Merci d'avoir pris la peine de m'aider, j'espère que j'ai bien formulé ma requête avec ces précisions.

Cordialement
0
sigmatc24 Messages postés 53 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 22 avril 2013
10 nov. 2010 à 23:13
Merci pour la réponse

Peux tu me donner quelques conseils pour utiliser ce control et comment savoir si j'ai le droit de l'utiliser ?

Cordialement.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sigmatc24 Messages postés 53 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 22 avril 2013
11 nov. 2010 à 11:03
le contrôle Microsoft Script 1.0 fonctionne très bien.

Merci beaucoup pour ton aide et ton conseil.

Cordialement
0
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
11 nov. 2010 à 11:25
Salut si c'est du langage objet tu peux avoir trois objets de la classe chiffre A,B et C et deux objet operateurs
la classe chiffre contient une valeur et des fonctions, la fonction plus par exemple; A.plus(B) renvoi A+B
la fonction A.operation(B,operateurplus) qui selon l'opérateur execute le calcul voulu.

au lieu d'avoir trois textbox, une solution tres complexe consiste a recuperer ta formule dans un textbox, le decouper caractere par caractere et d'etablir un automate
(exemple)

s0 -0-9->s1
- +-*/ ->s2

a partir de la tu peux creer un tableau de tableau (matrice) pour savoir dans quel cas tu te trouve et comment traiter ton texte (nb j'ai des soucis de clavier je n'ai pas de crochets);
tableauEtat0-... les petit "s"
tableauChar= 01234567/*-+...
matrice=
char/etat 0 1 2
0=0 1 1
...
x=* 2

en gros si l'automate est dans un etat 0, il passe dans un etat 1 si je recupere le char no 2= "2"
note s0 -2-> s1 et matrice(0,2)=1 matrice est un tableau de tableau, je n'ai pas de crochets

une compliquation;
a chaque caractere il n'y a qu'une seule possibilité de changement d'etat
donc il faut remplacer (exemple) s0 -(-> s1 ou s0 le choix se faisant au caractere suivant par s0 -(-> s3 s3 etant un etat transitionnel.

c'est tres interressant a réaliser mais trop complexe si on a pas le temps.

bon courage, a plus
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
11 nov. 2010 à 11:36
Salut
Quand j'ai demandé si tu avais le droit je pensais que tu étais étudiant et le prof ne permet pas utiliser le script control mais ce
n'est pas ton cas
pour ajouter le script control à ton toolbox
ouvre la fenetre des components (project -> components) cherches et coches Microsoft script
control et apply ok
places le sur ta form son defaultname est ScriptControl1

Dim thefunction As String
Dim rslt As Double
thefunction = "(3 +   4) *  (3 -   4) + 2 ^ 6 - sqr(16)"
rslt = ScriptControl1.Eval(thefunction)



tu n'as pas besoin de t'occuper des espaces tu peux écrire 3+ 4 ou 3 +4
0
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
11 nov. 2010 à 11:46
zut, je connaissais pas. encore qui avais voulu me faire suer pour rien a l'epoque ou j'ai appris ce system...
0
sigmatc24 Messages postés 53 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 22 avril 2013
11 nov. 2010 à 14:47
Merci pour toutes ces précisions très utiles, A présent je peux évaluer les expressions basiques sans aucun problème.

Quant à ta démarche l0r3nz1, Merci d'avoir pris le temps de bien détailler la procédure qui aurait pu servir sans ce control Script qui fait gagner énormément de temps.
0
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
11 nov. 2010 à 15:04
niveau technique c'est a retenir quand même (je parle de la technique bizzar avec les matrices), cela peut être util pour eviter des if imbriqués a répétition lorsqu'il y a plein d'infos et que l'on veut savoir dans quel cas on se situe.
0
Rejoignez-nous