Mini-Projet de C
LPMI - 2002/2003

Manipulation d'une liste de disques de musique

Ce mini-projet propose de travailler sur une liste de disques afin de les classer par catégorie et par auteur. Pour chaque disque, on dispose des informations suivantes : Le programme doit pouvoir :

Données en entrée

Les données seront lues sur l'entrée standard. Elles se présentent sous la forme de lignes de texte. Chaque ligne correspond à un disque et comporte les éléments suivants dans l'ordre indiqué :
  1. la catégorie du disque
  2. l'auteur du disque
  3. le titre du disque
Chacun de ces éléments est constitué d'un ou plusieurs mots séparés par un ou plusieurs caractères espaces. Les éléments sont séparés par une ou plusieurs tabulations et d'éventuels caractères espaces.

Si plusieurs disques de la même catégorie se suivent, on peut omettre de répéter la catégorie. La ligne comporte alors une tabulation avant tout premier mot puis l'auteur et le titre du disque.
Exemple ('\t' représentant une tabulation) :

chanson française \t Jacques Brel \t  L'homme de la Mancha
\t Georges Brassens \t Les copains d'abord

De la même façon, si plusieurs disques de la même catégorie et du même auteur se suivent, on peut omettre de répéter la catégorie et l'auteur. La ligne comporte alors une tabulation avant tout premier mot puis le titre du disque.
Exemple :

chanson française \t Georges Brassens \t Les copains d'abord
\t chanson pour l'auvergnat

En outre, le nombre de catégories ainsi que le nombre maximum de disques par catégorie sont fournis en argument de la ligne de commande. L'appel de l'exécutable sera donc de la forme :
$ nom_exécutable nb_catégories max_disques_par_catégorie

Voici un exemple type d'entrée :
rock\tGun Club\tfire of love
rock \t \t  The    jon spencer  blues explosion \t acme
\t \t  the  Jon Spencer  blues explosion  \t\t\t  orange
electro \t \t tHe chemical   brothers \t surrender
jazz \t Miles Davis \t Tutu
\t kind of blue
jazz\tjohn Coltrane\t\tA love supreme
 rock \tMiles     Davis \t \t A Tribute To Jack Johnson
 \t the  Jon Spencer blues explosion \t ACME plus

Résultats en sortie

Le programme doit afficher sur la sortie standard la liste de tous les disques classés par catégorie (l'ordre des catégories est indifférent). À l'intérieur d'une catégorie, les disques doivent être regroupés par auteur (l'ordre des titres est indifférent). Tous les titres de disque doivent être alignés et à au moins 3 espaces de l'auteur. Le programme doit afficher le nombre de disques que contient chaque catégorie à la suite du nom de la catégorie et aligné avec les titres des disques. Enfin, le programme affichera le nombre total de disques contenus dans la liste.

En supposant que l'entrée type précédente soit contenue dans le fichier discothèque, l'appel du programme :

$ a.out 3 10 < discothèque
donnera sur la sortie standard (à l'ordre des catégories et des titres près) :
ROCK                              5

Gun Club                          Fire Of Love
The Jon Spencer Blues Explosion   Acme
The Jon Spencer Blues Explosion   Orange
The Jon Spencer Blues Explosion   ACME Plus
Miles Davis                       A Tribute To Jack Johnson

ELECTRO                           1

THe Chemical Brothers             Surrender

JAZZ                              3

Miles Davis                       Tutu
Miles Davis                       Kind Of Blue
John Coltrane                     A Love Supreme

Nombre de disques : 9

Simplifications

Vous pourrez tenir pour acquis que la longueur maximale d'une ligne décrivant un disque est de 250 caractères et que la longueur maximale de chacun des éléments d'une ligne (catégorie, auteur et titre du disque) est de 70 caractères.

De plus, les données fournies au programme sont supposées correctes. Ainsi le fichier d'entrée respecte scrupuleusement le format spécifié plus haut. De même, les valeurs passées en ligne de commande sont cohérentes avec l'entrée correspondante. Par conséquent, vous vous épargnerez le traitement des erreurs dûes à l'utilisateur.

Vous pourrez par exemple, mais vous êtes libres de procéder autrement, représenter un disque par un type Disque regroupant l'auteur et le titre du disque. Une catégorie pourra être représentée par un type Categorie regroupant le nom de la catégorie, le nombre de disques dans la catégorie ainsi que la liste de disques appartenant à la catégorie. Une liste de disques dans une catégorie pourra être stockée dans un tableau de Disque. Enfin, la liste de disques globale pourra alors être manipulée à travers un tableau de Categorie.

Comment rendre le travail

Le travail doit être fait en binôme. Vous devez envoyer par courrier électronique (en documents attachés) vos fichiers sources (pas d'exécutable) à ponsini AT i3s.unice.fr avant le 19 novembre 2002. Une attention particulière sera accordée à la façon dont votre code est commenté et à son découpage pertinent en plusieurs fonctions.

Vous joindrez un fichier ALIRE contenant des indications sur l'état d'avancement de votre projet et sur la façon de le compiler. Dans tous les cas, votre programme doit pouvoir être compilé sous UNIX avec gcc et les options -Wall -ansi -pedantic.