Changes between Version 1 and Version 2 of CaoCourseTme5


Ignore:
Timestamp:
Mar 6, 2007, 7:47:59 PM (18 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CaoCourseTme5

    v1 v2  
    11{{{
    22#!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>
    44}}}
    55
     
    3636extern var_t  *cons_var(char *name, unsigned int index, unsigned int value)
    3737}}}
    38 Cette fonction crée une variable Booléenne, vérifie l’unicité des noms et des index, initialise les champs NAME, INDEX et VALUE de la structure de donnée, et renvoie un pointeur sur la variable ainsi créée.
     38Cette 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.
    3939{{{
    4040extern var_t *get_var_index(unsigned int x)
     
    5959= A. Représentation Graphique =
    6060
    61 Soit l’expression  {{{E0 = (a’ . (b + c + d’) . e) + c}}}       La notation a’ signifie NOT(a)
     61Soit l’expression  {{{E0 = (a’ . (b + c + d’) . e) + c}}}       
     62
     63La notation a’ signifie NOT(a)
    6264
    6365 *  '''A.1''': Re-écrire cette expression sous une forme préfixée, et représentez graphiquement l’arbre ABL  correspondant à l’expression E0.
     
    9092On appelle support d’une expression Booléenne l’ensemble de toutes les variables qui apparaissent au moins une fois dans cette expression.
    9193Pour 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 le 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.
     94Attention : 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.
    9395
    9496On 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.
     
    108110}}}
    109111cette 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() ...
     112Attention: 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() ...
    113114 *  '''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.
    114115