Comparaison sur liste chainée
bonjour à tous,
Je suis en ce moment sur un projet d'IA qui utilise 2 structures:
base de règle et base de faits:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| typedef struct BDF
{
char nom_du_fait [20];
struct BDF *suiv;
}ST_BDF;
typedef struct BDR
{
char nom_poisson[15];
struct BDR *suiv;
ST_BDF *fait;
}ST_BDR; |
voici mon petit soucis:
je commence par créer une règle, tout se passe bien à l'affichage.
je créer des fait, pareil pas de soucis .
mon proble intervient dans la fonction qui vient faire le chainage avant.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| void test(ST_BDR *r_tete, ST_BDF *f_tete)
{
ST_BDR *r_courant;
ST_BDF *f_courant;
r_courant=r_tete;
f_courant=f_tete;
int trouve=0;
do
{
trouve=comparif(r_courant,f_tete); /*le pb intervien dans cette fonction*/
if (trouve==1)
{
f_tete=insertnouvofait(f_tete,r_courant);
printf("\nconclusion:%s",r_courant->nom_poisson);
}
r_courant=r_courant->suiv;
}while(r_courant!=NULL);
printf("\ntoutes les règles ont été parcourues\n");
} |
voici la fonction de comparatif:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| int comparif(ST_BDR *r_courant, ST_BDF *f_tete)
{
ST_BDF*f_courant=f_tete;
ST_BDR*regle=r_courant;
int trouve=0;
int ok=0;
do
{
ok=0;
regle=r_courant;
do
{
if((strcmp(regle->fait->nom_du_fait,f_courant->nom_du_fait))==0)
{
ok=1;
}
else
{
ok=0;
f_courant=f_courant->suiv;/*pas de modif dans f_tete*/
}
}while( f_courant!=NULL && ok==0);
if (ok==0)
{
return 0;
}
f_courant=f_tete;
regle->fait=regle->fait->suiv;/*le pb est localisé ici, il modifie mon paramètre r_courant que je passe à la fonction*/
}while(regle->fait!=NULL);
regle=r_courant;
return 1;
} |
comme je l'ai indiqué, lorsque j'effecture cette instruction ma variable r_courant est elle aussi modifiée. je ne comprend pas pourquoi (vérifier en débug et lors de l'affichage de la base de règle). f_tete(correspondant à ma base de fait n'est pas modifié) lors f_courant=f_courant->suiv;
merci pour vos réponses, si je n'ai pas assez expliqué faite moi part de ce que vous n'avez pas compris.