| 27 | |
| 28 | = Travail demandé = |
| 29 | |
| 30 | * Vous devez commencer par copier sur votre compte le répertoire : |
| 31 | {{{cp -rp /users/enseig/encadr/cao/tme2 ~/cao/tme2}}} |
| 32 | * Ce répertoire contient un programme utilisant une table de hachage. |
| 33 | * Le travail consiste: |
| 34 | 1. à répondre aux questions portant sur le code fourni. Les questions sont sur cette page. Vous rédigerez un compte rendu informatique pour vous même avec les réponses. |
| 35 | 2. à programmer des évolutions du programme: |
| 36 | * L'évaluation sera individuelle et orale au début du tme3. |
| 37 | * Commencez par lire le programme en entier et faîtes le tourner pour comprendre son fonctionnement. |
| 38 | * Répondez ensuite aux questions et faîtes les évolutions demandées. |
| 39 | |
| 40 | = Evolution du programme = |
| 41 | |
| 42 | Le programme fourni compte le nombre de mots d'un fichier texte et indique le nombre de mots présents et le nombre de mots différents. |
| 43 | Votre programme devra indiquer pour chaque mot: |
| 44 | * le nombre d'occurences |
| 45 | * les numéros de lignes où il est présent |
| 46 | |
| 47 | Vous donnerez également des statistiques sur l'usage des tables de hachage: |
| 48 | * taux de remplissage. |
| 49 | * moyenne du nombre de comparaisons nécessaire lors de la recherche d'un mot |
| 50 | |
| 51 | = Description des sources fournies = |
| 52 | |
| 53 | * {{{Makefile .......................}}} description du processus de construction de l'exécutable. |
| 54 | * {{{main.c, main.h .................}}} programme principal source et déclaration. |
| 55 | * {{{count.c, count.h ...............}}} algorithme de parcours d'un fichier texte en vue de comptage. |
| 56 | * {{{hte.c, hte.h ...................}}} fonction de création des tables de hachage et déclaration de toutes fonctions de gestion. |
| 57 | * {{{dico.c, dejavu.c, namealloc.c ..}}} fonctions de gestion des tables pour trois types d'usage |
| 58 | * {{{man1/tool.1 ....................}}} fichier au format man |
| 59 | |
| 60 | = Questions = |
| 61 | |
| 62 | == Le Makefile == |
| 63 | |
| 64 | 1. Completez la liste des dépendances lignes 24 à 28 |
| 65 | 1. Réécrivez les commandes en utilisant les variables automatiques : {{{$@ $< $^}}} |
| 66 | * {{{$@}}} : désigne la cible d'une règle |
| 67 | * {{{$<}}} : désigne le premier fichier de la liste des sources d'une règle |
| 68 | * {{{$^}}} : désigne la liste des sources d'une règle |
| 69 | 1. Donnez une raison à la definition des commandes et parametres au début du Makefile |
| 70 | 1. A quoi servent les options -p, -g, -wall, -werror, -ansi |
| 71 | 1. Comment demander l'optimisation maximale du compilateur |
| 72 | 1. L'option -p est présente dans LDFLAGS et CFLAGS, pourquoi n'est-ce pas le cas de -g |
| 73 | 1. Que fait la regle indent ? quelle est la signification des flags utilisés par le programme indent? |
| 74 | |
| 75 | {{{ |
| 76 | 1 # Definition des commandes |
| 77 | 2 CC = gcc |
| 78 | 3 AR = ar |
| 79 | 4 RM = rm |
| 80 | 5 INDENT = indent |
| 81 | 6 |
| 82 | 7 # Definition des parametres |
| 83 | 8 LDFLAGS = -p |
| 84 | 9 CFLAGS = -g -p -Wall -ansi -Werror |
| 85 | 10 ARFLAGS = -r |
| 86 | 11 IDFLAGS = -gnu -bli0 -npsl -l90 |
| 87 | 12 |
| 88 | 13 # Definition de la liste des librairies necesaires a l'edition de lien |
| 89 | 14 LDLIBS = -L. -lhte |
| 90 | 15 |
| 91 | 16 .PHONY: all clean realclean |
| 92 | 17 |
| 93 | 18 stat : main.o count.o libhte.a |
| 94 | 19 $(CC) $(LDFLAGS) main.o count.o -o stat $(LDLIBS) |
| 95 | 20 |
| 96 | 21 libhte.a : hte.o dico.o dejavu.o namealloc.o |
| 97 | 22 $(AR) $(ARFLAGS) libhte.a hte.o dico.o dejavu.o namealloc.o |
| 98 | 23 |
| 99 | 24 main.o: |
| 100 | 25 count.o: |
| 101 | 26 hte.o: |
| 102 | 27 dejavu.o: |
| 103 | 28 namealloc.o: |
| 104 | 29 |
| 105 | 30 all: clean stat |
| 106 | 31 |
| 107 | 32 clean: |
| 108 | 33 $(RM) *.o *.a *.out *~ 2> /dev/null || true |
| 109 | 34 |
| 110 | 35 realclean: clean |
| 111 | 36 $(RM) stat 2> /dev/null || true |
| 112 | 37 |
| 113 | 38 indent: |
| 114 | 39 $(INDENT) $(IDFLAGS) *.c *.h |
| 115 | }}} |