carlvb
Messages postés199Date d'inscriptionmercredi 23 avril 2003StatutContributeurDernière intervention25 mai 2017
-
9 déc. 2003 à 08:29
Vb Lover
Messages postés221Date d'inscriptionvendredi 30 novembre 2001StatutMembreDernière intervention13 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.
Vb Lover
Messages postés221Date d'inscriptionvendredi 30 novembre 2001StatutMembreDernière intervention13 février 20105 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.
carlvb
Messages postés199Date d'inscriptionmercredi 23 avril 2003StatutContributeurDernière intervention25 mai 201711 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.
Vb Lover
Messages postés221Date d'inscriptionvendredi 30 novembre 2001StatutMembreDernière intervention13 février 20105 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