Modèle de départ pour les exercices de synthèse du cours.
Ces intructions présupposent que vous avez déjà suivi les instructions du zérotième exercice pour la création d'un compte GitHub et l'installation des programmes et extensions nécéssaires.
suivez les mêmes instructions de travail que pour l'exercice précédent.
En C++, vous aurez accès au ficher d'en-tête <algorithm>
.
Ce fichier contient des fonctions telles que «chercher», «compter», «trier», etc.
Ces fonctions sont implémentées de telle sorte, leurs paramètres étant des itérateurs, qu'elles puissent opérer sur n'importe quel type de structure de donnée comme vector<>
, list<>
, stack<>
, etc. et sur n'importe quel type de données comme list<int>
, list<float>
, list<char[32]>
, etc.
Ces justement l'abstraction qu'offre les itérateurs qui permet de décupler l'utilité de ces fonctions.
En effet, ces fonctions ne sont implémentées qu'une seule fois et non pas une fois pour chaque type de données !
Cet exercice vous propose de plonger dans ce petit univers des fonctions génériques et d'implémenter quelques unes de ces fonctions.
Pour commencer, le programme de test de cet exercice a tous ses tests commentés.
Il vous faudra les décommenter à mesure qui vous implémenterez les fonctionalités des bibliothèques libalgorithm
, libdb
, libfunctions
et libvector
.
Vous devrez :
- Modifier l'URL en tête de ce document
README.md
pour refléter l'URL de votre dépôt.- L'URL doit ressembler à
https://github.com/[nom-de-votre-compte]/[nom-de-votre-depot]/workflows/Run%20tests/badge.svg
. - Cet URL présente un «badge» qui réflete l'état de santé de votre dépôt.
- L'URL doit ressembler à
- Compléter le fichier
makefile
:- Compléter les cibles déjà définies.
- La cible
check
doit dépendre de la ciblebuild/test
et doit lancer le programme de test. - Il est impératifs que les cibles
build/test
etcheck
soient définies pour la bonne exécution de cet exercice.
- La cible
- Ajouter d'autres cibles à votre guise.
- Compléter les cibles déjà définies.
- Implémenter correctement toutes les fonctions des bibliothèques logicielles
libalgorithm
,libdb
,libfunctions
etlibvector
pour que le programmebuild/test
affiche que tous les tests passent et retourne0
à l'invite de commande.
Pour cet exercice, suivez les mêmes instructions de travail que pour l'exercice précédent.
- De modifier le fichier
README.md
pour modifier l'URL du badge en en-tête. - De modifier le fichier
makefile
pour compiler et lier les cibles prédéfinies et ajouter d'autres cibles si nécessaire. - De reprendre les fichier
lib/vector_types.h
etlib/vector_api.c
de votre exercice précédent. - De modifier les fichiers
lib/algorithm.c
,lib/db.c
etlib/functions.c
afin d'implémenter les fonctions qu'il contiennent. - De modifier le fichier
test/main.c
pour activer (décommenter) le plus de tests possible.
- De modifier les fichiers d'en-tête
lib/algorithm.h
,lib/db.h
,lib/functions.h
,lib/vector.h
etlib/vector_api.h
. - D'utiliser
goto
et d'avoir des «boucles infinies» du stylewhile(1)
. Pourquoi ? La réponse est ici.
- Votre code doit réussir 100% des tests activés (décommentés), même si ce n'est pas l'entièreté des tests, avant d'être intégré dans la branche
master
. - Le badge apparaissant tout en haut de ce document doit afficher
passing
.
L'évaluation portera sur :
- Le suivi des instructions de travail.
- Je dois voir des contributions à la base de code par tous les membres de votre groupe.
- Le nombre de tests réussis.
- Vos fichiers
lib/algorithm.c
,lib/db.c
,lib/functions.c
,lib/vector_types.h
etlib/vector_api.c
seront compilés et liés avec les fichiers d'en-tête correspondants intacts et avec le fichiertest/main.c
ayant tous ses tests activés (décommentés).
- Vos fichiers
- La qualité des modifications apportées.
Attention !
Seul le code de la branche master
de votre dépôt commun sur GitHub compte !
Voyez les indications données dans le premier exercice à ce sujet.
Un excellent outil disponible pour Linux est valgrind
.
En autres choses, valgrind
peut faire une analyse de possibles erreurs de mémoires de notre programme.
Ce n'est pas une analsye du code mais une analyse ex post facto une fois que notre programme a terminé son exécution.
Un bon petit tuto se trouve ici.