[c] bloquée sur cette fonction
Résolu
Bonjour,
J'ai une fonction qui prends en entrée une liste chainé(une liste des mots) et elle renvoie des regles sous cette forme " mot->liste des mots"
par exemple on a une liste chainée en entree : une liste des mots "bonjour les amis"
donc comme resultat on doit avoir :
bonjour->les amis
les ->amis
J'ai deja developpé qui affiche une liste chainée.
mais je trouve pas comment integrer l'affiche de la liste, le caractere "->" et l'affichage du mot.
merci.
j'attends vos reponses.
J'ai une fonction qui prends en entrée une liste chainé(une liste des mots) et elle renvoie des regles sous cette forme " mot->liste des mots"
par exemple on a une liste chainée en entree : une liste des mots "bonjour les amis"
donc comme resultat on doit avoir :
bonjour->les amis
les ->amis
J'ai deja developpé qui affiche une liste chainée.
mais je trouve pas comment integrer l'affiche de la liste, le caractere "->" et l'affichage du mot.
merci.
j'attends vos reponses.
A voir également:
- [c] bloquée sur cette fonction
- Fonction si et - Guide
- Boite gmail bloquée - Guide
- Souris tactile bloquée - Guide
- Fonction miroir - Guide
- Fonction remplacer sur word - Guide
3 réponses
Essaye déjà d'écrire ton algorithme en pseudo code. On verra ensuite comment l'écrire en C.
Autre question, est ce que tu ne veux pas plutôt afficher "bonjour->les->amis" ce qui paraîtrait plus logique vu ta structure de donnée ?
Autre question, est ce que tu ne veux pas plutôt afficher "bonjour->les->amis" ce qui paraîtrait plus logique vu ta structure de donnée ?
Salut,
Je n'ai jamais utiliser de Liste chaînée mais est ce que tu es sur du q++? Ce n'est pas q=q->suivant?
OU avec while
Cela me semblerai plus logique mais comme j'ai dis je n'ai jamais utiliser donc ce n'est qu'une supposition.
Je n'ai jamais utiliser de Liste chaînée mais est ce que tu es sur du q++? Ce n'est pas q=q->suivant?
OU avec while
void GenRA(Liste * l) { Liste *p; Liste *q; for(p=l;p!=NULL;p=p->suivant) { printf("%s ->", p->m); q=p->suivant; while(q !=null){ printf(" %s",q->m); q=q->suivant;} } }
Cela me semblerai plus logique mais comme j'ai dis je n'ai jamais utiliser donc ce n'est qu'une supposition.
Stroumpf voici ton algorithme en pseudo code, c'est par la que tu dois commencer vu que tu débutes en algorithmique :
Or Ecrire le reste de la liste s'écrit :
Ensuite pour écrire le mallon après i il faut s'assurer que celui ci existe (en d'autres terme que i n'est pas le dernier maillon ie qu'il a un successeur). Il suffit donc de rajouter un test au préalable. A la fin on a le pseudo code :
Reste juste à décrire ce que signifie attendre la fin de la liste dans nos deux boucles pour. Ca revient simplement à tester si le pointeur vers le maillon suivant n'est pas NULL.
Je n'ai pas vérifié le code mais avec ça tu es proche de ta solution, je te laisse peaufiner la fin.
Bonne chance
Pour chaque maillon i du début à la fin Ecrire le maillon i Ecrire "->" Ecrire le reste de la liste Passer à la ligne Fin pour
Or Ecrire le reste de la liste s'écrit :
Pour chaque maillon de j du maillon après i à la fin Ecrire le maillon j Ecrire " " Fin pour
Ensuite pour écrire le mallon après i il faut s'assurer que celui ci existe (en d'autres terme que i n'est pas le dernier maillon ie qu'il a un successeur). Il suffit donc de rajouter un test au préalable. A la fin on a le pseudo code :
Pour chaque maillon i du début à la fin Ecrire le maillon i Ecrire "->" Si i-> suivant != NULL Pour chaque maillon de j du maillon après i à la fin Ecrire le maillon j Ecrire " " Fin pour Fin si Passer à la ligne Fin pour
Reste juste à décrire ce que signifie attendre la fin de la liste dans nos deux boucles pour. Ca revient simplement à tester si le pointeur vers le maillon suivant n'est pas NULL.
typedef struct maillon{ char *mot; struct maillon * suivant; } maillon_t; typedef maillon * liste_t; void ecrire_maillon(const maillon_t *maillon){ printf("%s",maillon->mot); } void ecrire_liste(const liste_t *pl){ const maillon_t *pmailllon_i,pmaillon_j; for(pmaillon_i = *pl; pmaillon_i->suivant != NULL ; pmaillon_i = pmaillon_i->suivant){ ecrire_maillon(pmaillon_i); printf("->"); if(pmaillon_i->suivant != NULL){ for(pmaillon_j = pmaillon_i->suivant;pmaillon_j->suivant != NULL; pmaillon_j = pmaillon_j->suivant){ ecrire_maillon(pmaillon_i); } } printf("\n"); } }
Je n'ai pas vérifié le code mais avec ça tu es proche de ta solution, je te laisse peaufiner la fin.
Bonne chance
merci Mamiemando,
J'ai deja trouvé une solution qui marche :
regarde :
J'ai deja trouvé une solution qui marche :
regarde :
void GenRA(Liste * l) { Liste *q; float support; for(q=l;q!=NULL;q=q->suivant) { mots *m; for(m=q->m;m!=NULL && m->suivant!=NULL;m=m->suivant) { mots *s; printf("%s ->",m->mot); for(s=m->suivant;s!=NULL;s=s->suivant) printf("%s ",s->mot); printf ("%s", "support"); support=long(q->freq)/float(10); printf("%f", support ); printf("\n"); } } }