TP 3 de programmation avancée en C

Présentation : Ce TP est destiné à l'implémentation d'une structure de file ; le travail réalisé dans un exercice étant complété/modifié dans le suivant. Il faudra conserver le code source de chaque exercice.

Important : Dans ce TP, on n'utilisera pas d'autres bibliothèques que stdlib et stdio.

Exercice 1
Important : Dans cet exercice, on créera un unique fichier C, sans fichier d'entête .h.
On réalise en C une structure de file (càd de type "First In first Out") d'entiers, en utilisant les types prédéfinies suivants :
  typedef struct {int valeur; void * suivant;} element;
  typedef struct {element * premier; element * dernier;} FIFO;
1. Dessiner (sur papier) l'organisation d'une file de trois entiers.
2. Définir une variable nommée mafile de type FIFO.
3. Créer les primitives* nécessaires pour gérer le type FIFO :
*une primitive est une fonction où une procédure de base qui permettent de gérer un type de données en gérant certains détails tels que les allocations de pointeurs.
N.B. La bonne pratique interdit à une primitive d'en utiliser une autre. 4. Ajouter une procédure void afficher(fifo * f) d'affichage complet de la file (sans la modifier !).
5. Compléter le programme pour qu'il crée une file vide mafile, y enfile les entiers de 1 à 20, puis affiche la taille de la file et son contenu, avant de l'effacer.

Exercice 2
1. Pour chacune des primitives du type FIFO, déterminer quelles sont les erreurs de réalisation qui peuvent survenir ; modifier en conséquence, selon les besoins, leurs signatures et leurs contenus pour retourner un/des codes d'erreurs.
N.B. S'il existe des codes d'erreurs standard, on pourra les utiliser (faire une recherche web si besoin).
2. Compléter le programme pour qu'au lieu d'enfiler automatiquement des valeurs, il enfile d'abord les paramètres en ligne de commande, puis des valeurs successives données par l'utilisateur, avant d'afficher la taille de la file puis son contenu, puis finalement de l'effacer.
N.B. Que fera-t-on si un des paramètres ne peut être interprété comme un entier ? Comment le programme décidera-t-il la fin de la saisie de valeurs à empiler ?

Exercice 3
1. Placer la structure FIFO dans un fichier de code nommé fifo.c séparé et pourvu de son fichier d'entête nommé fifo.h, puis précompiler fifo.c en fifo.o.
2. Reprendre l'exercice 1 ou 2 en utilisant la compilation séparée.

Exercice 4
On cherche à créer un type file qui soit capable d'empiler un entier ou une chaine de caractères.
1. Modifier en conséquence le type valeur dans le type element de l'exercice 1.
2. Reprendre l'exercice 1, 2, ou 3, mais cette fois le programme sera capable de distinguer les entiers des chaines de caractères.
© 2011, 2016 – A. Guitton, A. Sigayret – Université Clermont-Fd II