begin process at 2010 02 10 16:13:39
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths

 > ANALYSEUR D'EXPRESSION ALGÉBRIQUE FACILEMENT EXTENSIBLE

ANALYSEUR D'EXPRESSION ALGÉBRIQUE FACILEMENT EXTENSIBLE


 Information sur la source

Note :
5 / 10 - par 1 personne
5,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths Classé sous :parser, evaluer Niveau :Initié Date de création :27/03/2005 Date de mise à jour :26/01/2006 20:38:22 Vu / téléchargé :4 849 / 242

Auteur : krissssss

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Montre comment créer un analyseur d'expression algébrique facilement en découpant le travail.
Il comprend une fonction travaillant sur les parenthèses et une autre analysant les expressions de base (1+2)

Voici le fonctionnement :
Soit le calcul suivant :
On va rechercher la première parenthèse fermante. Elle se situe à la fin de l'expression : (2+5)
On effectue le calcul et l'on remplace la parenthèse par le résultat : 2+(7*45*(4+56*(2+7))+7)/4
Voici le détail du calcul à chaque "tour" du prog:
2+(7*45*(4+56*9)+7)/4
2+(7*45*(4+504)+7)/4
2 +(7*45*508+7)/4
2+(315*508+7)/4
2+(160020+7)/4
2+1 60027/4
2+40558.25
40558.25

