Programmation C

Fermé
hammamlifoise - 2 juin 2009 à 16:39
 hammamlifoise - 3 juin 2009 à 12:43
Bonjour,
voici ci dessous l'algorithme de NORRIS pour l'extraction de concepts formelles:
L ← x1*x2
Pour k de 2 à 6 faire
Pour i de 1 à k-1 faire
Si yi inclus dans yk alors
xi * yi ← {xi , xk} * yi
Marquer xk
Sinon si (yi ∩ yk) est différent de 0 alors
s← (yi ∩ yk)
L← L + { xi , xk } * s
Fin si
Fin si
Fin pour
Si xk non marquer
L← L + xk * yk
Fin si
Fin pour
je n'arrive pas à le programmer correctement en langage C,avec les pointeurs et les listes chainées.
si quelqu'un peut m'aider je serais très ravis et je le remercie d'avance.
il constitue une partie très importante dans mon projet de fin d'année et ma soutenance c'est pour le 4 juin matin.merci pour votre collaboration

3 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
2 juin 2009 à 16:50
Explique un peu mieux, ce que tu as à la base (types des xi, yi, fonctions déjà établies...)
Le mieux serait de mettre un commentaire en français pour chaque étape importante.
Il est évident qu'en C, faire xi * yi ← {xi , xk} * yi n'a aucun sens (pour moi)
0
hammamlifoise
2 juin 2009 à 18:24
R a b
1 1 1
2 0 1
ci dessus un contexte formel
les Yi sont les images respectives de Xi par la relation R
par exemple:X1=1 son image Y1={a, b}.
X2=2son image Y2={b}.
soient les structures en C suivantes:
typedef struct ldoc
{
char *doc;
struct ldoc *next; \*c'est la structure des Yi*\


} ldoc;
typedef struct cbase
{

char ext[5] ;\* ext:c'est l'extension qui représente les Xi *\
ldoc *doc;
int niv ;
struct cbase *next;


} cbase;\* cbase est la structure qui exprime le contexte formel dont on a cité un exemple ci dessus*\
voici deux procédures :
void intersection (cbase *b, cbase *bb, ldoc **ld) \* procédure pour voir l'intersection entre les images Yi*\
{ ldoc *tb=b->doc;
ldoc *tbb=NULL;
while(tbb!=NULL)
{ tbb=bb->doc;
while(tbb!=NULL)
{ if(tbb->doc= tb->doc)
{ if((*ld)==NULL)
{ (*ld)=(ldoc*)malloc(sizeof(ldoc));
(*ld)->doc=tbb->doc;
(*ld)->next=NULL;
}
else
{ ldoc *pld=(*ld);
while(pld->next!=NULL)
pld=pld->next;
ldoc *tld=(ldoc*)malloc(sizeof(ldoc));
tld->doc=tbb->doc;
tld->next=NULL;
}
}
tbb=tbb->next;
tb=tb->next;
}
}
}




int inclusion(cbase *b, cbase *bb) \*procédure qui vérifie s'il ya inclusion entre les Yi ou non*\
{ if (b->niv<=bb->niv)
{
int ok;
ldoc *p=b->doc;
ldoc *g=NULL;

while (p!=NULL)
{
ok=0;
g=bb->doc;
while (g!=NULL)
{
if (g->doc==p->doc)
{
ok++;
p=p->next;
g=NULL;
}
else g=g->next;

}
if (ok==0)
{
free(g);
free(p);
return 0;
}
}

free(g);
free(p);
return 1;
}

}
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
3 juin 2009 à 12:12
Je ne dis pas avoir regarder ton code en détail (ton problème est ailleurs)
Cependant, il y a des lignes de codes qui me paraissent erronées, si elles ne le sont pas tant mieux !

Dans intersection :
    ldoc *tbb=NULL;
    while(tbb!=NULL) // tbb est déclaré NULL
// on ne rentrera jamais à l'intérieur du while !
    {
        tbb=bb->doc;
        while(tbb!=NULL)
        {
            if(tbb->doc = tb->doc) // ici il faut surement un "=="
            {
Dans inclusion, tu renvoie 1 à la fin du "then" mais rien à la fin du "else" alors qu'on attend un int en résultat

Pour ton problème de "traduction" en C, je vais regarder ce que je peux faire, mais j'avoue être un peu perdu dans ton code...
0
hammamlifoise
3 juin 2009 à 12:43
merci bien pour votre collaboration
0