:: Enseignements :: ESIPE :: E3INFO :: 2014-2015 :: Algorithmique ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Listes chaînées triées |
Le but de ce TP est de manipuler les listes chaînées triées de mots.
Les définitions de type suivantes permettent de représenter une liste
chaînée triée de mots :
Vous trouvez dans la librairie
<string.h>, des fonctions
permettant de faire des opérations sur des chaînes de caractères :
les comparer, les copier, etc.
Exercice 1 - Listes triées de mots
Écrire les fonctions
-
Cellule *allouerCellule(char mot[]) qui alloue l'espace mémoire
nécessaire pour une nouvelle cellule et retourne l'adresse de cette
nouvelle cellule. La fonction doit allouer la place nécessaire pour
le mot (le caractère '\0' de terminaison inclus) et
initialiser le champ mot, le champ occurrence
signifiant qu'il n'y a qu'une occurrence et le champ suivant
à NULL.
S'il n'y a plus de place disponible, la fonction renvoie la valeur NULL ;
-
int insererAPlace(Lexique *lex, char mot[]) qui insère
la valeur mot dans le lexique *lex.
Si le mot apparaît déjà dans la liste, vous devrez incrémenter le
champ occurrence.
La fonction renvoie 0 en cas de problème et 1 sinon ;
-
void afficherLexique(Lexique lex) qui affiche dans l'ordre
alphabétique le lexique lex ;
-
Cellule *rechercher(Lexique lex, char mot[]) qui renvoie
l'adresse de la cellule contenant le mot mot.
La fonction renvoie NULL
si le mot n'est pas présent dans le lexique lex ;
-
int nbOccMot(Lexique lex, char mot[]) qui renvoie le nombre
d'occurrences du mot mot dans le lexique lex ;
-
void libererLexique(Lexique *lex) qui libère tout l'espace
mémoire occupé par le lexique *lex.
Exercice 2 - Manipulations de fichiers
Pour ouvrir et fermer des fichiers en
C, on utilise les deux
fonctions
fopen et
fclose de la librairie
<stdio.h> :
Le paramètre
mode de la fonction
fopen détermine si
on ouvre le fichier pour la lecture (
"r") ou pour l'écriture
(
"w").
La fonction renvoie un pointeur
FILE * qui
représente le fichier, ou
NULL en cas d'erreur.
Ensuite, on se sert de ce pointeur pour lire ou écrire en utilisant
fscanf et
fprintf qui fonctionnent comme
scanf
et
printf mais qui prennent en premier argument le pointeur
du fichier.
Écrire les deux fonctions suivantes :
-
int lireTexte(FILE *entree, Lexique *lex) qui lit les mots
d'un fichier de texte entree et qui construit le lexique.
Cette fonction retournera 0
en cas de problème et 1 sinon.
-
void sauvegarderLexique(FILE *sortie, Lexique lex) qui
sauvegarde le lexique dans le fichier sortie.
Chaque ligne du fichier sortie
devra contenir le mot suivi du nombre d'occurrences séparés par un
espace.
Exercice 3 - La fonction principale
Écrire une fonction main qui permet de tester toutes ces fonctions.
Les noms des fichiers pour la lecture du texte et la sauvegarde du lexique
devront être transmis sur la ligne de commande. Les tests nécessaires à
l'ouverture des fichiers devront être faits dans la fonction principale.
Exercice 4 - Les positions des mots dans le texte (facultatif)
Modifier la structure et les fonctions précédentes afin d'enregistrer, via
une liste chaînée d'entiers pour chaque mot, les positions de ce mot dans
le texte.
© Université de Marne-la-Vallée