Année universitaire 2002-2003
espace

Licence d'informatique
Module 4 - partie "C / shell"



Travaux pratiques 7 :

  • 1. Exercice 1 : gestion d'une pile de coffrets.
  • 2. Exercice 2 : version plus sophistiquée de l'exercice 1.

  • 1. Exercice 1.

    Une société de distribution de marchandises décide de commercialiser des "coffrets gourmands" avant les fêtes de Noël. Pour gérer son stock, elle ne dispose toutefois que d'un recoin dans un entrepôt où les coffrets gourmands devront être empilés les uns sur les autres. De plus, cet entrepôt ne permet pas de stocker plus de 200 coffrets gourmands à la fois. Cette société a besoin d'un logiciel de gestion de stock. C'est la création d'un tel logiciel qui est demandée dans cet exercice. On organisera son écriture en trois fichiers :

    On conseille de procéder de la façon suivante :

    1) Dans le fichier gestion.c, on doit faire apparaître la directive d'inclusion du fichier pile.h (et non pas du fichier pile.c !), puisqu'on va utiliser le type cellule et les fonctions de manipulation de pile définis dans pile.c.

    2) On doit également définir, dans le fichier gestion.c, la constante HAUTEUR_MAX à la valeur 200 et le type coffret (adapté aux besoins spécifiques de l'entreprise, contrairement au type générique cellule) :

    Le premier champ de cette structure est un entier qui est le numéro d'arrivée du coffret dans le stock : le premier coffret stocké dans la pile recevra le numéro 1, le deuxième le numéro 2, etc..., si bien que le numéro d'un coffret sorti du stock ne pourra plus jamais être réattribué. Le deuxième champ de la structure coffret est un caractère, qui ne recevra pas de valeur dans le cadre de l'exercice 1, et qui permettra, dans le cadre de l'exercice 2, de stocker différents types de coffrets.

    3) On doit aussi définir, dans le fichier gestion.c, la fonction creer_coffret, d'en-tête :

    qui effectue l'allocation dynamique d'une zone mémoire correspondant à la taille d'une structure de type coffret, et qui retourne l'adresse de cette zone mémoire, ou NULL s'il y a un problème d'allocation de mémoire. Cette fonction sera appelée dans le programme principal, toutes les fois qu'on voudra empiler un coffret, avant d'appeler la fonction empiler (définie dans le fichier pile.c). L'adresse retournée par la fonction creer_coffret sera passée en paramètre à la fonction empiler.

    4) Écrire le programme principal main, en respectant en particulier les points suivants :

    5) Compiler le fichier gestion.c, à l'aide du fichier de description des dépendances de nom makefile (écrit lors de la séance 9 de travaux dirigés), de façon à produire le fichier exécutable de nom gestion

    Attention :

    6) Tester le programme exécutable obtenu. Dans un premier temps, il sera préférable de fixer la valeur de HAUTEUR_MAX à 3, pour pouvoir tester le cas où il ne reste plus de place dans l'entrepôt.

    Remarques :

    2. Exercice 2.

    La société décide maintenant de distribuer quatre types de coffrets :

    De plus, l'entrepôt s'est agrandi et peut désormais contenir 500 coffrets gourmants (on fixera d'abord la valeur de HAUTEUR_MAX à 5, pour pouvoir tester le cas où il ne reste plus de place dans l'entrepôt).

    1) Faire une copie du fichier gestion.c, de nom gestion2.c

    2) Définir, dans le fichier gestion2.c, les fonctions supplémentaires suivantes :

    3) Modifier le programme principal de l'exercice 1, de façon à afficher le même menu en boucle, mais avec les modifications suivantes :

    4) Compiler ce programme, et tester le programme exécutable produit.


    Ces pages ont été réalisées par A. Crouzil, J.D. Durou et Ph. Joly.
    Pour tout commentaire, envoyer un mail à crouzil@irit.fr, à durou@irit.fr ou à Philippe.Joly@irit.fr.