[c] bloquée sur cette fonction
Résolu/Fermé
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
-
24 juil. 2008 à 19:59
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 26 juil. 2008 à 01:13
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 26 juil. 2008 à 01:13
A voir également:
- [c] bloquée sur cette fonction
- Fonction si et - Guide
- Boite gmail bloquée - Guide
- Souris tactile bloquée - Guide
- Fonction moyenne excel - Guide
- Fonction somme excel - Guide
3 réponses
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 811
26 juil. 2008 à 01:13
26 juil. 2008 à 01:13
Tu vois que tu n'as plus besoin de nous ^^
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 811
25 juil. 2008 à 09:49
25 juil. 2008 à 09:49
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 ?
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
25 juil. 2008 à 12:52
25 juil. 2008 à 12:52
void GenRA(Liste * l) { Liste *p; Liste *q; for(p=l;p!=NULL;p=p->suivant) { printf("%s ->", p->m); for (q=p->suivant; q!=NULL; q++) { printf("%s",q->m); } } }
EXP:
liste initiale : bonjour les amis
bonjour->les amis
les->amis
mich62120
Messages postés
631
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 janvier 2010
6
>
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
25 juil. 2008 à 13:17
25 juil. 2008 à 13:17
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.
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 811
25 juil. 2008 à 21:41
25 juil. 2008 à 21:41
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
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
25 juil. 2008 à 22:06
25 juil. 2008 à 22:06
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"); } } }