Source

  • '/-------------------------------------------------\
  • '| |
  • '| TITRE : Analyseur d'expression arithmétique |
  • '| |
  • '| Expression supposrtées : |
  • '| Opérateurs de base : +,-,*,/,^ |
  • '| Parenthèses : () |
  • '| Fonctions : SIN,ABS,SQR |
  • '| |
  • '| BUGS connus de l'auteur : |
  • '| 2*-5 donne -5 (*)Corrigé par mr_saturne |
  • '| |
  • '| Caractéristique du code : |
  • '| Facilement extensible |
  • '\-------------------------------------------------/
  • Function evaluer(calc As String)
  • Dim fact() As String
  • Dim oper() As String
  • Dim fpos As Integer
  • Dim n As String
  • Dim ffin As Integer
  • ReDim fact(1) As String
  • ReDim oper(1) As String
  • Dim test_neg As Integer
  • '********************************************
  • '**IMPLEMENTATION DES FONCTIONS SPECIFIQUES**
  • '********************************************
  • 'Cosinus
  • Do Until InStr(calc, "cos") = 0
  • fpos = InStr(calc, "cos")
  • n = ""
  • If fpos > 0 Then
  • For ix = fpos + 3 To Len(calc)
  • If IsNumeric(Mid(calc, ix, 1)) Or Mid(calc, ix, 1) = "." Then n = n + Mid(calc, ix, 1) Else Exit For
  • Next ix
  • calc = Replace(calc, "cos" + LTrim(str(n)), LTrim(str(Cos(n * 3.1415 / 180))))
  • End If
  • Loop
  • 'Sinus
  • Do Until InStr(calc, "sin") = 0
  • fpos = InStr(calc, "sin")
  • n = ""
  • If fpos > 0 Then
  • For ix = fpos + 3 To Len(calc)
  • If IsNumeric(Mid(calc, ix, 1)) Or Mid(calc, ix, 1) = "." Then n = n + Mid(calc, ix, 1) Else Exit For
  • Next ix
  • calc = Replace(calc, "sin" + LTrim(str(n)), LTrim(str(Sin(n * 3.1415 / 180))))
  • End If
  • Loop
  • 'Racine carée
  • Do Until InStr(calc, "sqr") = 0
  • fpos = InStr(calc, "sqr")
  • n = ""
  • If fpos > 0 Then
  • For ix = fpos + 3 To Len(calc)
  • If IsNumeric(Mid(calc, ix, 1)) Or Mid(calc, ix, 1) = "." Then n = n + Mid(calc, ix, 1) Else Exit For
  • Next ix
  • calc = Replace(calc, "sqr" + LTrim(str(n)), LTrim(str(Sqr(n))))
  • End If
  • Loop
  • 'Valeure absolue
  • Do Until InStr(calc, "abs") = 0
  • fpos = InStr(calc, "abs")
  • n = ""
  • If fpos > 0 Then
  • For ix = fpos + 3 To Len(calc)
  • If IsNumeric(Mid(calc, ix, 1)) Or Mid(calc, ix, 1) = "." Or Mid(calc, ix, 1) = "-" Then n = n + Mid(calc, ix, 1) Else Exit For
  • Next ix
  • calc = Replace(calc, "abs" + LTrim(str(n)), LTrim(str(Abs(n))))
  • End If
  • Loop
  • '********************************************
  • '**RECHERCHE DES FACTEURS ET DES OPERATEURS**
  • '********************************************
  • For ix = 1 To Len(calc) ' debut de boucle
  • Select Case Mid(calc, ix, 1) ' recherche des operateurs
  • Case "^": ' exponenciation
  • ReDim Preserve fact(UBound(fact()) + 1) As String ' Ajouter un indice dans les facteurs
  • oper(UBound(oper)) = "^" ' Ajouter l'operateur à la liste
  • ReDim Preserve oper(UBound(oper()) + 1) As String ' Ajouter un indice dans les opérateurs
  • Case "*": ' multiplication
  • ReDim Preserve fact(UBound(fact()) + 1) As String
  • oper(UBound(oper)) = "*"
  • ReDim Preserve oper(UBound(oper()) + 1) As String
  • Case "/": ' division
  • ReDim Preserve fact(UBound(fact()) + 1) As String
  • oper(UBound(oper)) = "/"
  • ReDim Preserve oper(UBound(oper()) + 1) As String
  • Case "+": ' addition
  • ReDim Preserve fact(UBound(fact()) + 1) As String
  • oper(UBound(oper)) = "+"
  • ReDim Preserve oper(UBound(oper()) + 1) As String
  • Case "-": ' soustraction
  • ReDim Preserve fact(UBound(fact()) + 1) As String
  • oper(UBound(oper)) = "-"
  • ReDim Preserve oper(UBound(oper()) + 1) As String
  • Case Else: ' autres cas
  • fact(UBound(fact)) = fact(UBound(fact)) + Mid(calc, ix, 1) ' ajouter le bout de chaine au dernier indice de fact
  • End Select
  • Next
  • 'Remplace les chiffres négatifs
  • rech:
  • ix = 1
  • test_neg = 0
  • While ix < UBound(fact) 'parcours tous les facteurs
  • If fact(ix) = "" And oper(ix) = "-" Then 'négatif trouvé
  • fact(ix) = (-1) * fact(ix + 1) 'on remplace le vide par le facteur suivant en négatif
  • For iy = ix To UBound(oper) - 1
  • oper(iy) = oper(iy + 1) 'on décale le tableau des opérateurs
  • Next iy
  • For iy = ix To UBound(fact) - 2
  • fact(iy + 1) = fact(iy + 2) 'on décale le tableau des facteurs
  • Next iy
  • fact(UBound(fact)) = "" 'on supprime le facteur obsolette
  • test_neg = 1
  • End If
  • ix = ix + 1 'on passe au suivant
  • Wend
  • If test_neg = 1 Then GoTo rech 'si un négatif a été trouvé on refait un passage
  • 'Ajout des facteurs et des opérateurs dans les listes pour le deboguage
  • List1.Clear
  • List2.Clear
  • For ix = 1 To UBound(fact)
  • List1.AddItem (fact(ix))
  • Next ix
  • For ix = 1 To UBound(oper)
  • List2.AddItem (oper(ix))
  • Next ix
  • '**************************
  • '**CALCUL DE L'EXPRESSION**
  • '**************************
  • 'EXPONENTIELLE
  • For ix = 1 To UBound(fact) ' Parcourir tous les facteurs
  • If oper(ix) = "^" Then ' Si on trouve oper(ix)="^"
  • fact(ix) = LTrim(str(Val(fact(ix)) ^ Val(fact(ix + 1)))) ' Calculer le nouveau facteur
  • For iy = ix To UBound(oper) - 1
  • oper(iy) = oper(iy + 1) ' > Enlever un operateur et décaller le tableau
  • Next iy
  • For iy = ix To UBound(fact) - 2
  • fact(iy + 1) = fact(iy + 2) ' > Enlever un facteur et décaller le tableau
  • Next iy
  • fact(UBound(fact)) = "" ' Effacer le facteur obsolette
  • End If
  • Next ix
  • 'MULTIPLICATION
  • For ix = 1 To UBound(fact)
  • If oper(ix) = "*" Then
  • fact(ix) = LTrim(str(Val(fact(ix)) * Val(fact(ix + 1))))
  • For iy = ix To UBound(oper) - 1
  • oper(iy) = oper(iy + 1)
  • Next iy
  • For iy = ix To UBound(fact) - 2
  • fact(iy + 1) = fact(iy + 2)
  • Next iy
  • fact(UBound(fact)) = ""
  • End If
  • Next ix
  • 'DIVISION
  • For ix = 1 To UBound(fact)
  • If oper(ix) = "/" Then
  • fact(ix) = LTrim(str(Val(fact(ix)) / Val(fact(ix + 1))))
  • For iy = ix To UBound(oper) - 1
  • oper(iy) = oper(iy + 1)
  • Next iy
  • For iy = ix To UBound(fact) - 2
  • fact(iy + 1) = fact(iy + 2)
  • Next iy
  • fact(UBound(fact)) = ""
  • End If
  • Next ix
  • 'ADDITION
  • For ix = 1 To UBound(fact)
  • If oper(ix) = "+" Then
  • fact(ix) = LTrim(str(Val(fact(ix)) + Val(fact(ix + 1))))
  • For iy = ix To UBound(oper) - 1
  • oper(iy) = oper(iy + 1)
  • Next iy
  • For iy = ix To UBound(fact) - 2
  • fact(iy + 1) = fact(iy + 2)
  • Next iy
  • fact(UBound(fact)) = ""
  • End If
  • Next ix
  • 'SOUSTRACTION
  • For ix = 1 To UBound(fact)
  • If oper(ix) = "-" Then
  • fact(ix) = LTrim(str(Val(fact(ix)) - Val(fact(ix + 1))))
  • For iy = ix To UBound(oper) - 1
  • oper(iy) = oper(iy + 1)
  • Next iy
  • For iy = ix To UBound(fact) - 2
  • fact(iy + 1) = fact(iy + 2)
  • Next iy
  • fact(UBound(fact)) = ""
  • End If
  • Next ix
  • For ix = 1 To UBound(fact)
  • evaluer = evaluer + fact(ix) + oper(ix) ' Construction de la nouvelle expression.
  • Next
  • End Function
  • Rem !!! Veuillez mentionner mon nom si vous comptez l'utiliser dans votre programme !!!
  • Option Base 1 ' premier indice du tableau = 1
  • Sub calculer_Click() ' Au clicque sur le bouton
  • 'MsgBox parenthese(calcul.Text) ' pour deboguage
  • Do Until parenthese(calcul.Text) = "aucune" ' fair j'usqu'à ce que la fonction retourne "aucune"
  • If parenthese(calcul.Text) = "error" Then MsgBox "ERREUR : parenthèse manquante ou mal placée " + Chr(10) + " le programme a tenté de retrouver l'erreur" + Chr(10) + " veuillez suprimer les parenthèses inutiles et appuyer sur calculer", vbCritical, "!!! ERREUR utilisateur !!!": Exit Sub ' si la fonction retourne une erreur
  • calcul = Replace(calcul, "(" + parenthese(calcul.Text) + ")", evaluer(parenthese(calcul.Text))) ' Simplifier le calcul au operateur de base (plus de () )
  • Loop ' fin de boucle
  • calcul = evaluer(calcul) ' evaluer l'expression simplifiée
  • End Sub
  • Function parenthese(calc As String)
  • Dim pospo, pospf As String
  • Rem rechecherche de la première parenthèse fermente
  • pospf = InStr(1, calcul.Text, ")")
  • If pospf <> 0 Then
  • pospo = InStrRev(calcul.Text, "(", pospf)
  • If pospo = 0 Then GoTo err1
  • parenthese = Mid(calcul.Text, pospo + 1, pospf - pospo - 1)
  • Else
  • parenthese = "aucune"
  • End If
  • Exit Function
  • err1:
  • parenthese = "error"
  • End Function
