Université Louis Pasteur Département d’Informatique

Janvier 1990

LICENCE D’INFORMATIQUE

Méthode de programmation

Durée: 3 heures

Première partie (15 points)

A chaque client d’une entreprise est associée une structure C définie par la déclaration de type

typedef struct sc {int num; char nom[40]; lispro commande; struct sc *suivant;} *client ;

Nous appelons client le pointeur vers une structure dans laquelle figure le numéro et le nom du client ainsi que le pointeur vers une liste de produits et le pointeur vers la structure associée au client suivant.

1. Ecrire très exatement en langage C, avec toutes les déclarations nécessaires, les fonctions int numero(c), char *nom(C), lispro commande(C) et struct sc *suivant(C) où C est une variable déclarée par client C;.

2. En supposant qu’à la liste vide et à l’absence de client suivant sont associées des pointeurs de valeur NUL, écrire en C la fonction logical yacommande(C) qui rend vrai s’il existe une commande ainsi que logical dernierclient(C) qui rend vrai s’il n’existe pas de client suivant.

3. Ecrire en C le programme void nouveauclient(N) qui adjoint un nouveau client de nom N (N déclaré par char *N) à la liste des clients de l’entreprise. Son numéro sera choisi comme le plus petit entier (> 0) non encore attribué à un autre client.

4. Ecrire en C le programme void supprimeclient(N) qui supprime le client de nom N (à condition que sa liste de commande soit vide).

5. La commande d’un client est définie par une liste de produits identifiés par un numéro et une quantité.

(a) Définir une structure de données permettant d’associer la commande à chaque client, décrire sans les programmer les fonctions de base utilisées par la suite.

(b) Ecrire (en Médé) le programme qui affiche le total des quantités du produit de numéro P en commande pour l’ensemble de tous les clients (le pointeur liscli pointe sur le premier client).

(c) Ecrire (en Médé) un programme qui affiche le nom des clients qui ont commandé le produit de numéro P.

Deuxième partie (5 points) Soit T un tableau déclaré par int T[1000].

1. Ecrire un programme qui compte le nombre de nombres différents de T sans utiliser de tableau auxilliaire, sans modifier T.

2. Ecrire un programme itératif qui trie T, sans tableau auxilliaire.

3. Ecrire un programme récursif qui trie T, sans tableau auxilliaire.