Soyez le premier à donner votre avis sur cette source.
Snippet vu 5 805 fois - Téléchargée 35 fois
Public Function Evaluate(Formule As String) As Double Dim PosCour, PosSep, PosAV, PosAP, Av, Ap, Res Dim Separateurs(3), NumSep, Formule2 'liste des separateurs Separateurs(0) = "/" Separateurs(1) = "*" Separateurs(2) = "+" Separateurs(3) = "-" For NumSep = 0 To 3 PosSep = InStr(1, Formule, Separateurs(NumSep)) While PosSep > 0 'on determine le nombre AVANT le separateur PosCour = PosSep - 1 While (IsNumeric(Mid(Formule, PosCour, 1))) PosCour = PosCour - 1 If PosCour = 0 Then GoTo suite: Wend suite: PosAV = PosCour + 1 Av = Mid(Formule, PosAV, PosSep - PosAV) 'on determine le nombre APRES le separateur PosCour = PosSep + 1 While IsNumeric(Mid(Formule, PosCour, 1)) PosCour = PosCour + 1 Wend PosAP = PosCour Ap = Mid(Formule, PosSep + 1, PosAP - PosSep - 1) 'On calcule la sous-partie isolée Select Case NumSep Case 0: '/ Res = Val(Av) / Val(Ap) Case 1: '* Res = Val(Av) * Val(Ap) Case 2: '+ Res = Val(Av) + Val(Ap) Case 3: '- Res = Val(Av) - Val(Ap) End Select 'on réécrit la formule avec la sous-partie calculée Formule = Left(Formule, PosAV - 1) & Trim(Str(Res)) & Mid(Formule, PosAP) PosSep = InStr(1, Formule, Separateurs(NumSep)) Wend Next Evaluate = Val(Formule) End Function
et tu tape result=controlscript1.eval("5+3*2/9-2")
ce contrôle fonctionne très bien et n'a pas besoin d'être réinventé...
Non justement il n'y en a pas (x / y = x * (y ^ -1)) mais tu dis qu'il faut une boucle pour les quotients et une autre pour les multiplications...
Tu peux me dire la différence que tu trouves entre les 2?
Allez,un indice: au lieu d'un automate, tu mets une fonction récursive qui s'apelle quand elle trouve des parenthèses à traiter...
c ce que fait vb ou tt autre langage de programmation pour lire le code source
mais j'ai pas dit que c simple, loin de là ... ;)
À propos, les quotients etles divisions ont la même priorité, non ? Alors pourquoi faire quotient PUIS multiplication PUIS addtion (soustraction) ?
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.