Travaux Dirigé numéro 9 L&P
RECURSIVITE et ARBRES
DESS CCI  1999-2000
 

But de la scéance :

 

 

Expressions arithmétiques

On s'intéresse à la gestion d'expressions arithmétiques dont les opérateurs sont soit unaires (-), soit binaires (+,-,*,/). Le programme que l'on veut réaliser doit permettre à un utilisateur de saisir une expression, de l'enregistrer, et de calculer son résultat. L'enregistrement d'une expression est réalisé en stockant l'expression sous la forme d'un arbre binaire.

 

Afin d'optimiser le temps de calcul du résultat d'une expression, l'arbre binaire construit lors de son enregistrement comportera au niveau de chaque noeud n l'adresse de la fonction permettant d'évaluer le résultat du noeud n. Les diverses fonctions d'évaluation correspondent aux différents opérateurs fournis :

 

Pour réaliser ce programme, on suppose que l'on dispose d'un outil faisant l?analyse de l'expression arithmétique tapée au clavier par un utilisateur, et appelant les fonctions suivantes pour la construction de l?arbre binaire associé. Le type t_noeud correspond au type de donnée représentant un noeud de l'arbre binaire.

 

Le type t_noeud est défini de manière à contenir les informations suivantes :

la valeur entière
 
EXERCICE 1

On demande de définir en langage C le type t_noeud,
 

EXERCICE 2

On demande d'écrire les fonctions cons_plus et cons_litteral de construction d'un arbre binaire;
 

EXERCICE 3

On demande d'écrire les fonctions eval_plus et eval_litteral, d'évaluation du résultat de l'expression représentée par un arbre binaire.
 

EXERCICE 4

On souhaite permettre la sauvergarde et la restauration d'arbres représentant des expressions arithmétiques. Pour ceci, on fournit la fonction suivante:

 

La sauvegarde d'un arbre dans un fichier s'effectuera selon un parcours préfixé de l'arbre (racine, gauche, droit) que l'on écrira de manière récursive.

De même que chaque noeud de l'arbre possède sa propre fonction d'évaluation, chaque noeud possèdera également sa propre fonction de sauvegarde. Les diverses fonctions de sauvegarde correspondent aux différents opérateurs fournis :

 

En outre, afin de fournir toutes les informations permettant de reconstruire un arbre à partir d'un fichier de sauvegarde, on adoptera les règles suivantes :

L'expression (40 + 3) * 5 sera donc sauvegardée sous la forme m p 40 3 5.

Etant donnée la fonctions restaure, on demande d'écrire les fonctions f_sauv_plus et f_sauv_litteral.