EXERCICE 3 - SYSTEME EXPERT
Les listes chaînées (Version C)
 
 
ENONCE
 

Le but de cet exercice est d'écrire ce que l'on appelle un système expert. Il s'agit d'un mécanisme qui, à partir d'un certain nombre de faits, permet de tirer des conclusions en s'appuyant sur des règles. Ici, on considérera l'exemple suivant.

Base de faits:

F1:   a trois côtés
F2:   a deux côtés égaux
F3:   a un angle droit
F4:   a trois angles égaux
F5:   triangle
F6:   triangle isocèle
F7:   triangle équilatéral
F8:   triangle rectangle
F9:   a plus de trois côtés
F10:   a moins de trois côtés
F11:   est impossible
F12:   est un polygone

Base de règles:

R1:   F12 et F1  F5
R2:   F5 et F2  F6
R3:   F5 et F3  F8
R4:   F5 et F4  F7
R5:   F10  F11
R6:   F9  F12
R7:   F1  F12
R8:   F7 et F8  F11

Par exemple, si on a les faits F5 et F4 ("triangle", "a trois angles égaux"), on peut en déduire F7 ("triangle équilatéral"). La base de faits et la base de règles seront stockées dans des fichiers. Le programme consistera donc à lire ces bases, à demander à l'utilisateur une liste de faits et à en tirer toutes les conclusions possibles.

Question 1: Ecrire les algorithmes nécessaires pour manipuler une liste de faits.

  • lireBaseFaits qui lit une base de faits dans un fichier et stocke les intitulés dans un tableau,

  • afficherBaseFaits qui affiche une base de faits,

  • ajouterFait qui ajoute un fait en tête dans une liste de faits,

  • saisirListeFaits qui permet la saisie d'une liste de faits,

  • afficherListeFaits qui affiche une liste de faits.

La structure employée pour une liste de faits est la suivante.

structure FAIT:
 ENTIER id;
 FAIT * suivant;
fin structure;

Question 2: Ecrire les algorithmes nécessaires pour manipuler une liste de règles.

  • ajouterRegle qui ajoute une règle en tête dans une liste de règles,

  • lireRegle qui lit une règle dans un fichier,

  • lireBaseRegles qui lit une base de règles dans un fichier,

  • afficherListeRegles qui affiche une liste de règles.

La structure employée pour une liste de règles est la suivante.

structure REGLE:
 ENTIER  id;
 FAIT *  hypotheses;
 FAIT *  conclusions;
 REGLE * suivant;
fin structure;

Question 3: Ecrire les algorithmes nécessaires pour trouver les conclusions à partir de la liste de faits saisie par l'utilisateur.

  • faitPresent qui vérifie qu'un fait est bien dans une liste,

  • appliquerRegle qui applique une règle si la liste de faits le permet, les nouveaux faits trouvés sont alors ajoutés à la liste de faits,

  • supprimerRegle qui supprime une règle de la liste de règles (en effet, une fois appliquée une règle devient inutile),

  • trouverConclusions qui trouve toutes les conclusions déductibles à partir d'une liste de faits,

  • afficherConclusions qui affiche toutes les conclusions trouvées (sous une forme claire).

Question 4: Ecrire les algorithmes viderListeFaits et viderListeRegles pour vider les listes de faits et de règles afin de libérer la mémoire occupée par les faits et les règles.

 
CORRECTION