Index alphabetique
Fermé
darkkkkk
-
26 mars 2013 à 01:19
omaro5552 Messages postés 19 Date d'inscription jeudi 28 mars 2013 Statut Membre Dernière intervention 23 mars 2014 - 1 avril 2013 à 13:19
omaro5552 Messages postés 19 Date d'inscription jeudi 28 mars 2013 Statut Membre Dernière intervention 23 mars 2014 - 1 avril 2013 à 13:19
9 réponses
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
Modifié par Hxyp le 28/03/2013 à 12:09
Modifié par Hxyp le 28/03/2013 à 12:09
Bonjour,
J'ai l'impression qu'il s'agit de structure car le troisième champ doit contenir un pointeur.
"un tableau de listes où chaque entrée (chaque case du tableau) "
doit être un truc dans le genre la struct index :
"3 ème champs contiendra 1 pointeur vers la liste des mots commençant par (l_deb) et se terminant par l_fin. "
c'est la struct liste_de_mots
Récupérer les mots d'un texte, les trier avec l_deb et l_fin en créant une nouvelle liste de mots dans l'index à chaque fois qu'un mot ne correspond pas à une liste déjà existante, c'est à dire lorsque l_deb et l_fin ne correspondent pas au mot à ajouter le tri/création des listes de mots se fait donc tout seul par ajout ou création d'une nouvelle liste de mot dans l'index. Si un mot est déjà dans une des liste alors on incrément le compteur d'occurrence de celui-ci.
Edit : au final index contient plus de trois champs si on l'utilise en liste chainée alors comme dit dans l'énoncé :
"un tableau de listes"
une modification s'impose :
de cette façon c'est bien un tableau contenant les listes de mots
J'ai l'impression qu'il s'agit de structure car le troisième champ doit contenir un pointeur.
"un tableau de listes où chaque entrée (chaque case du tableau) "
doit être un truc dans le genre la struct index :
struct liste_de_mots{ char *mot; int occurrence_du_mot; struct liste_de_mots *mot_suivant; }; struct index{ char l_deb, l_fin; struct liste_de_mots *pointeur; struct index *index_suivant; };
"3 ème champs contiendra 1 pointeur vers la liste des mots commençant par (l_deb) et se terminant par l_fin. "
c'est la struct liste_de_mots
Récupérer les mots d'un texte, les trier avec l_deb et l_fin en créant une nouvelle liste de mots dans l'index à chaque fois qu'un mot ne correspond pas à une liste déjà existante, c'est à dire lorsque l_deb et l_fin ne correspondent pas au mot à ajouter le tri/création des listes de mots se fait donc tout seul par ajout ou création d'une nouvelle liste de mot dans l'index. Si un mot est déjà dans une des liste alors on incrément le compteur d'occurrence de celui-ci.
Edit : au final index contient plus de trois champs si on l'utilise en liste chainée alors comme dit dans l'énoncé :
"un tableau de listes"
une modification s'impose :
struct liste_de_mots{ char *mot; int occurrence_du_mot; struct liste_de_mots *mot_suivant; }; struct index{ char l_deb, l_fin; struct liste_de_mots *pointeur; }; /* s'utilisera comme ça je présume : */ int main(void){ struct index nindex[20]; /* pour 20 listes de mots, mais ne peut être agrandi comme ça */ return 0; } /* ou alors de cette façon */ int main(void){ struct index *nindex; nindex = malloc(sizeof(struct index)*20); /* pour 20 liste de mots peut être agrandi avec realloc */ if(nindex!=NULL){ /* faire le job */ free(nindex); } else { printf("err alloc"); exit(1); } return 0; }
de cette façon c'est bien un tableau contenant les listes de mots
omaro5552
Messages postés
19
Date d'inscription
jeudi 28 mars 2013
Statut
Membre
Dernière intervention
23 mars 2014
28 mars 2013 à 12:55
28 mars 2013 à 12:55
bnjrr ;hxyp merci pr la reponse mais j'ai pas compris qsq ta fait dans le (main)
int main(void){
struct index *nindex;
nindex = malloc(sizeof(struct index)*20); /* pour 20 liste de mots peut être agrandi avec realloc */
if(nindex!=NULL){
/* faire le job */
free(nindex);
} else { printf("err alloc"); exit(1); }
return 0;
}
int main(void){
struct index *nindex;
nindex = malloc(sizeof(struct index)*20); /* pour 20 liste de mots peut être agrandi avec realloc */
if(nindex!=NULL){
/* faire le job */
free(nindex);
} else { printf("err alloc"); exit(1); }
return 0;
}
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
28 mars 2013 à 13:21
28 mars 2013 à 13:21
struct index *nindex;
déclare un pointeur de type "struct index" pour la création d'un tableau dynamique utilisant la structure index comme type de "case" du tableau
en faisant :
nindex = malloc(sizeof(struct index)*20);
on réquisitionne de la mémoire de la taille du type : "struct index" (sizeof est un opérateur qui permet de récupérer la taille d'un type en bytes) multiplié par 20 pour avoir un tableau de 20 cases de type struct index, on récupère l'adresse du début de ce bloc de mémoire qui nous est retourné dans nindex. Si l'opération échoue la valeur retournée sera NULL ce qui explique le if et le else vu que nindex contiendra soit une adresse soit NULL.
Lorsqu'on a l'adresse retourné par malloc (que nindex!=NULL) on peut alors utiliser nindex comme un tableau static sauf qu'il est dynamique et qu'on peut modifier sa taille avec la fonction realloc, comme ça si le tableau est trop petit on peut l'agrandir, lui donner plus de case sans avoir à modifier le programme et le recompiler.
déclare un pointeur de type "struct index" pour la création d'un tableau dynamique utilisant la structure index comme type de "case" du tableau
en faisant :
nindex = malloc(sizeof(struct index)*20);
on réquisitionne de la mémoire de la taille du type : "struct index" (sizeof est un opérateur qui permet de récupérer la taille d'un type en bytes) multiplié par 20 pour avoir un tableau de 20 cases de type struct index, on récupère l'adresse du début de ce bloc de mémoire qui nous est retourné dans nindex. Si l'opération échoue la valeur retournée sera NULL ce qui explique le if et le else vu que nindex contiendra soit une adresse soit NULL.
Lorsqu'on a l'adresse retourné par malloc (que nindex!=NULL) on peut alors utiliser nindex comme un tableau static sauf qu'il est dynamique et qu'on peut modifier sa taille avec la fonction realloc, comme ça si le tableau est trop petit on peut l'agrandir, lui donner plus de case sans avoir à modifier le programme et le recompiler.
ben merci encore une fois
il reste encore des probleme
comme par exemple pour un texte donné comment faire pour la creation de l'index alphabetique et puis le trier
et l'affichage de l'index crieé
Recherche du nombre d'occurrence d'un mot donné (motDon), sinon (cas ou le mot n'existe pas) rechercher tous les mots qui sont un sous-mot de (motDon) exemple: `format' est un sous mot de `formation'.
et si tu as un tutorial sur les listes chaines c mieux
cordialement
il reste encore des probleme
comme par exemple pour un texte donné comment faire pour la creation de l'index alphabetique et puis le trier
et l'affichage de l'index crieé
Recherche du nombre d'occurrence d'un mot donné (motDon), sinon (cas ou le mot n'existe pas) rechercher tous les mots qui sont un sous-mot de (motDon) exemple: `format' est un sous mot de `formation'.
et si tu as un tutorial sur les listes chaines c mieux
cordialement
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
Modifié par Hxyp le 28/03/2013 à 23:29
Modifié par Hxyp le 28/03/2013 à 23:29
Il y a un tuto sur ccm ici qui pourra surement vous aider https://forums.commentcamarche.net/forum/affich-37604397-liste-simplement-chainee
Pour l'index alphabétique il n'y a pas de tri en fait ça va se faire 'tout seul' à l'ajout d'un mot.
Index est un tableau qui garde des listes de mots en fonction de l_deb et l_fin de ceux-ci.
Il vous suffit alors à l'ajout d'un mot de vérifier en parcourant l'index si l_deb et l_fin correspond, si aucun mot n'a été ajouté avec le même l_deb et l_fin alors on créer une nouvelle entrée dans l'index avec les fameux l_deb et l_fin du mot puis on créer une liste de mot où l'on y ajoute le mot ainsi que l'occurrence de celui-ci à 1,
Si le l_deb et l_fin étaient présent dans l'index pour le mot à ajouter alors on parcourt la liste de mot correspondante et au mot identique s'il existe on incrémente simplement l'occurrence +1, s'il n'existe pas on l'ajoute à la liste et met l'occurrence à 1.
Exemple de diagramme pour les mots "bonjour", "retour", "revoir", "sortir", "servir", "test" :
Si on venait à ajouter encore un "bonjour", en parcourant le tableau index on tomberait sur 'b' et 'r' pour l_deb et l_fin on vérif alors la liste pour voir si elle contient le mot, si oui on incrémente son occurrence qui passerait ici de 1 à 2.
Pour les sous-mots il faudra parcourir l'index en n'utilisant que l_deb vu que l_fin diffère, et faire une comparaison pour chaque mot contenu dans chaque liste ayant le même l_deb, il y a des fonctions dans string.h qui permettent de comparer strncmp je pense que ça fera l'affaire.
Pour la recherche du nombre d'occurrence se sera pareil, parcourt de l'index correspondant avec l_deb et l_fin du mot puis parcourir la liste de mots et une fois le mot trouvé on lit occurrence.
Pour l'affichage de l'index trié c'est à vous de voir index étant un tableau ce ne sera pas difficile d'intervertir les cases' en fonction de l_deb et l_fin effectuer un tri croissant ou décroissant comme pour le tri d'un tableau d'int
Pour l'index alphabétique il n'y a pas de tri en fait ça va se faire 'tout seul' à l'ajout d'un mot.
Index est un tableau qui garde des listes de mots en fonction de l_deb et l_fin de ceux-ci.
Il vous suffit alors à l'ajout d'un mot de vérifier en parcourant l'index si l_deb et l_fin correspond, si aucun mot n'a été ajouté avec le même l_deb et l_fin alors on créer une nouvelle entrée dans l'index avec les fameux l_deb et l_fin du mot puis on créer une liste de mot où l'on y ajoute le mot ainsi que l'occurrence de celui-ci à 1,
Si le l_deb et l_fin étaient présent dans l'index pour le mot à ajouter alors on parcourt la liste de mot correspondante et au mot identique s'il existe on incrémente simplement l'occurrence +1, s'il n'existe pas on l'ajoute à la liste et met l'occurrence à 1.
Exemple de diagramme pour les mots "bonjour", "retour", "revoir", "sortir", "servir", "test" :
index[0] ( b , r ) { bonjour[1] } index[1] ( r , r ) { retour[1] , revoir[1] } index[2] ( s , r ) { sortir[1] , servir[1] } index[3] ( t , t ) { test[1] } // index[case] ( l_deb , l_fin ) { liste_de_mots }
Si on venait à ajouter encore un "bonjour", en parcourant le tableau index on tomberait sur 'b' et 'r' pour l_deb et l_fin on vérif alors la liste pour voir si elle contient le mot, si oui on incrémente son occurrence qui passerait ici de 1 à 2.
Pour les sous-mots il faudra parcourir l'index en n'utilisant que l_deb vu que l_fin diffère, et faire une comparaison pour chaque mot contenu dans chaque liste ayant le même l_deb, il y a des fonctions dans string.h qui permettent de comparer strncmp je pense que ça fera l'affaire.
Pour la recherche du nombre d'occurrence se sera pareil, parcourt de l'index correspondant avec l_deb et l_fin du mot puis parcourir la liste de mots et une fois le mot trouvé on lit occurrence.
Pour l'affichage de l'index trié c'est à vous de voir index étant un tableau ce ne sera pas difficile d'intervertir les cases' en fonction de l_deb et l_fin effectuer un tri croissant ou décroissant comme pour le tri d'un tableau d'int
omaro5552
Messages postés
19
Date d'inscription
jeudi 28 mars 2013
Statut
Membre
Dernière intervention
23 mars 2014
29 mars 2013 à 15:19
29 mars 2013 à 15:19
bonjour
je veut avoire
La fonction qui lie et extrait le 1er et le dernier lettre d'une mot en c?
Comment parcourir l'index alphabetique ?(la fonction)
et merciiiiiiiiiii
je veut avoire
La fonction qui lie et extrait le 1er et le dernier lettre d'une mot en c?
Comment parcourir l'index alphabetique ?(la fonction)
et merciiiiiiiiiii
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
29 mars 2013 à 15:36
29 mars 2013 à 15:36
Bonjour,
En utilisant la fonction strlen de string.h vous pouvez récupérer la taille d'un mot, admettons que le mot soit stocker dans un tableau de char :
tableau[0] retournera le premier caractère du mot
tableau[strlen(tableau)-1] retournera le dernier caractère
Pour parcourir l'index comme c'est un tableau il faut utiliser sa taille et une boucle :
En utilisant la fonction strlen de string.h vous pouvez récupérer la taille d'un mot, admettons que le mot soit stocker dans un tableau de char :
tableau[0] retournera le premier caractère du mot
tableau[strlen(tableau)-1] retournera le dernier caractère
Pour parcourir l'index comme c'est un tableau il faut utiliser sa taille et une boucle :
int i; for(i=0;i<taille_index;i++){ /* index[i] */ }
omaro5552
Messages postés
19
Date d'inscription
jeudi 28 mars 2013
Statut
Membre
Dernière intervention
23 mars 2014
29 mars 2013 à 15:53
29 mars 2013 à 15:53
j'ai pas bien compris la fonction strlen donne moi comment l'ecrir le programme
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
30 mars 2013 à 07:28
30 mars 2013 à 07:28
#include <stdio.h> #include <string.h> int main(void){ char *test = "tester"; printf("l_deb: %c l_fin: %c",test[0],test[strlen(test)-1]); return 0; }
merci
et comment remplir le tableaux d'index(structure) ?(programme )
et me reste un souci ?comment recuperer tous les mot d'un texte
parceque le but d'exercice c entrer un texte et apres travailler sur ces mot (recuperer 1_deb et 1_fin) et merci d'avance
et comment remplir le tableaux d'index(structure) ?(programme )
et me reste un souci ?comment recuperer tous les mot d'un texte
parceque le but d'exercice c entrer un texte et apres travailler sur ces mot (recuperer 1_deb et 1_fin) et merci d'avance
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
30 mars 2013 à 21:53
30 mars 2013 à 21:53
La récupération des mots peut être faite d'une tonne de manières, on sait qu'un texte est composé de caractères, qu'il y a des caractères qui délimitent les mots tel que : espace, virgule, saut de ligne, tabulation, guillemet, exclamation, interrogation, point etc en bref tout ce qui n'est pas une suite de caractère alpha numérique ne sont pas des mots. Mais dans vôtre cas uniquement les caractères alphabétique sont utiles.
Alors vous avez la possibilité d'extraire les mots en récupérant et vérifiant chaque caractère du texte, la vérification peut être en comparant avec les caractères délimiteurs ou en comparant avec les caractères alphabétique. A vous de choisir la façon de faire.
Niveau code dans le cas où l'on utiliserait uniquement le délimiteur espace pour trouver les mots :
J'ai déjà parler de la façon de remplir l'index, avant tout faites des projets tests. Pour comprendre l'index vous pouvez créer un tableau dynamique utilisant les int : int *tableau; allouer sa mémoire avec malloc, le remplir, augmenter sa taille avec realloc. Une fois que vous aurez assimiler comment tout ça fonctionne passez aux listes chainées pour faire des listes de mots une fois assimiler ça aussi vous pourrez combinez les deux et comprendre le tout.
Alors vous avez la possibilité d'extraire les mots en récupérant et vérifiant chaque caractère du texte, la vérification peut être en comparant avec les caractères délimiteurs ou en comparant avec les caractères alphabétique. A vous de choisir la façon de faire.
Niveau code dans le cas où l'on utiliserait uniquement le délimiteur espace pour trouver les mots :
char *text="un deux trois quatre"; int i; for(i=0;i<(int)strlen(text);i++){ if(text[i]==' ') printf("\n"); else printf("%c",text[i]); }
J'ai déjà parler de la façon de remplir l'index, avant tout faites des projets tests. Pour comprendre l'index vous pouvez créer un tableau dynamique utilisant les int : int *tableau; allouer sa mémoire avec malloc, le remplir, augmenter sa taille avec realloc. Une fois que vous aurez assimiler comment tout ça fonctionne passez aux listes chainées pour faire des listes de mots une fois assimiler ça aussi vous pourrez combinez les deux et comprendre le tout.
omaro5552
Messages postés
19
Date d'inscription
jeudi 28 mars 2013
Statut
Membre
Dernière intervention
23 mars 2014
30 mars 2013 à 22:31
30 mars 2013 à 22:31
j'ai bien compris comment remplir l'index
j'ai essaille par exemeple comme je recupere la 1ere lettre d'une mottt j voulais la mettre dans l'index(exactemeent a 1_debut)
j'ai faitt
nindex.(1_deb)=f
tellque f est un variable qui contient la 1er lettre d'une mot
j'ai essaille par exemeple comme je recupere la 1ere lettre d'une mottt j voulais la mettre dans l'index(exactemeent a 1_debut)
j'ai faitt
nindex.(1_deb)=f
tellque f est un variable qui contient la 1er lettre d'une mot
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
30 mars 2013 à 23:30
30 mars 2013 à 23:30
nindex est un tableau vous pouvez utiliser les crochets [ ] pour préciser l'emplacement.
Par exemple pour le premier emplacement dans le tableau :
nindex[0].l_deb = f;
Par exemple pour le premier emplacement dans le tableau :
nindex[0].l_deb = f;
omaro5552
Messages postés
19
Date d'inscription
jeudi 28 mars 2013
Statut
Membre
Dernière intervention
23 mars 2014
31 mars 2013 à 14:26
31 mars 2013 à 14:26
et pour le pointeurrr vers la listes_chaines ......comment le remplirrrrrrrrrrrrrrrr
pr regler le probleme je veut le programme pour remplir tous l'index alphabetique et merci d'avance
pr regler le probleme je veut le programme pour remplir tous l'index alphabetique et merci d'avance
omaro5552
Messages postés
19
Date d'inscription
jeudi 28 mars 2013
Statut
Membre
Dernière intervention
23 mars 2014
1 avril 2013 à 13:19
1 avril 2013 à 13:19
une reponse svp
omaro5552
Messages postés
19
Date d'inscription
jeudi 28 mars 2013
Statut
Membre
Dernière intervention
23 mars 2014
31 mars 2013 à 18:48
31 mars 2013 à 18:48
et pour le pointeurrr vers la listes_chaines ......comment le remplirrrrrrrrrrrrrrrr
pr regler le probleme je veut le programme pour remplir tous l'index alphabetique et merci d'avance
pr regler le probleme je veut le programme pour remplir tous l'index alphabetique et merci d'avance