exemple systeme expert

نرمين*

  • Global Moderator
  • Hero Member
  • *****
    • مشاركة: 3989
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
في: آذار 15, 2010, 08:50:43 مسائاً
   #include
     #include //getch
   
     struct liste { //déclaration nécissaire
     char el;
     liste * next;
     };
   
     struct fait {
     char el;
     char test;
     fait * next;
     };
   
     struct regle {
     liste * condition;
     liste * resultat;
     char testr;
     regle * suivant;
     };
   
     //##############################################################
   
     fait * Creation_Base_Fait (fait * F){
     int k;
   
     F = new fait;
     cout<<"\nDonner une base fait : ";
     cin>> F->el;
     F->test = '#';
     F->next = NULL;
   
     fait * p = F;
   
     cout<<"\nContinier ... 0/1 : "; cin>> k;
     while (k != 0 ) {
     fait * q = new fait;
     cout<<"\nDonner une base fait : ";
     cin>> q->el;
     q->test = '#';
     q->next = NULL;
     p->next = q;
     p = q;
   
     cout<<"\nContinier ... 0/1 : "; cin>> k;
     }
     return F;
     }

     //##############################################################
   
     liste * creation (int n){
     liste * tete = new liste;
     cin>> tete->el;
     tete->next = NULL;
     liste * q = tete;
   
     for (int i = 2; i<=n; i++){
     cout<<"--- ^ ---\n";
     liste * p = new liste;
 cin>> p->el;
     p->next = NULL;
     q->next = p;
     q = p;
  }
     return tete;
     }
   
     //------------------------------------------------
   
     regle * Creation_Base_Regle (regle * Rr){
     int n1,n2; int k;
     Rr = new regle;
   
     cout<<"\nDonner le nombre de condition : "; cin >> n1;
     Rr->condition = creation (n1);
     cout<<"\nDonner le nombre de resultat : "; cin >> n2;
     Rr->resultat = creation (n2);
     Rr->testr = '*';
     Rr->suivant = NULL;
   
     cout<<"\nContinier ... 0/1 : "; cin>> k;
     regle * p = Rr;
     while (k != 0 ) {
     regle * q = new regle;
   
     cout<<"\nDonner le nombre de condition : "; cin >> n1;
     q->condition = creation (n1);
     cout<<"\nDonner le nombre de resultat : "; cin >> n2;
     q->resultat = creation (n2);
     q->testr = '*';
     q->suivant = NULL;
     p->suivant = q;
     p = q;
   
     cout<<"\nContinier ... 0/1 : "; cin>> k;
     }
     return Rr;
     }
   
     //##############################################################
   
   
     void Ajoute_Regle(regle * &R) {
     int n1,n2;
     regle * nouveau = new regle;
   
     cout<<"\nDonner le nombre de condition : "; cin >> n1;
     nouveau->condition = creation (n1);
   
     cout<<"\nDonner le nombre de resultat : "; cin >> n1;
     nouveau->resultat = creation (n1);
   
     nouveau->testr = '*';
   
     nouveau->suivant = NULL;
   
     regle * p = R;
   
     while (p->suivant != NULL)
     p = p->suivant;
   
     p->suivant = nouveau;
   
   
     }
   
     //------------------------------------------------
   
     void Ajoute_Fait (fait * &F,char el, char x){
     fait * nouveau = new fait;
     nouveau->el=el;
     nouveau->test = x;
     nouveau->next = NULL;
   
     fait * p =F;
     while (p->next != NULL)
     p = p->next;
   
     p->next = nouveau;
     }
   
     //######################################################
   
     void Afficher_Base_Conn (fait * F, regle * R){
     fait * ff = F;
     while (ff != NULL){
     cout<< ff->el<<"\n";
     ff=ff->next;
     }
   
     regle * rr = R;
     while (rr != NULL){
     liste * p = rr->resultat;
     while (p != NULL){
     cout<< p->el<<"\n";
     p = p->next;
     }
   
     rr=rr->suivant;
     }
     }
   
     //######################################################
   
     int nombre_liste (liste * li){ //nombre d'élément d'une liste
     int cpt = 0;
     for (liste * p = li; p != NULL; p = p->next)
     cpt ++;
   
     return cpt;
     }
   
     //------------------------------------------------------
   
     int egual (liste * regcon , liste * L2){ //test égalité de deux listes
   int cpt = 0;
   
    for (liste *p2 = L2; p2!= NULL; p2=p2->next)
     for (liste *reg = regcon; reg!= NULL; reg=reg->next)
     if (p2->el == reg->el)
     cpt ++;
   
     if ((nombre_liste (L2) == cpt))
     return 1;
     else
     return 0;
     }
   
     //------------------------------------------------------------------
   
     int Moteur_Inference (liste * L ,fait * &F, regle * &R){
     regle * r = R; int n1;
   
     cout<<"\nDonner le nombre n : "; cin >> n1;
     L = creation (n1);
   
     while (r != NULL) {
     if (r->testr == '*')
     if ((nombre_liste (L)) == (nombre_liste (r->condition)))
     if(egual(r->condition, L ) == 1) {
     r->testr = '#';
     for (liste * p = r->resultat; p != NULL; p = p->next)
     Ajoute_Fait (F,p->el , '*');
   
     return 0;
     }
     r = r->suivant;
     }
     return 0;
    }
   
     //###################################################################
   
     void Afficher_Resultat (fait * M) { //affichage des résultat éxécution de moteur inference
     fait * p = M;
   
     while (p != NULL){
     if (p->test == '*')
     cout<<"\nResultat est : "<< p->el;
   
     p = p->next;
     }
     }
   
   
     //#########################################################################
     //#########################################################################
     //#########################################################################
   
     void afficherMenu(void) //affichage de menu
     {
   
     cout<<" --------------------------------------- \n";
     cout<<" | 1- saisir les faits . | \n";
     cout<<" | 2- Saisir les regles . | \n";
     cout<<" | 3- Ajouter une regle. | \n";
     cout<<" | 4- Ajouter un fait. | \n";
     cout<<" | 5- Affichager base de connaissance. | \n";
     cout<<" | 6- Moteur d inference. | \n";
     cout<<" | 7- affichage du resultats. | \n";
     cout<<" | 0- Quiter. | \n";
     cout<<" --------------------------------------- \n ";
     cout<<" Realiser Par  NERMINE \n";
     cout<<" en 08/03/2010 \n";
   
     }
   
     int main(){
   
     regle *RRR = NULL; regle*R;
     fait *FFF = NULL ; fait *F;
     liste * LL; char K;
     int nn;
     char choix;
   
     do {
   
     afficherMenu();
     choix = getch();
     switch ( choix )
     {
     case '1':
    cout<<"\n-----------------------------------------------------\n";
     cout<<"\n\tCHARGEMENT BASE DE FAIT\n ";
     FFF = Creation_Base_Fait(F);
     getch();
     break;
   
     case '2':
     cout<<"\n-----------------------------------------------------\n";
     cout<<"\n\tCHARGEMENT BASE DE REGLE\n ";
     RRR=Creation_Base_Regle(R);
     getch();
     break;
   
     case '3':
     cout<<"\n-----------------------------------------------------\n";
     cout<<"\n\tAJOUTE UNE REGLE\n ";
     Ajoute_Regle(RRR);
     getch();
     break;
   
     case '4':
     cout<<"\n-----------------------------------------------------\n";
     cout<<"\n\tAJOUTE UN FAIT\n ";
     cout<< "\nDonner une base de fait : "; cin >> K;
     Ajoute_Fait(FFF,K, '#');
     getch();
     break;
   
     case '5':
     cout<<"\n-----------------------------------------------------\n";
     cout<<"\n\tAFFICHAGE BASE DE CONNAISSANCE\n ";
     cout<<"\nLa base de connaissance est : \n";
     Afficher_Base_Conn ( FFF, RRR);
     getch();
     break;
   
     case '6':
     cout<<"\n-----------------------------------------------------\n";
     cout<<"\n\tMOTEUR D'INFERENCE \n ";
    Moteur_Inference (LL,FFF , RRR);
     getch();
     break;
   
     case '7':
     cout<<"\n-----------------------------------------------------\n";
     cout<<"\n\tRESULTAT \n ";
     Afficher_Resultat (FFF) ;
     getch();
     break;
     }
     }
     while ( choix != '0' );
   
     cout<<"\n ----- LE PROGRAMME TERMINE -----";
   
   
     cin>>nn;
     return 0;
     }
   
   
   
   
   
   
   
   
   



نورالنهار

  • Sr. Member
  • ****
    • مشاركة: 347
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #1 في: آذار 15, 2010, 09:18:36 مسائاً
شكرا نرمين بارك الله فيك


نرمين*

  • Global Moderator
  • Hero Member
  • *****
    • مشاركة: 3989
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #2 في: آذار 16, 2010, 08:52:10 مسائاً
شكرا نور على مرورك الطيب ان شاء الله تكوني استفدتي


bynaruto

  • Newbie
  • *
    • مشاركة: 16
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #3 في: تشرين الأول 18, 2010, 09:42:21 صباحاً
ana khosni le compilateur akhi
hal mina al moumkine an tab3atahou ilaya wa choukran