Affichage du conntenu d'une liste chainée C
Fermé
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
-
2 juil. 2008 à 15:33
stroumpf Messages postés 289 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 1 mars 2009 - 2 juil. 2008 à 23:44
stroumpf Messages postés 289 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 1 mars 2009 - 2 juil. 2008 à 23:44
A voir également:
- Affichage d'une liste chainée en c
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Liste de diffusion whatsapp - Guide
- Gertrude a préparé la liste des affaires à prendre pour l'excursion. juliette a modifié cette liste en utilisant le mode suivi des modifications proposé par le traitement de texte. - Guide
- Triez la liste comme sur cette illustration (attention, on ne voit que le début …). quel est le mot formé par les 6 dernières lettres de la colonne code ? - Forum Excel
4 réponses
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
2 juil. 2008 à 17:46
2 juil. 2008 à 17:46
int main() { FILE *F; char mot[100]; int i; unsigned int cle,pt; int nl, pos; nl=pos=1; char c; int seuil; Liste **L; Liste **TableHash; TableHash = (Liste **) malloc (TAILLEHASH * sizeof(Liste *)); for(i=0;i<TAILLEHASH;++i) TableHash[i] = NULL; pt=hash_cle("."); //printf("%d",pt); printf("debut du programme \n----------------------------------\n"); F=fopen("C:\\Documents and Settings\\siril\\Bureau\\projet\\text.txt","r"); while(fscanf(F,"%s",mot)==1){ cle = hash_cle(mot); if ((cle!=pt ) && (! ChercherMotDansTableHash(TableHash,mot))) TableHash[cle] = InsertionEnTete(TableHash[cle],mot); } fclose(F ); F=fopen("C:\\Documents and Settings\\siril\\Bureau\\projet\\text.txt","r"); PosLigne(F,TableHash); //filtrage printf("\nla liste filtre :\n----------------------------------\n"); FiltreListe(TableHash,2); AfficherTableHash(TableHash); //géneration des 2seq Liste *seq=NULL; Generer2seq(TableHash, 2, &seq); printf("\nla liste des 2seq :\n----------------------------------\n"); AfficherListe(seq); scanf("%c",c); return 0; } void AfficherListe(Liste *L){ Liste *p; for(p=L;p!=NULL;p=p->suivant){ AfficheMot(p->mot); AfficherCoordonnees(p->c); } } void AfficheMot(char *mot){ printf("%s ",mot); }
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
2 juil. 2008 à 22:54
2 juil. 2008 à 22:54
Salut,
affiche le code complet puisque j'ai oublié
et aussi le fichier sur lequel tu testes
merci
affiche le code complet puisque j'ai oublié
et aussi le fichier sur lequel tu testes
merci
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
2 juil. 2008 à 23:10
2 juil. 2008 à 23:10
POSTMOT.c
table_hash.h
fichier texte
Support for RTSP authentication
Support for adding subtitles on the fly
Fixed MPEG-PS duration calculation
ATSC support for DVB input
Partial reading support for DVR-ms recordings
Partial reading support for MXF and GXF fileformat
Improved support for Flash Video files
ctout
#include<stdio.h> #include<stdlib.h> #include<string.h> #include "table_hash.h" #define TAILLEHASH 307 int main() { FILE *F; char mot[100]; int i; unsigned int cle,pt; int nl, pos; nl=pos=1; char c; int seuil; Liste **L; Liste **TableHash; TableHash = (Liste **) malloc (TAILLEHASH * sizeof(Liste *)); for(i=0;i<TAILLEHASH;++i) TableHash[i] = NULL; pt=hash_cle("."); //printf("%d",pt); printf("debut du programme \n----------------------------------\n"); F=fopen("C:\\Documents and Settings\\siril\\Bureau\\projetcyrine\\text.txt","r"); while(fscanf(F,"%s",mot)==1){ cle = hash_cle(mot); if ((cle!=pt ) && (! ChercherMotDansTableHash(TableHash,mot))) TableHash[cle] = InsertionEnTete(TableHash[cle],mot); } fclose(F ); F=fopen("C:\\Documents and Settings\\siril\\Bureau\\projetcyrine\\text.txt","r"); PosLigne(F,TableHash); //filtrage printf("\nla liste filtre :\n----------------------------------\n"); FiltreListe(TableHash,2); AfficherTableHash(TableHash); //géneration des 2seq Liste *seq=NULL; Generer2seq(TableHash, 2, &seq); printf("\nla liste des 2seq :\n----------------------------------\n"); AfficherListe(seq); //printf("Chercher mot : "); //scanf("%s",mot); //if(cle = ChercherMotDansTableHash(TableHash,mot)) // printf("%s existant dans le conteneur %u\n",mot,hash_cle(mot)); //else // printf("%s inexistant dans la table de hash\n"); scanf("%c",c); return 0; } void ParcourirElementTableHash(Liste **TableHash,char *mot){ int cle; Liste *p; cle = hash_cle(mot); for(p=TableHash[cle];p!=NULL;p=p->suivant) if(strcmp(mot,p->mot) == 0){ printf("%s : ",mot); AfficherCoordonnees(p->c); } } Liste *InsertionEnTete(Liste *L,char *mot){ Liste *nouveau; nouveau = (Liste *) malloc (sizeof(Liste)); strcpy(nouveau->mot,mot); nouveau->suivant = L; nouveau->c = NULL; return nouveau; } Coordonnees *InsertionEnTeteCoordonnee(Coordonnees *C,int nl ,int pos){ Coordonnees *nouveau; nouveau = (Coordonnees *) malloc (sizeof(Coordonnees)); nouveau->pos = pos; nouveau->nl = nl; nouveau->suivant = C; return nouveau; } void AfficherListe(Liste *L){ Liste *p; for(p=L;p!=NULL;p=p->suivant){ AfficheMot(p->mot); AfficherCoordonnees(p->c); } } void AfficherCoordonnees(Coordonnees *C){ Coordonnees *p; for(p=C;p!=NULL;p=p->suivant) printf(" (%d,%d) ",p->nl,p->pos); printf("\n"); } void AfficheMot(char *mot){ printf("%s ",mot," "); } unsigned int hash_cle(char *mot){ unsigned int val = 0; for(;*mot!='\0';++mot) val = *mot + 31 * val; return val % TAILLEHASH; } void AfficherTableHash(Liste **TableHash){ int i; for(i=0;i<TAILLEHASH;++i) if(TableHash[i] != NULL){ printf("Conteneur %d \n",i); AfficherListe(TableHash[i]); printf("----------------------------------\n"); } } unsigned int ChercherMotDansTableHash(Liste **TableHash,char *mot){ Liste *p; unsigned int cle; cle = hash_cle(mot); for(p=TableHash[cle];p!=NULL;p=p->suivant) if(strcmp(p->mot,mot)==0) return 1; return 0; } void FiltreListe(Liste **TableHash, int seuil){ Liste *p ,*last; Coordonnees *c; int i,supp=0,nb=0; for(i=0;i<TAILLEHASH;++i) if(TableHash[i] != NULL){ nb=0; last=TableHash[i]; for(p=TableHash[i];p!=NULL;p=p->suivant){ supp=0; nb++; for(c=p->c;c!=NULL;c=c->suivant) supp++; if( supp <seuil){ // mot n'est pas frequent if (last==p) // cas du première mot { TableHash[i]=p->suivant; last=p->suivant; } else last->suivant=p->suivant; nb--; }else last=p; } if (nb==0) TableHash[i] = NULL; } } void Generer2seq(Liste **TableHash, int seuil, Liste **seq){ Liste *p1, *p2, *ss,*t; Coordonnees *c1,*c2; int i,j,supp1=0,supp2=0,nb=0; char s1[50], s2[50],*t1,*t2; ss=*seq; printf("\nconstruction des 2seq \n---------------\n"); for(i=0;i<TAILLEHASH;++i) if(TableHash[i] != NULL) for(p1=TableHash[i];p1!=NULL;p1=p1->suivant) for(j=i;j<TAILLEHASH;++j) if(TableHash[j] != NULL){ if (j==i) t=p1; else t=TableHash[j]; for(p2=t;p2!=NULL;p2=p2->suivant){ if (strcmp(p1->mot,p2->mot)!=0){ // si 2 mots differents trouvés Liste *tmp1=NULL, *tmp2=NULL; strcpy(s1,p1->mot); strcpy(s2,p2->mot); t1=strcat(s1,p2->mot); t2=strcat(s2,p1->mot); tmp1=InsertionEnTete(tmp1,s1); tmp2=InsertionEnTete(tmp2,s2); printf("creation TMP1 et TMP2 : %s ,%s\n",s1,s2); supp1=0;supp2=0; for(c1=p1->c;c1!=NULL;c1=c1->suivant) // calcule de supp for(c2=p2->c;c2!=NULL;c2=c2->suivant){ if (c1->nl == c2->nl){ if(c1->pos < c2->pos){ tmp1->c=InsertionEnTeteCoordonnee(tmp1->c,c1->nl ,c2->pos); supp1++; } else{ tmp2->c=InsertionEnTeteCoordonnee(tmp2->c,c1->nl ,c1->pos); supp2++; } } } // fin calcul supp if(supp1>=seuil){ //printf("%d ",supp1); if (*seq==NULL) *seq=tmp1; else ss->suivant=tmp1; ss=tmp1; //printf("%s : OK1\n",tmp1->mot); } if(supp2>=seuil){ //printf("%d ",supp2); if (*seq==NULL) *seq=tmp2; else ss->suivant=tmp2; ss=tmp2; //printf("%s : OK2\n",tmp2->mot); } } // fin de traitement des mot //printf("fin"); } } printf("////fin calcule 2seq\n"); } void PosLigne(FILE *F,Liste **TableHash){ char s[50]; int nl,pos,i; Liste *p; nl=pos=1; while(fscanf(F,"%s",s)==1){ for(i=0;i<TAILLEHASH;++i) if(TableHash[i]!=NULL) for(p=TableHash[i];p!=NULL;p=p->suivant) if(strcmp(p->mot,s)==0) p->c=InsertionEnTeteCoordonnee(p->c,nl ,pos); if(fgetc(F)=='\n'){ ++nl; pos=0; } ++pos; } printf("\n"); }
table_hash.h
#ifndef TABLE_HASH #define TABLE_HASH typedef struct c{ int pos; int nl; struct c *suivant; }Coordonnees; typedef struct L{ char mot[50]; Coordonnees *c; struct L *suivant; }Liste; Liste *InsertionEnTete(Liste *L,char *mot); Coordonnees *InsertionEnTeteCoordonnee(Coordonnees *C,int nl,int pos); void AfficherListe(Liste *L); void AfficherCoordonnees(Coordonnees *C); void AfficheMot(char *mot); unsigned int hash_cle(char *mot); void AfficherTableHash(Liste **TableHash); unsigned int ChercherMotDansTableHash(Liste **TableHash,char *mot); void PosLigne(FILE *F,Liste **TableHash); void frequent( Liste **TableHash , int mc); void ParcourirElementTableHash(Liste **TableHash,char *mot); void FiltreListe(Liste **L, int seuil); void Generer2seq(Liste **TableHash, int seuil, Liste **seq); #endif
fichier texte
Support for RTSP authentication
Support for adding subtitles on the fly
Fixed MPEG-PS duration calculation
ATSC support for DVB input
Partial reading support for DVR-ms recordings
Partial reading support for MXF and GXF fileformat
Improved support for Flash Video files
ctout
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
2 juil. 2008 à 23:28
2 juil. 2008 à 23:28
Le problème c'est ta fonction Generer2seq
Par exemple Supportfor et enregistrer comme un mot et pas deux
Je vois que tu as compliquer beaucoup ce que a déjà été fait.
J'ai mis un ; juste pour voir s'il y a un problème de séparation. Et non, le problème viens de ta fonction.
Par exemple Supportfor et enregistrer comme un mot et pas deux
Je vois que tu as compliquer beaucoup ce que a déjà été fait.
J'ai mis un ; juste pour voir s'il y a un problème de séparation. Et non, le problème viens de ta fonction.
debut du programme ---------------------------------- la liste filtre : ---------------------------------- Conteneur 17 Support ; (2,1) (1,1) ---------------------------------- Conteneur 95 reading ; (6,2) (5,2) ---------------------------------- Conteneur 133 Partial ; (6,1) (5,1) ---------------------------------- Conteneur 205 support ; (7,2) (6,3) (5,3) (4,2) ---------------------------------- Conteneur 267 for ; (7,3) (6,4) (5,4) (4,3) (2,2) (1,2) ---------------------------------- construction des 2seq --------------- creation TMP1 et TMP2 : Supportreading ,readingSupport creation TMP1 et TMP2 : SupportPartial ,PartialSupport creation TMP1 et TMP2 : Supportsupport ,supportSupport creation TMP1 et TMP2 : Supportfor ,forSupport creation TMP1 et TMP2 : readingPartial ,Partialreading creation TMP1 et TMP2 : readingsupport ,supportreading creation TMP1 et TMP2 : readingfor ,forreading creation TMP1 et TMP2 : Partialsupport ,supportPartial creation TMP1 et TMP2 : Partialfor ,forPartial creation TMP1 et TMP2 : supportfor ,forsupport ////fin calcule 2seq la liste des 2seq : ---------------------------------- Supportfor ; (1,2) (2,2) Partialreading ; (5,2) (6,2) readingsupport ; (5,3) (6,3) readingfor ; (5,4) (6,4) Partialsupport ; (5,3) (6,3) Partialfor ; (5,4) (6,4) supportfor ; (4,3) (5,4) (6,4) (7,3)
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
2 juil. 2008 à 23:38
2 juil. 2008 à 23:38
merci Lami
ta une idée comment faire stp?
ta une idée comment faire stp?
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
>
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2 juil. 2008 à 23:40
2 juil. 2008 à 23:40
Ben, tu reprends ta fonction et tu vois où ça coince.
Je n'ai vraiment pas le temps pour regarder.
Peut être dans week-end.
Je suis très occupé ce dernier temps au boulot.
Je n'ai vraiment pas le temps pour regarder.
Peut être dans week-end.
Je suis très occupé ce dernier temps au boulot.
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
2 juil. 2008 à 23:44
2 juil. 2008 à 23:44
ok merci :)
2 juil. 2008 à 19:48