System expert

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 473 fois - Téléchargée 21 fois

Contenu du snippet

Un system expert est une application logicielle qui composé une base de connaissance (base de fait et base de regle) et moteur inférence qui réalise algorithme

ce programme fait la création de base de fait et base de regle et peut ajouter un fait ou une régle
et peut réaliser aussi algorithme de moteur d'inference et peut afficher les donné de la base de connaissance et résultats d'éxécution moteur d'inférence ...

E-mail :kader.missoum@yahoo.fr 2008
merci...

Source / Exemple :


#include <iostream.h>
#include <conio.h> //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 MISSOUM Abdelkader      \n";
			cout<<"                  en 18/01/2008                 \n";
			cout<<"            E-mail: kader.missoum@yahoo.fr      \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;
}

Conclusion :


pseudo : kadermissoum

/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/

E-mail : kader.missoum@yahoo.fr

Adresse-toi a moi pour je t'éxpliquer


MERCI ...

A voir également

Ajouter un commentaire Commentaires
David292929 Messages postés 14 Date d'inscription jeudi 21 avril 2011 Statut Membre Dernière intervention 14 mai 2011
24 avril 2011 à 00:22
merçi beaucoup mon ami
cs_rihana Messages postés 3 Date d'inscription jeudi 2 avril 2009 Statut Membre Dernière intervention 13 mars 2010
13 mars 2010 à 20:43
mais dans la partie de moteur d'inference c quoi le nombre n
c'est le nombre de quoi
khazzab Messages postés 3 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 8 février 2009
6 avril 2008 à 19:59
salut
votr code est réussi 100% mais il est un peut compliqui pour mois , es que vous avez la version en pascal ou en java
es ce que vous pouvez me aidé parce que je suis debutante enprogrammation.
merci

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.