Jean HENRI                     Devoir d'algorithmique    mardi 15 octobre 2002
STS IG 2                                durée : 2 heures

Calculatrice autorisée

Exercice 1 – Recherche de minimum (2 points)

Soit la structure dynamique suivante :

TP_Entier est une structure
                Info est un entier
                Ptr_Suivant est un pointeur de TP_Entier
              fin structure

et la donnée suivante :

Ptr_Racine est un pointeur de TP_Entier  // pointe sur le 1er élément en mémoire

On suppose qu'un chaînage existe en mémoire et donc que Ptr_Racine n'est pas égal à PTR_NUL. On n'utilisera pas d'autre donnée globale.

1.Rédiger la fonction suivante :

fonction Minimum renvoie un entier

dont la valeur renvoyée correspond à la plus petite valeur des données Info stockées en mémoire.

2.Rédiger l'algorithme AjouterElement (E : InfoNeuve est un entier) qui place en fin de chaîne
la valeur passée en paramètre d'entrée.

Exercice 2 – Attente au guichet (6 points)

Un service public souhaite gérer la file d'attente de sa clientèle. A chaque fois qu'un client arrivera, l'hôtesse d'accueil notera le nom et le prénom du client. Les clients seront ensuite appelés dans l'ordre où ils sont arrivés (premier arrivé, premier servi). On choisit de réaliser un chaînage double et on définit donc la structure dynamique et les données globales suivantes :

TP_Client est une structure
                NomClient,
                PrenomClient sont des chaines de caractères

                Ptr_Suivant,
                Ptr_Precedent sont des pointeurs de TP_Client
              fin structure
Ptr_Racine,                                  // premier élément en mémoire
Ptr_Dernier sont des pointeurs de TP_Client  // dernier élément en mémoire

Le chaînage dynamique est initialisé à l'aide de l'algorithme suivant :

algorithme InitialiserChainage
début
  Ptr_Racine  <-- PTR_NUL
  Ptr_Dernier <-- PTR_NUL
fin

1.Écrire les algorithmes suivants :

algorithme AjouterClient (Entrée : Nom, Prenom sont des chaines de caractères)
// Ajoute dans le chaînage le client dont les coordonnées sont fournies en entrée
// On considère qu'il n'y a pas 2 clients qui ont le même nom et le même prénom.

algorithme AppelerClient (Sortie : Nom, Prenom sont des chaines de caractères)
// Retire du chaînage les informations du prochain client à servir
// Si il n'y a plus de client les chaines renvoyées seront vides.

algorithme AnnulerClient (Entree : Nom, Prenom sont des chaines de caractères)
// Retire du chaînage les informations d'un client qui repart sans avoir été servi.
// Si le client n'a pas été trouvé, cela ne produit aucune erreur.

Exercice 3 – Arbre généalogique (6 points)

On souhaite mettre en place un arbre généalogique au moyen d'un chaînage dynamique. Voici les règles de gestion concernant les individus :

Un individu peut avoir un père et une mère (qui sont des individus);

Un individu peut avoir des frères et soeurs (qui sont des individus);

Un individu peut avoir des enfants (qui sont des individus).

On connait sur l'individu les informations personnelles suivantes :

son nom;
son prénom;
son sexe;
sa date de naissance;
son lieu de naissance;
sa date de décès;
son lieu de décès.

Proposer une structure T_individu qui permettrait de mettre en place un tel arbre généalogique. On ne se préoccupera pas dans cette question des mariages entre individus. Vous pourrez indiquer les limites de votre modèle par rapport à d'éventuelles situations réelles.

Exercice 4 – Gestion d'une collection de cédés audio (6 points)

Une base de données de cédés audio peut se modéliser (de manière simplifiée) ainsi :

Définir les structures dynamiques T_CedeAudio et T_PisteAudio qui permettraient de mettre en place une gestion dynamique des cédés audio.

Définir les données globales qui seraient indispensables à une telle gestion.