'/-------------------------------------------------\
'|                                                 |
'|  TITRE : Analyseur d'expression arithmétique    |
'|                                                 |
'|  Expression supposrtées :                       |
'|       Opérateurs de base : +,-,*,/,^            |
'|       Parenthèses : ()                          |
'|       Fonctions : SIN,ABS,SQR                   |
'|                                                 |
'|  BUGS connus de l'auteur :                      |
'|     2*-5 donne -5  (*)Corrigé par mr_saturne    |
'|                                                 |
'| Caractéristique du code :                       |
'|              Facilement extensible              |
'\-------------------------------------------------/
 Function evaluer(calc As String)


 Dim fact() As String
 Dim oper() As String
 Dim fpos As Integer
 Dim n As String
 Dim ffin As Integer
 ReDim fact(1) As String
 ReDim oper(1) As String
 Dim test_neg As Integer



 '********************************************
 '**IMPLEMENTATION DES FONCTIONS SPECIFIQUES**
 '********************************************

 'Cosinus
 Do Until InStr(calc, "cos") = 0
 fpos = InStr(calc, "cos")
 n = ""
 If fpos > 0 Then
 For ix = fpos + 3 To Len(calc)
 If IsNumeric(Mid(calc, ix, 1)) Or Mid(calc, ix, 1) = "." Then n = n + Mid(calc, ix, 1) Else Exit For
 Next ix
 calc = Replace(calc, "cos" + LTrim(str(n)), LTrim(str(Cos(n * 3.1415 / 180))))
 End If
 Loop

 'Sinus
 Do Until InStr(calc, "sin") = 0
 fpos = InStr(calc, "sin")
 n = ""
 If fpos > 0 Then
 For ix = fpos + 3 To Len(calc)
 If IsNumeric(Mid(calc, ix, 1)) Or Mid(calc, ix, 1) = "." Then n = n + Mid(calc, ix, 1) Else Exit For
 Next ix
 calc = Replace(calc, "sin" + LTrim(str(n)), LTrim(str(Sin(n * 3.1415 / 180))))
 End If
 Loop

 'Racine carée
 Do Until InStr(calc, "sqr") = 0
 fpos = InStr(calc, "sqr")
 n = ""
 If fpos > 0 Then
 For ix = fpos + 3 To Len(calc)
 If IsNumeric(Mid(calc, ix, 1)) Or Mid(calc, ix, 1) = "." Then n = n + Mid(calc, ix, 1) Else Exit For
 Next ix
 calc = Replace(calc, "sqr" + LTrim(str(n)), LTrim(str(Sqr(n))))
 End If
 Loop

 'Valeure absolue
 Do Until InStr(calc, "abs") = 0
 fpos = InStr(calc, "abs")
 n = ""
 If fpos > 0 Then
 For ix = fpos + 3 To Len(calc)
 If IsNumeric(Mid(calc, ix, 1)) Or Mid(calc, ix, 1) = "." Or Mid(calc, ix, 1) = "-" Then n = n + Mid(calc, ix, 1) Else Exit For
 Next ix
 calc = Replace(calc, "abs" + LTrim(str(n)), LTrim(str(Abs(n))))
 End If
 Loop






 '********************************************
 '**RECHERCHE DES FACTEURS ET DES OPERATEURS**
 '********************************************

 For ix = 1 To Len(calc) ' debut de boucle

 Select Case Mid(calc, ix, 1) ' recherche des operateurs

 Case "^": ' exponenciation
 ReDim Preserve fact(UBound(fact()) + 1) As String ' Ajouter un indice dans les facteurs
 oper(UBound(oper)) = "^" ' Ajouter l'operateur à la liste
 ReDim Preserve oper(UBound(oper()) + 1) As String ' Ajouter un indice dans les opérateurs

 Case "*": ' multiplication
 ReDim Preserve fact(UBound(fact()) + 1) As String
 oper(UBound(oper)) = "*"
 ReDim Preserve oper(UBound(oper()) + 1) As String

 Case "/": ' division
 ReDim Preserve fact(UBound(fact()) + 1) As String
 oper(UBound(oper)) = "/"
 ReDim Preserve oper(UBound(oper()) + 1) As String

 Case "+": ' addition
 ReDim Preserve fact(UBound(fact()) + 1) As String
 oper(UBound(oper)) = "+"
 ReDim Preserve oper(UBound(oper()) + 1) As String

 Case "-": ' soustraction
 ReDim Preserve fact(UBound(fact()) + 1) As String
 oper(UBound(oper)) = "-"
 ReDim Preserve oper(UBound(oper()) + 1) As String

 Case Else: ' autres cas
 fact(UBound(fact)) = fact(UBound(fact)) + Mid(calc, ix, 1) ' ajouter le bout de chaine au dernier indice de fact

 End Select

 Next



