Structure des données en calcul formel

carlvb Messages postés 199 Date d'inscription mercredi 23 avril 2003 Statut Contributeur Dernière intervention 25 mai 2017 - 9 déc. 2003 à 08:29
Vb Lover Messages postés 221 Date d'inscription vendredi 30 novembre 2001 Statut Membre Dernière intervention 13 février 2010 - 12 déc. 2003 à 08:39
:-( carlvb

Salut!
Je voudrais bien me lancer dans le calcul formel mais je bute sur un problème de fond: Quelle structure de données utiliser?

En calcul numérique c'est simple, on utilise des structures assez simples comme integer, long, currency... Pour utiliser des nombres complexes on peut utiliser une structure à deux éléments, l'un pour stocker la partie réelle et l'autre pour la partie imaginaire.

Maintenant, en calcul formel pour stocker une expression comme a+b/(c-d), quelle structure choisir en vue de pouvoir le manipuler par la suite, si on devait multiplier le précedent par une autre expression du genre a-z*(b+e)

Une structure en arbre peut-il suffire ou y-at-il d'autres strucutures plus adaptées? Quels algorithmes utiliser pour réaliser les opérations du genre que j'ai cité plus haut et comment les mettre en oeuvre?

Ce serait gentil de m'aider si vous vous y connaissez.

à plus.

3 réponses

Vb Lover Messages postés 221 Date d'inscription vendredi 30 novembre 2001 Statut Membre Dernière intervention 13 février 2010 5
11 déc. 2003 à 18:46
Quoi que tu essaies, tu vas être confronté à définir une hiérarchie dans tes expressions, et donc il va te falloir une structure en arbre (en tout cas en VB). Après, tout dépend de comment tu programmes ça!
Pour l'opération que tu décris (multiplier tes 2 expressions), c'est trivial une fois que ta structure est en place : tu crées un "noeud" avec comme caractéristique que c'est une multiplication et tu lui donnes les 2 sous-arbres.

VB Lover
0
carlvb Messages postés 199 Date d'inscription mercredi 23 avril 2003 Statut Contributeur Dernière intervention 25 mai 2017 11
12 déc. 2003 à 07:50
:-(carlvb

Merci VBLover d'avoir bien voulu répondre à ma question sur la structure de donnée, là dessus je crois donc que je vais utiliser la structure d'arbre.
Je pourrais créer un module de Classe disons Noeud avec les éléments suivant

Contenu as Variant
FilsGauche as Noeud
FilsDroite as Noeud

Et pour dresser l'arbre représentant une expression j'ai déjà un analyseur léxical et syntaxique et donc je crois que je vais y arriver.

Mais maintenant quand tu dis que les opérations seront triviales une fois la structure définie, c'est là que j'ai des problèmes, si tu pouvais m'éclairer un peu en donnant les principes et le fonctionnement de l'algorithme (si tu pouvais prendre en exemple l'expression que j'ai mentionné) ou en m'indiquant un lien qui donne ces informations.

Ce serait vraiment gentil de ta part et ça va m'aider énormement.

à plus.
0
Vb Lover Messages postés 221 Date d'inscription vendredi 30 novembre 2001 Statut Membre Dernière intervention 13 février 2010 5
12 déc. 2003 à 08:39
j'ai mis que c'était trivial, parce que c'est bcp plus simple que l'analyse lexicale et syntaxique d'une expression générale ! En effet, tu n'as pas besoin de faire une quelconque analyse d'expression, car tu sais déjà quel est le noeud droite, le gauche, et le contenu de ce noeud.

ce que tu as déjà :

° Noeud1 : noeud parent de ton expression a+b/(c-d), càd qu'il contient "+", et pointe vers les expressions "a" et "b/(c-d)
° Noeud2 : contient "-" et pointe vers "a" et "z*(b+e)"

ce qu'il faut créer:

set Noeud0 = new Noeud
with Noeud0
.Contenu = "Multiplication"
set .FilsGauche = Noeud1
set .FilsDroite = Noeud2
end with

Voilà, pour l'addition c'est la même chose, pour les division aussi (il faut juste faire attention à quel est le noeud gauche et quel est le noeud droite), ...
VB Lover
0
Rejoignez-nous