Evaluation d'expression mathématique

Soyez le premier à donner votre avis sur cette source.

Vue 6 899 fois - Téléchargée 664 fois

Description

Ce projet exploite des classes VB que j'ai développées pour évaluer des expressions mathématiques.
Je tiens tout de suite à préciser que l'algorithme utilisé est un algorithme linéaire et non récursif.
Premièrement, parce que les algorithmes linéaires sont souvent beaucoup plus rapide que l'équivalent récursif.
Deuxièmement, parce qu'il sont parfois plus complexe -et c'est le cas içi- à mettre en forme, donc plus fun à coder

Bref, avec cela, vous pourrez tout évaluer, ou presque ! Les opérateurs de bases sont bien sûr gérés : +, -, /, *, \ (division entière) et % (modulo), ainsi que de nombreuses fonctions mathématique : cos, sin, tan, atn, fix, int, ...
Allez voir dans le code de la clase 'Expr', la constante 'FunctionNames' regroupe tous les noms de fonctions gérés.
Je penses avoir traiter tous les cas d'erreur possible et n'ai trouvé aucun bug pour le moment (sauf la précision du type Double de VB, mais j'y travaille)

Conclusion :


J'ai mis un petit fichier texte dans le zip qui explique l'algo utilisé.

Si vous avez des questions ou des remarques, n'hésitez pas.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Jy_Die
Messages postés
3
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
7 mars 2007
-
J'ai vraiement aimé, je l'ai testé dans beaucoup de situations diverses et il fonctionne très bien. Tien compte des priotés avec les paranthèses. Je vais l'utiliser dans mon programme de calcule des surfaces et volumes.
addamsmercredi
Messages postés
121
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
27 juillet 2006
-
L'algorithme utilisé ici n'est pas linéaire mais récursif. En effet la fonction Term appelle Expression qui appelle elle-même Term. C'est de la récursion croisée donc c'est récursif.

Ensuite, ça évalue toujours en partant de la droite sans tenir compte des priorités.
Exemple : 5*2+2 donne 20 au lieu de 12 !
stefb28
Messages postés
3
Date d'inscription
vendredi 1 août 2003
Statut
Membre
Dernière intervention
12 juillet 2007
-
la prise en compte du - unaire est incomplete
-1+2 marche mais -cos(0) ne marche pas !
Olilefou
Messages postés
29
Date d'inscription
mercredi 1 août 2001
Statut
Membre
Dernière intervention
9 décembre 2005
-
Va voir là :
http://www.vbfrance.com/article.aspx?Val=3728
c'est simple et efficace.
Bye
carlvb
Messages postés
199
Date d'inscription
mercredi 23 avril 2003
Statut
Contributeur
Dernière intervention
25 mai 2017
2 -
Bravo,
Tu as codé un évaluateur d'expression linéaire qui marche correctement.
Pour ce qui est de la complexité d'un tel modèle (par rapport au modèle récursif) , je suis tout à fait d'accord avec toi vu que moi aussi j'en ai déja fait un (source 8750).
Mais pour la rapidité, je suis un peu sceptique car avec ce modèle tu parcours plusieurs fois l'expression en essayant de la simplifier à chaque passage. Alors qu'avec le modèle récursif, une fois que l'arbre représentant l'expression a été construit, il suffit d'un seul parcours récursif pour obtenir le résultat.
Mais je tiens à te dire que tu as codé une bon programme.

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.