Contrôle Final 2 – Année 2020/2021
- Durée du contrôle : 2h
- Tous les documents sont autorisés
- Les exercices sont indépendants.
Pour commencer, téléchargez l'archive se trouvant ici puis décompressez-la avec la commande suivante :
Dans la suite du contrôle, vous devez travailler dans le répertoire csc4103-cf2.
En vue du rendu, après vous être placé dans le répertoire parent de csc4103-cf2, vous devez créer une archive de vos fichiers grâce à la commande :
L'archive générée csc4103-cf2-rendu.tar.xz est ensuite à déposer dans Moodle.
Mise en œuvre d'une hashmap - la suite (10 points)
Dans le répertoire exo1/, vous trouverez plusieurs fichiers :
- hashmap.h définit l'interface d'une hashmap,
- hashmap.c implémente la hashmap,
- test_hashmap.c permet de tester l'implémentation de cette hashmap,
- le Makefile associé.
Pour rappel, une hashmap est une structure de données qui associe une clé à une valeur. Ce type de structure de données est fréquemment utilisé pour indexer des bases de données ou pour mettre en cache des données.
Dans notre mise en œuvre, la clé (une chaîne de caractères) est hachée par la fonction uint32_t hash(K key). Le hash obtenu identifie la case du tableau entries dans laquelle est stockée la valeur.
Comme plusieurs clés peuvent avoir le même hash, chaque case du tableau entries contient une liste chaînée d'éléments de type struct hashmap_entry_t dont les clés ont toutes le même hash.
Les opérations de base permettant de manipuler la hashmap vous sont données, à savoir : l'initialisation/destruction et les accesseurs put/get.
3 points
4 points
3 points
Décompte participatif (10 points)
On veut connaître le nombre total de lignes d'un ensemble de fichiers texte.
Dans le répértoire exo2, se trouvent :
- decompte_global.c, le squelette du code du programme principal;
- decompte_local.c, le squelette du code d'un programme secondaire décrit un peu plus tard;
- des fichiers de données fichierx, x allant de 0 à 9;
- un fichier fichiers.txt inventoriant le chemin vers ces fichiers de données;
- un Makefile.
Le programme principal decompte_global distribue les fichiers du fichier fichiers.txt à un ensemble de processus fils decompte_local auxquels il sous-traite le décompte des lignes des fichiers leur étant assignés. Le nombre de ces processus fils est donné en paramètre de decompte_global. Une fois les décomptes locaux achevés, le processus decompte_global accumule les résultats intermédiaires pour obtenir le nombre de lignes global.
1 point
3 points
Les processus fils decompte_local lancés, nous passons au fichier decompte_local.c. Le code du programme vous y est massivement donné. Lisez-le attentivement afin de comprendre ce qui est réalisé.