ratala
Messages postés248Date d'inscriptionjeudi 3 février 2005StatutMembreDernière intervention22 juin 2008 6 juil. 2006 à 15:03
moi j'ai fait sa :
Private Function calcule(texte As String) As Long
Dim PosOp As Long
Dim Op As String
Dim Num() As String
PosOp = InStr(1, texte, "+")
If PosOp 0 Then PosOp InStr(1, texte, "-")
If PosOp 0 Then PosOp InStr(1, texte, "/")
If PosOp 0 Then PosOp InStr(1, texte, "*")
Op = Mid(texte, PosOp, 1)
Num = Split(texte, Op, 2)
If InStr(1, Num(1), "=") Then Num(1) = Left(Num(1), InStr(1, Num(1), "=") - 1)
If Calculable(Num(1)) Then Num(1) = calcule(Num(1))
If Calculable(Num(0)) Then Num(0) = calcule(Num(0))
If Op "+" Then Reponse Str(Val(Num(0)) + Val(Num(1)))
If Op "-" Then Reponse Str(Val(Num(0)) - Val(Num(1)))
If Op "/" Then Reponse Str(Val(Num(0)) / Val(Num(1)))
If Op "*" Then Reponse Str(Val(Num(0)) * Val(Num(1)))
calcule = Reponse
End Function
Private Function Calculable(texte As String) As Boolean
Possible = InStr(1, texte, "+") Or InStr(1, texte, "-") Or InStr(1, texte, "*") Or InStr(1, texte, "/")
Calculable = Possible
End Function
et sa marche ters bien
fa7al
Messages postés9Date d'inscriptionmardi 4 mars 2003StatutMembreDernière intervention 2 septembre 2005 2 sept. 2005 à 13:59
Vraiment super !
Ton code fonctionne bien.
j'ai apporté quelques modifications pour le faire tourner sur .NET en thread.
Merci a toi !
pierlag
Messages postés2Date d'inscriptiondimanche 22 février 2004StatutMembreDernière intervention22 février 2004 22 févr. 2004 à 16:18
J'avais pas vu que c'était en VB6 sorry !
Fox
Olilefou
Messages postés29Date d'inscriptionmercredi 1 août 2001StatutMembreDernière intervention 9 décembre 2005 22 févr. 2004 à 16:14
Il n'y a pas d'éval avec le compilateur VB6 (marche sous Access qui lui est interprété).
pierlag
Messages postés2Date d'inscriptiondimanche 22 février 2004StatutMembreDernière intervention22 février 2004 22 févr. 2004 à 15:00
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 4 janv. 2004 à 01:06
ca dois exister en .Net..... en VB6, faut le faire soit mêm ;)
tant que ca fonctionne !!!
K@zuya
Messages postés306Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention15 février 2016 4 janv. 2004 à 00:50
hum, je regarde le code et je m'apercoit que je ne dit que des conneries. ton Stack est un tableau et test Stack_Pop,Stack_Pusk,Stack_Peek sont des function. décidément, je ne comprends rien à rien
K@zuya
Messages postés306Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention15 février 2016 4 janv. 2004 à 00:41
bravo, c'est utile et en plus, sa m'a appri qu'on pouvai faire des PUSH et des POP sur la pile comme en ASM lol
Saros
Messages postés921Date d'inscriptionvendredi 20 décembre 2002StatutMembreDernière intervention23 septembre 2010 3 janv. 2004 à 17:46
Et chapeau pour ta fonction ToExRPN
Saros
Messages postés921Date d'inscriptionvendredi 20 décembre 2002StatutMembreDernière intervention23 septembre 2010 3 janv. 2004 à 17:37
Chez moi ça marche... 10/10
Saros
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 3 janv. 2004 à 10:26
bien vu shadowmoy, j'ai corrigé cela....
shadowmoy
Messages postés340Date d'inscriptionjeudi 25 juillet 2002StatutMembreDernière intervention25 août 2007 3 janv. 2004 à 08:34
Dans ta fonction computeRPN oublie pas de tester les divisions par 0 :)
Case ""
If Tmp <> 0 Then Call Stack_Push(CDbl(Stack_Pop) \ CDbl(Tmp))
Case "/"
If Tmp <> 0 Then Call Stack_Push(CDbl(Stack_Pop) / CDbl(Tmp))
cs_radada
Messages postés488Date d'inscriptionlundi 15 septembre 2003StatutMembreDernière intervention21 avril 20091 2 janv. 2004 à 22:26
Qu'un mot à dire Renfield, comme d'hab : chapeau : )))) 10/10 comme d'hab aussi : p
Seamless
Messages postés61Date d'inscriptionsamedi 7 juin 2003StatutMembreDernière intervention21 novembre 2004 2 janv. 2004 à 18:33
Moi je trouve cette source super. Je ne vois pas de bugg ni de problème. Bravo 10/10
:Seamless:
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 2 janv. 2004 à 17:04
J'ai repris tout le code ligne par ligne, j'ai fait des tests, plein de test, et je prefere le resultat que j'obtiens désormais.....
merci d'avoir testé ma fonction plus que je ne l'ai fait .
KaViDee
Messages postés262Date d'inscriptiondimanche 1 septembre 2002StatutMembreDernière intervention18 juin 2008 2 janv. 2004 à 14:44
ne veut pas calculer '12-(10+5)/5' :-/
normallement ça devrait faire 12-(10+5)/5 -> 12-15/5 -> 12-3 -> 9
toujours des caprices...
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 2 janv. 2004 à 14:23
Voila, c'est corrigé......
des caprices avec le signe négatif.....
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 janv. 2004 à 13:50
revo, si tu en as d'autres de ce genre, ne te prive pas, c'est pas tous les jours que je rigole autant en parcourant les sources.
cs_revo
Messages postés70Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention 7 juin 2006 2 janv. 2004 à 13:36
c'est le problème avec ces polonais ils boivent trop et après ils savent plus compter :-)
KaViDee
Messages postés262Date d'inscriptiondimanche 1 septembre 2002StatutMembreDernière intervention18 juin 2008 2 janv. 2004 à 12:12
lol je relance, je refais la meme opération une fois ça me donne -2, je rappuis sur Calcul ça me donne 12.
Le code a l'air bien mais il est a revoir.
KaViDee
Messages postés262Date d'inscriptiondimanche 1 septembre 2002StatutMembreDernière intervention18 juin 2008 2 janv. 2004 à 12:09
bug pour 12-3+5/5 = 67 ça devrait donner 10 (en respectant les règles de priorité bien sur)...
6 juil. 2006 à 15:03
Private Function calcule(texte As String) As Long
Dim PosOp As Long
Dim Op As String
Dim Num() As String
PosOp = InStr(1, texte, "+")
If PosOp 0 Then PosOp InStr(1, texte, "-")
If PosOp 0 Then PosOp InStr(1, texte, "/")
If PosOp 0 Then PosOp InStr(1, texte, "*")
Op = Mid(texte, PosOp, 1)
Num = Split(texte, Op, 2)
If InStr(1, Num(1), "=") Then Num(1) = Left(Num(1), InStr(1, Num(1), "=") - 1)
If Calculable(Num(1)) Then Num(1) = calcule(Num(1))
If Calculable(Num(0)) Then Num(0) = calcule(Num(0))
If Op "+" Then Reponse Str(Val(Num(0)) + Val(Num(1)))
If Op "-" Then Reponse Str(Val(Num(0)) - Val(Num(1)))
If Op "/" Then Reponse Str(Val(Num(0)) / Val(Num(1)))
If Op "*" Then Reponse Str(Val(Num(0)) * Val(Num(1)))
calcule = Reponse
End Function
Private Function Calculable(texte As String) As Boolean
Possible = InStr(1, texte, "+") Or InStr(1, texte, "-") Or InStr(1, texte, "*") Or InStr(1, texte, "/")
Calculable = Possible
End Function
et sa marche ters bien
2 sept. 2005 à 13:59
Ton code fonctionne bien.
j'ai apporté quelques modifications pour le faire tourner sur .NET en thread.
Merci a toi !
22 févr. 2004 à 16:18
Fox
22 févr. 2004 à 16:14
22 févr. 2004 à 15:00
http://www.microsoft.com/france/msdn/info/info.asp?mar=/france/msdn/technologies/outils/vcsharp/info/20030710-Evaluateurs-Expressions.html
Fox
11 janv. 2004 à 16:11
1/(-1) plante.
1-(-1) donne 0 à la place de 2.
Va voir cette source, (j'utilise un gestionnaire de base de données pour évaluer une formule) :
http://www.vbfrance.com/code.aspx?ID=2869
Bye.
4 janv. 2004 à 01:06
tant que ca fonctionne !!!
4 janv. 2004 à 00:50
4 janv. 2004 à 00:41
3 janv. 2004 à 17:46
3 janv. 2004 à 17:37
Saros
3 janv. 2004 à 10:26
3 janv. 2004 à 08:34
Case ""
If Tmp <> 0 Then Call Stack_Push(CDbl(Stack_Pop) \ CDbl(Tmp))
Case "/"
If Tmp <> 0 Then Call Stack_Push(CDbl(Stack_Pop) / CDbl(Tmp))
2 janv. 2004 à 22:26
2 janv. 2004 à 18:33
:Seamless:
2 janv. 2004 à 17:04
merci d'avoir testé ma fonction plus que je ne l'ai fait .
2 janv. 2004 à 14:44
normallement ça devrait faire 12-(10+5)/5 -> 12-15/5 -> 12-3 -> 9
toujours des caprices...
2 janv. 2004 à 14:23
des caprices avec le signe négatif.....
2 janv. 2004 à 13:50
2 janv. 2004 à 13:36
2 janv. 2004 à 12:12
Le code a l'air bien mais il est a revoir.
2 janv. 2004 à 12:09