'Remplace les chiffres négatifs
rech:
 ix = 1
 test_neg = 0
 While ix < UBound(fact) 'parcours tous les facteurs
 If fact(ix) = "" And oper(ix) = "-" Then 'négatif trouvé
 fact(ix) = (-1) * fact(ix + 1) 'on remplace le vide par le facteur suivant en négatif

 For iy = ix To UBound(oper) - 1
 oper(iy) = oper(iy + 1) 'on décale le tableau des opérateurs
 Next iy

 For iy = ix To UBound(fact) - 2
 fact(iy + 1) = fact(iy + 2) 'on décale le tableau des facteurs
 Next iy

 fact(UBound(fact)) = "" 'on supprime le facteur obsolette

 test_neg = 1
 End If
 ix = ix + 1 'on passe au suivant
 Wend
 If test_neg = 1 Then GoTo rech 'si un négatif a été trouvé on refait un passage



 'Ajout des facteurs et des opérateurs dans les listes pour le deboguage
 List1.Clear
 List2.Clear
 For ix = 1 To UBound(fact)
 List1.AddItem (fact(ix))
 Next ix

 For ix = 1 To UBound(oper)
 List2.AddItem (oper(ix))
 Next ix





 '**************************
 '**CALCUL DE L'EXPRESSION**
 '**************************


 'EXPONENTIELLE
 For ix = 1 To UBound(fact) ' Parcourir tous les facteurs
 If oper(ix) = "^" Then ' Si on trouve oper(ix)="^"
 fact(ix) = LTrim(str(Val(fact(ix)) ^ Val(fact(ix + 1)))) ' Calculer le nouveau facteur

 For iy = ix To UBound(oper) - 1
 oper(iy) = oper(iy + 1) ' > Enlever un operateur et décaller le tableau
 Next iy

 For iy = ix To UBound(fact) - 2
 fact(iy + 1) = fact(iy + 2) ' > Enlever un facteur et décaller le tableau
 Next iy

 fact(UBound(fact)) = "" ' Effacer le facteur obsolette
 End If
 Next ix


 'MULTIPLICATION
 For ix = 1 To UBound(fact)
 If oper(ix) = "*" Then
 fact(ix) = LTrim(str(Val(fact(ix)) * Val(fact(ix + 1))))

 For iy = ix To UBound(oper) - 1
 oper(iy) = oper(iy + 1)
 Next iy

 For iy = ix To UBound(fact) - 2
 fact(iy + 1) = fact(iy + 2)
 Next iy

 fact(UBound(fact)) = ""
 End If
 Next ix


 'DIVISION
 For ix = 1 To UBound(fact)
 If oper(ix) = "/" Then
 fact(ix) = LTrim(str(Val(fact(ix)) / Val(fact(ix + 1))))

 For iy = ix To UBound(oper) - 1
 oper(iy) = oper(iy + 1)
 Next iy

 For iy = ix To UBound(fact) - 2
 fact(iy + 1) = fact(iy + 2)
 Next iy

 fact(UBound(fact)) = ""
 End If
 Next ix


 'ADDITION
 For ix = 1 To UBound(fact)
 If oper(ix) = "+" Then
 fact(ix) = LTrim(str(Val(fact(ix)) + Val(fact(ix + 1))))

 For iy = ix To UBound(oper) - 1
 oper(iy) = oper(iy + 1)
 Next iy

 For iy = ix To UBound(fact) - 2
 fact(iy + 1) = fact(iy + 2)
 Next iy

 fact(UBound(fact)) = ""
 End If
 Next ix


 'SOUSTRACTION
 For ix = 1 To UBound(fact)
 If oper(ix) = "-" Then
 fact(ix) = LTrim(str(Val(fact(ix)) - Val(fact(ix + 1))))

 For iy = ix To UBound(oper) - 1
 oper(iy) = oper(iy + 1)
 Next iy

 For iy = ix To UBound(fact) - 2
 fact(iy + 1) = fact(iy + 2)
 Next iy

 fact(UBound(fact)) = ""
 End If
 Next ix



 For ix = 1 To UBound(fact)
 evaluer = evaluer + fact(ix) + oper(ix) ' Construction de la nouvelle expression.
 Next

