1/3
Sujet de rattrappage de TPL S1 (LAB2412)
(Listes chaînées, Arbres de recherche équilibrés)
Attention : lisez attentivement le sujet, je serai intraitable sur des erreurs lié à une mauvaise lecture
du sujet. J'espere avoir été assez complet dans ce document pour palier au fait qu'on ne se voit pas
en cours, il peut cependant rester des questions auquels je repondrais à cette adresse :
[email protected]. Avant d'envoyer un mail regardez sur le site :
http://professeurs.esiea.fr/wassner/ si des réponses n'auraient pas déjà été postées.
Objectif du TP
L'objectif de ce TP est de vous faire manipuler les listes et les arbres. Il vous est demande de faire
un programme qui manipule des informations relatives à une base de donnée de CD musicaux (titre
d'albums, titres de chansons). Cette bases de données doit avoir de bonnes performances en temps
de recherche, ainsi vous devrez stocker les albums dans un arbre de recherche équilibré. Les titres
des chansons d'un album seront eux representés par des éléments d'une liste. Le schema ci-dessous
représente graphiquement la structure de données imposée.
Le critère de classement dans l'arbre équilibré sera basé sur le titre de l'album (en utilisant l'ordre
alphabétique fournit par la fonction strcmp).
Vous prendrez la structure de données et les fonctions de base fournis dans les fichiers tree.c et
list.c (ces structures de données contiennent des entiers, étudiez les, puis modifiez pour qu'elles
puissent contenir ce dont vous avez besoin pour creer votre base de donnée de CD).
Vous trouverez ces fichiers sur ce serveur : http://professeurs.esiea.fr/wassner/ suivez les liens
“Rattrapages” puis LAB2412.
Conseils de base :
titre
chanson 1
chanson 2
chanson 3
etc...
titre
chanson 1
chanson 2
chanson 3
etc...
titre
chanson 1
chanson 2
chanson 3
etc...
titre
chanson 1
chanson 2
chanson 3
etc...
titre
chanson 1
chanson 2
chanson 3
etc...
titre
chanson 1
chanson 2
chanson 3
etc...
titre
chanson 1
chanson 2
chanson 3
etc...
2/3
Commencer par vous assurer de la bonne compréhension des fonctions données dans tree.c et
list.c.
Faites les modifications pas à pas. Modifiez les fonction de list.c de manière à ce que la structure
de liste contienne des chaines de caractères plutôt que des entiers. Ensuite créez une structure de
données représentant un album (un titre plus une liste de chansons) puis modifiez tree.c pour que
l'arbre contienne des albums et non des entiers. Assurez vous que chaque étape terminée ne
comporte pas d'erreur avant d'aller plus loin... (utilisez valgrind)
Conseils de qualité logicielle (ces paramètres seront utilisé lors de l'évaluation de votre travail)
Pensez aux cas rares (arbres ou listes vides par exemple), ces cas ne doivent pas faire planter
votre programme.
Commentez intelligement votre programme.
Utilisez l'option de compilation “-Wall” (pour indiquer tous les warning), cela vous evitera bien
des erreurs...
Utilisez valgrind à chaque étapes et sur des exemples differents pour bien vous assurer de
l'absence d'erreur d'utilisation de pointeurs, et de fuite mémoire (oublis de désallocation mémoire
en fin de programme). Voir plus bas dans ce document pour plus d'information sur l'utilisation de
valgrind.
Ce que doit faire le programme
Le programme doit lire un fichier texte contenant les informations de la base de données, et
construire l'arbre équilibré correspondant en mémoire. Ce fichier doit avoir le format suivant :
#nom d'album 1
nom de chanson 1
nom de chanson 2
etc..
#nom d'album2
nom de chanson 1
nom de chanson 2
etc...
Les noms d'album sont précédés d'un # et la liste de chansons correspondantes suit et ainsi de suite
jusqu'à la fin du fichier.
Je vous laisse le soin d'éditer un tel fichier, avec vos albums préférés.
Pour ouvrir ce fichier vous utiliserez les fonctions fopen , fgets , fclose pour respectivement ouvrir,
lire, fermer un fichier. Utilisez la commande man dans un terminal pour avoir le prototype exact de
ces fonctions (ou n'importe quel livre sur le langage C vous renseignera).
Vous ferez ensuite un systême de menu simplifié en utilisant l'entrée standard (via la fonction
scanf). L'utilisateur devra pouvoir :
Afficher tout le contenu de l'arbre (titres et chansons de tous les albums en mémoire)
Rechercher un Album par son titre (dire si il est présent ou non, afficher, les titres des chansons
correspondantes).
Ajouter un album en mémoire (dans l'arbre)
Sortir du programme (n'ouliez pas de désallouer la mémoire utilisée.)
Informations pratiques
Il s'agit d'un travail personnel.
Vous rendrez votre travail via mail à [email protected] (attention, seul le 1er envoi fait foi, les
3/3
suivants seront ignorés). La date limite pour rendre votre travail est le 26 août au soir.
En attachement, 1 seul et unique fichier C contenant votre travail et un fichier “.dat” contenant
une liste d'album.
Vous prendrez soin de mettre votre nom en commentaire au debut du programme.
Vous utiliserez du C standard (pas de “C-windows”, je testerai votre programme sous linux)
Le plus simple, pour etre sur, c'est de n'utiliser que des fonctions référencées dans le livre “Le
langage C” (auteurs Kernighan & Ritchie).
Valgrind
La programmation utilisant les pointeurs en C est difficile, ceci en partie du au fait que certaines
erreurs ne se voient pas tout de suite, et sont difficile à identifier et localiser. C'est souvent à cause
de ce genre d'erreurs que les programmes les plus usuels plantent si fréquemment... Valgrind est un
outil logiciel permettant de contrôler votre programme lors de l'utilisation de la mémoire (ce que ne
font pas les debuggers).
Vous trouverez la documentation officielle à cette adresse :
http://valgrind.kde.org/docs.html
(valgrind est installé dans les salles informatique de l'école.)
Pour l'utilisation dont vous avez besoin ce document devrait être suffisant :
http://www.tldp.org/HOWTO/Valgrind-HOWTO/closerview.html
Lisez le bien, si vous ne l'utilisez pas pour developper votre programme, je suis presque certain qu'il
restera des erreurs, ces erreurs seront sanctionnées. J'utiliserai ce logiciel lors de la correction.
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !