Changes between Version 1 and Version 2 of CaoCourseTme5
- Timestamp:
- Mar 6, 2007, 7:47:59 PM (18 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
CaoCourseTme5
v1 v2 1 1 {{{ 2 2 #!html 3 <h1>TME 5 : Représentation des expressions Boolèennes : ABL</h1>3 <h1>TME 5 : Représentation des expressions Boolèennes : ABL</h1> 4 4 }}} 5 5 … … 36 36 extern var_t *cons_var(char *name, unsigned int index, unsigned int value) 37 37 }}} 38 Cette fonction crée un e variable Booléenne, vérifie l’unicité des noms et desindex, initialise les champs NAME, INDEX et VALUE de la structure de donnée, et renvoie un pointeur sur la variable ainsi créée.38 Cette fonction crée un objet de type var_t, vérifie qu'il n'existe pas de variable portant le même nom ou le même index, initialise les champs NAME, INDEX et VALUE de la structure de donnée, et renvoie un pointeur sur la variable ainsi créée. 39 39 {{{ 40 40 extern var_t *get_var_index(unsigned int x) … … 59 59 = A. Représentation Graphique = 60 60 61 Soit l’expression {{{E0 = (a’ . (b + c + d’) . e) + c}}} La notation a’ signifie NOT(a) 61 Soit l’expression {{{E0 = (a’ . (b + c + d’) . e) + c}}} 62 63 La notation a’ signifie NOT(a) 62 64 63 65 * '''A.1''': Re-écrire cette expression sous une forme préfixée, et représentez graphiquement l’arbre ABL correspondant à l’expression E0. … … 90 92 On appelle support d’une expression Booléenne l’ensemble de toutes les variables qui apparaissent au moins une fois dans cette expression. 91 93 Pour représenter un ensemble de variables, on utilise également des bipointeurs : Un ensemble est représenté par une liste chaînée de bipointeurs où le champs DATA pointe sur un élément de l’ensemble (ici une variable). 92 Attention : même si on utilise l e même type, les bipointeurs utilisés pour représenter des ensembles sont totalement indépendants des biponteurs utilisés pour représenter des arbres ABL.94 Attention : même si on utilise la même structure de donnée bip_t, les bipointeurs utilisés pour représenter des ensembles de variables sont totalement indépendants des bipointeurs utilisés pour représenter des arbres ABL. 93 95 94 96 On cherche à écrire la fonction support_abl(), qui prend en entrée un pointeur p sur la racine d’un arbre ABL, et qui renvoie un pointeur sur la liste chaînée des n variables constituant son support. … … 108 110 }}} 109 111 cette fonction prend en entrée deux pointeurs sur deux listes chainées L1 et L2, et renvoie un pointeur sur la liste chaînée représentant l’union des deux listes. Les deux listes L1 et L2 ne doivent pas être modifiés par la fonction union_list(). 110 Attention: l’union est une opération différente de la simple concaténation, car chaque élément ne doit figurer qu’une seule fois dans la liste. On considère que les deux ensembles L1 et L2 respectent cette condition. Valider cette fonction union_list() en construisant explicitement deux listes de variables non disjointes. On affichera les deux listes L1 et L2, ainsi que la liste résultant de l’union de L1 et L2. 111 * '''D.4''': Ecrire effectivement la fonction support_abl(), en veillant à éviter les « fuites de mémoire ». On parle de fuite de mémoire chaque fois qu’un programme fait de l’allocation dynamique de mémoire sans libérer la mémoire qui n’est plus utilisée. 112 Attention à l’utlisation de la fonction cons_bip() ... 112 Attention: l’union est une opération différente de la simple concaténation, car chaque élément ne doit figurer qu’une seule fois dans la liste. On considère que les deux ensembles L1 et L2 qu'on veut réunir respectent cette condition. Valider cette fonction union_list() en construisant explicitement deux listes de variables non disjointes. On affichera les deux listes L1 et L2, ainsi que la liste résultant de l’union de L1 et L2. 113 * '''D.4''': Ecrire effectivement la fonction support_abl(), en veillant à éviter les « fuites de mémoire ». On parle de fuite de mémoire chaque fois qu’un programme fait de l’allocation dynamique de mémoire sans libérer la mémoire qui n’est plus utilisée. Soyez attentifs à libérer la mémoire allouée par la fonction cons_bip() ... 113 114 * '''D.5''': Intégrez la fonction support_abl() dans le programme main(), et vérifiez que cette fonction calcule correctement le support des trois expressions E0, E1 et E2. 114 115