End Function



Rem  !!! Veuillez mentionner mon nom si vous comptez l'utiliser dans votre programme !!!


Option Base 1 ' premier indice du tableau = 1

Sub calculer_Click() ' Au clicque sur le bouton
'MsgBox parenthese(calcul.Text) ' pour deboguage
Do Until parenthese(calcul.Text) = "aucune" ' fair j'usqu'à ce que la fonction retourne "aucune"
If parenthese(calcul.Text) = "error" Then MsgBox "ERREUR : parenthèse manquante ou mal placée " + Chr(10) + " le programme a tenté de retrouver l'erreur" + Chr(10) + " veuillez suprimer les parenthèses inutiles et appuyer sur calculer", vbCritical, "!!! ERREUR utilisateur !!!": Exit Sub ' si la fonction retourne une erreur
calcul = Replace(calcul, "(" + parenthese(calcul.Text) + ")", evaluer(parenthese(calcul.Text))) ' Simplifier le calcul au operateur de base (plus de () )
Loop ' fin de boucle
calcul = evaluer(calcul) ' evaluer l'expression simplifiée
End Sub

Function parenthese(calc As String)
Dim pospo, pospf As String
Rem rechecherche de la première parenthèse fermente
pospf = InStr(1, calcul.Text, ")")
If pospf <> 0 Then
pospo = InStrRev(calcul.Text, "(", pospf)
If pospo = 0 Then GoTo err1
parenthese = Mid(calcul.Text, pospo + 1, pospf - pospo - 1)
Else
parenthese = "aucune"
End If
Exit Function
err1:
parenthese = "error"
End Function


 Conclusion

