Systeme expert

Fermé
zalli Messages postés 20 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 20 novembre 2009 - 20 nov. 2009 à 15:13
Bonjour,
j'aimerais de l'aide pour réaliser un chainage avant par profondeur d'abord et un chainage arrière(max prémisses).
voici mon code: (la suppression ne marche pas encore)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define T_MAX 1000

int recherche( char*nomf, char c)
{
FILE *fich=fopen(nomf,"r+");
char ch;
while (!feof(fich))
{

ch= fgetc(fich);
if (ch==c) {fclose(fich);
return 1;}

}
fclose(fich);
return 0;
}

void AjoutFinBf(char* nomf,char *ch)

{ FILE* fich=NULL;
fich=fopen(nomf,"a+");
if( fich==NULL) printf("\nerreur d'ouverture");
else if (recherche("C:\\BF.txt",ch[0])==0)
{fputs(ch,fich);
fputs("\n",fich);
fclose(fich);}
else
printf("le fait existe deja!");
}

void AjoutFinf(char* nomf,char *ch)
{FILE* fich=NULL;
fich=fopen(nomf,"a+");
if( fich==NULL) printf("\nerreur d'ouverture");
else //if (recherche("C:\\BF.txt",ch[0])==0)
{fputs("\n",fich);
fputs(ch,fich);
fclose(fich);}
/*FILE* fich=NULL;//char *v;*v=ch;
fich=fopen(nomf,"a+");
if( fich==NULL) printf("\nerreur d'ouverture");
else
{fputs("\n",fich);
printf("**%c***",ch);
fputs(&ch,fich);
fclose(fich);}*/
}

void AjoutFinBr(char* nomf,char*ch)
{int n=0,i;
char c;
char f[2];
char NF[6];

FILE* fich=NULL;
fich=fopen(nomf,"a+");
if( fich==NULL) printf("\nerreur d'ouverture");
else {fputs("\n",fich);
fputs(ch,fich);
fclose(fich);
}
f[0]=ch[strlen(ch)-1];
AjoutFinBf("C:\\BF.txt",f);

}




void lecture(char* nomf)
{int i;
FILE* fich = fopen(nomf, "r");
char ch[T_MAX];
if (fich != NULL)
{
while (fgets(ch,T_MAX, fich) != NULL)
{
/*for (i=0;i<strlen(ch);i++)
{if(ch[i]==',')
printf("et");
else{
if(ch[i]==':')
printf("alors");
else
printf("%s",ch[i]);}
}*/
printf("%s",ch);
}

fclose(fich);
}
}

void supBf(char*nomf,char *ch)
{FILE* fich;
//FILE* fich2;
//char*nomf2;
char c;
fich=fopen(nomf,"r+");
FILE *n= fopen("C:\\C\\F.txt","r+");
if(fich==NULL) printf("\nerreur d'ouverture");
else if (recherche("C:\\BF.txt",ch[0])==0) printf("il n'existe pas");
else { while (!feof(fich))
{

c= fgetc(fich);

//printf("%c",*ch);
if (c!=*ch)
// AjoutFinf("C:\\C\\F.txt",&c);printf("%c",c);}
fputs(&c,n);
}
// nomf="C:\\F.txt";
}
/*fich2=fopen(nomf2,"a+");
if(fich2==NULL) printf("\nerreur d'ouverture");
else {
while (fgets(*c,T_MAX,fich) != NULL)
{
while (*c!=ch){
fputs(*c,fich2);}
}
*nomf=*nomf2;
fclose(fich2);}*/

fclose(fich);

}

void supBr(char*nomf,char*ch)
{FILE* fich;
//FILE* fich2;
//char*nomf2;
char c;
fich=fopen(nomf,"r+");
if(fich==NULL) printf("\nerreur d'ouverture");
else if (recherche("C:\\BR.txt",ch[0])==0) printf("il n'existe pas");
else { while (!feof(fich))
{

c= fgetc(fich);

if (c!=*ch) {
AjoutFinBr("C:\\C\\R.txt",&c);printf("%c",c);}

nomf="C:\\R.txt";}

fclose(fich);}

}