Merci à mr_saturne pour son travail.(Modification de evaluer() )

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

26 janvier 2006 20:38:22 :
mr_saturne a corrigé le bug. Un grand merci.

 Sources du même auteur

Source avec Zip Source avec une capture EX. DE MODULARISATION : POINT DANS TRIANGLE
Source avec Zip Source avec une capture CRÉER UN TREVIEW AUSSI FACILEMENT QUE LES MENU !
Source avec Zip Source avec une capture MOTEUR 3D BASÉ SUR UNE CARTE 2D (COMME DOOM DE SUPERNES)
Source avec Zip Source avec une capture UTILISATION DE CLASSES : GÉOMÉTRIE
Source avec Zip Source avec une capture ENCORE CES INI ;-) UTILISATION INTELIGEANTE

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) PISH2010-VB2008 par SaintMaur
Source avec Zip Source avec une capture PI-SH-2010-VB6 par SaintMaur
ET... PI... par us_30
Source avec Zip Source avec une capture CHIFFRAGE ET DECHIFFRAGE FONCTION AFFINE par tresorsdevie
NB PREMIER : TEST DE FERMAT ET DE MILLER-RABIN par us_30

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) PARSEUR XML par cyrilremy
Source avec Zip Source avec une capture PAGINATION SQL/PARSER SQL SELECT/ SQL FILTRE par skyla
Source avec Zip Source avec une capture Source .NET (Dotnet) EVALUER/EXECUTER UNE CHAINE EN TANT QUE CODE par divadav
Source avec Zip PARSER DE TEXTE - TRÈS UTILE POUR L'INTERPRÉTATION DE FICHIE... par phalet
Source avec Zip DÉCOMPOSER LES ARGUMENTS D'UNE LIGNE DE COMMANDE (GÈRE LES G... par LogOff

Commentaires et avis

Commentaire de max12 le 27/03/2005 22:10:33 administrateur CS

C'est intéressant.

Commentaire de Urgo le 28/03/2005 04:43:48

"2+40558.25
40558.25"

Erreur quant tu nous tiens... (40560.25)"

Commentaire de krissssss le 28/03/2005 12:39:53

Pour Urgo :
Merci pour l'erreur ;-)
J'ai pas sû trouver d'où venais ces erreurs.
Si tu penses savoir où elle a lieu, aide moi s'il te plais.
Et ne va pas dormir trops tard, 04:43:48 c'est pas une heure. :-D
Encore merci pour ce commentaire (et probablement les suivants ;-)).

Pour Max12:
Merci pour ton encouragement.
Je vais peut-être le porter en Delphi, qui sait...

En gros, c'est mon prof qui m'a demmandé une calculatrice style Windows.J'ai préféré une plus évoluée :p (Je la lui montre à la rentrée...)

Bon amusement avec cette source.
Et voyez la puissance du diviser pour régner !