int main(int argc, char *argv[])
{ char ch[T_MAX]="";
char* bf[T_MAX];
char*br[T_MAX];
char*but[T_MAX];
int n=0;
char rep,rep1,rep2;


do
{
system("cls");
printf("\n1-Choisir votre BC");
printf("\n2-Affichage");
printf("\n3-Mise a jour");
printf("\n4-Chainage");
printf("\n\n\n0-Exit\n");

fflush(stdin);
rep=getchar();
if(rep=='1') {
printf("Donner le lien vers la BF: ");
scanf("%s",bf);
printf("Donner le lien vers la BR: ");
scanf("%s",br);
printf("Donner le lien vers le BUT: ");
scanf("%s",but);
}
else {
*bf="C:\\BF.txt";
*br="C:\\BR.txt";
*but="C:\\BUT.txt";
}
if(rep=='2') {
system("cls");
printf("\n1-Afficher la base de faits ");
printf("\n2-Afficher la base de regles ");
printf("\n3-Afficher la base de connaisances ");
printf("\n\n\n0-Exit\n");
do
{
fflush(stdin);
rep1=getchar();
if(rep1=='1'){
printf("la base des faits:\n");
lecture("C:\\BF.txt");
printf("\n");
}
if(rep1=='2'){printf("la base des regles:\n");
lecture("C:\\BR.txt");
printf("\n");
}
if(rep1=='3'){printf("la base de connaissance;\n");
printf("la base des faits:\n");
lecture("C:\\BF.txt");
printf("\nle but:\n");
lecture("C:\\BUT.txt");
printf("\nla base des regles:\n");
lecture("C:\\BR.txt");
printf("\n");
}
}while(rep1!='0');
}
if(rep=='3') {
do
{
system("cls");
printf("\n1-Ajout ");
printf("\n2-Suppression ");
printf("\n3-Modification ");
printf("\n\n\n0-Exit\n");
fflush(stdin);
rep1=getchar();
if(rep1=='1') {
system("cls");
printf("\n1-Ajouter un fait");
printf("\n2-Ajouter une regle");
printf("\n\n\n0-Exit\n");
do
{
fflush(stdin);
rep2=getchar();
if(rep2=='1') {printf("donner un nouveau fait: \n");
scanf("%s",ch);
AjoutFinBf("C:\\BF.txt",ch);}
if(rep2=='2') {printf("saisir regle: fait1,fait2....,faitn:resultat\n");
scanf("%s",ch);
AjoutFinBr("C:\\BR.txt",ch);}
}while(rep2!='0');}
if(rep1=='2') {
system("cls");
printf("\n1-Supprimer un fait");
printf("\n2-Supprimer une regle");
printf("\n\n\n0-Exit\n");
do
{
fflush(stdin);
rep2=getchar();
if(rep2=='1') {printf("donner le fait a supprimer\n");
scanf("%s",ch);
supBf("C:\\BF.txt",ch);}
if(rep2=='2') {printf("donner la regle a supprimer\n");
scanf("%s",ch);
supBr("C:\\BR.txt",ch);}
}while(rep2!='0');
}
if(rep1=='3'){
system("cls");
printf("\n1-Modifier un fait");
printf("\n2-Modifier une regle");
printf("\n3-Modifier le but");
printf("\n\n\n0-Exit\n");
do
{
fflush(stdin);
rep2=getchar();
/*if(rep2=='1') {printf("donner le fait a modifier\n");
scanf("%s",ch);
supBf("C:\\BF.txt",ch);
printf("donner le nouveau fait\n");
scanf("%s",ch);
AjoutFinBf("C:\\BF.txt",ch);
}*/
/*if(rep2=='2') {printf("donner la regle a modifier\n");
scanf("%s",ch);
supBr("C:\\BR.txt",ch);
printf("donner la nouvelle regle\n");
scanf("%s",ch);
AjoutFinBr("C:\\BR.txt",ch);
}*/
/*if(rep2=='3') {
supBf("C:\\BUT.txt",ch);
printf("donner le nouveau but\n");
scanf("%s",ch);
AjoutFinBf("C:\\BUT.txt",ch);
}*/
}while(rep2!='0');}



}while(rep1!='0');}
if(rep=='4'){
system("cls");
printf("\n1-Realiser un chainage avant");
printf("\n2-Realiser un chainage arriere");
printf("\n\n\n0-Exit");
}


}while(rep!='0');

/*if(recherche("C:\\BUT.txt",ch[0])==0) printf("le but n'est pas encore attend\n");
else {printf("le but est attend\n");
rep=8;}*/
//getch();
return 0;
}



merci d'avance.