Aller, après ce long Auto-commentaire-réponse, je vous dis : "à la prochaine" :-)

Commentaire de shadowmoy le 28/03/2005 20:43:45

tu aurais pu utiliser le vbscript sous vb pour faire ca et ca aurait été beaucoup beaucoup plus rapide

ou alors fo gerer une stack et faire des push memoire et des operations de bases direct en memoire c plus rapide et utilisé dans les languages de script ...

Commentaire de cqui789 le 03/04/2005 01:30:15

pour ton '2*-5 donne -5' bug, ton programme comprend 2*0-5 qui vaut effectivement -5
tu as un probleme similaire avec 'cos-5'
je suggere que tu cree une fonction pour relever la valeur numerique qui suit une fonction ou un operateur et qui considere la possibilite que cette valeur commence par "-"

Commentaire de mr_saturne le 18/01/2006 16:39:45

génial, exactement ce que je cherchais!

par contre, est ce que le bug a été réglé avec le temps? ou y a t-il eu une seconde version?

Commentaire de krissssss le 20/01/2006 13:39:29

MR_SATURNE, désolé de vous décevoire mais pour le momment le temps me fait défaut...
Par contre, CQUI789 donne une piste ;-) C'est à toi de voir.
(Recherche aussi : Coloration Syntaxique)

@+

Commentaire de mr_saturne le 23/01/2006 09:37:18

Effectivement le temps pressant j'ai rectifié moi même ton code pour qu'il prenne en compte les facteurs négatifs.

Je le met pas là car ca va être illisible mais si ca t'interesse (ou qqun d'autre) demandes le moi par mail : mr_saturne@hotmail.com

Bravo pour ton travail en tous cas, ca m'a bien servit ;-)

Commentaire de Jy_Die le 07/03/2007 14:08:12

Salut Kriss
Je pense qu'il y a un bug dans la résolution. Vérifie les 2 dernières lignes des opérations. 2+160027/4 = 2+40006.75 et non pas 40558.25. J'ai un autre programme qui donne le même résultat pour ce problème et lui aussi oubli d'additionner le 2. Lorsque je fait évaluer la dernière séquence la réponse est 40008.75 et si je résoud l'ensemble on retrouve 40558.25. Il y a un gros bug dans les 2 programmes ou c'est moi qui ne comprend rien.

Commentaire de krissssss le 15/03/2007 11:27:25

Réfférez-vous à Mr saturne ;-)
Il semble qu'il ait corrigé ce bug.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Comment evaluer une expression ? [ par GEDDi ] Bonjour,je cherche comment on peut Evaluer une expression en VB :Exemple j'ai une fonction TOTO(args)qui renvoie 'hello' et je veux l'évaluer: exister DEFI !!! : Evaluer le contenu d'une variable à l'exécution [ par Philippe PUECH ] Salut à tous ! Je programme depuis un moment en VB et il manque cruellement un accès aux variables. Quelqu'un sait-il comment, lors de l'exécution, ré Recherche ActiveX ou Module pour parser du XML [ par shire ] Recherche ActiveX ou Module pour parser du XML lire une variable ligne par ligne, parser XML [ par guiguimac ] Bonjour,existe-il une methode propre à VB pour lire le contenu d'une variable ligne par ligne ou faut-il parser la chaîne nous même en prenant en comp A gagner Analyseur SQL (Parser) [ par Renfield ] Salut tout le monde !!Pour le boulot , j'ai fait une classe (egalement disponible en ocx) qui permet de parser un requete SQL. Vous lui fournissez la parser des strings [ par tyf ] Bonjour, J aimerais parser des chaines de caractères par rapport à un caractère:ex: split(machaine,"-") ... Y a t il une fonction en VBA ? merci ... Problème avec HTMLDocument [ par piotrelrojo ] Bonjour, j'ai un problème avec vb .net ... que je trouve insolublej'ai des fichiers htmlque je veux parserpour récupérer le code, je fais donc ça: Dim parser xml en C [ par jbt36 ] bonjour à tous,j'ai besoin de realiser un editeur xml en Cpour cela je dois notamment parser le fichier xml pour pouvoir le manipuler,l'affichersous f Parser une page HTML [ par zucchero ] Salut tlm,J'ai téléchargé le prg de joshrbz pour parser une page HTML et pour en retirer de l'info. Mais vu que je pige rien en PHP, que dois-je faire


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales