Durée : 3h. Cours et documents distribués en cours autorisés.
Un assembleur d'ordinateurs personnels décide de suivre une démarche qualité. Pour chaque composant à insérer dans le PC, une procédure est écrite. Elle précise le matériel nécessaire, les options devant déjà avoir été montées auparavant (par exemple la carte mère avant la carte son), la méthodologie, le temps nécessaire, etc... Chaque composant peut nécessiter une phase ou (le plus souvent) deux phases (pour une carte son par exemple, une phase de montage, et une autre pour l'installation du logiciel correspondant, une fois le montage terminé). On supposera qu'aucun composant ne nécessite plus de deux phases. Afin de mieux maîtriser les délais, mais aussi pour assurer la traçabilité, on désire faire un programme qui détermine, dès qu'un client définit la configuration qu'il désire, de prévoir les composants nécessaires (et de vérifier s'ils sont disponibles ou d'estimer un délai d'approvisionnement), de prévoir le séquencement et la durée des phases de montage (en fonction des disponibilités du personnel compétent), et donner immédiatement au client une estimation la plus fiable possible du délai de mise à disposition de sa commande.
Les questions ci dessous ne tenteront pas d'aborder la globalité de ce problème, mais chacune traitera un point particulier. Dans chacune des questions on ne traitera qu'une partie des données (pas nécessairement le même dans deux questions différentes). Les trois questions sont indépendantes et peuvent être traitées dans l'ordre qui vous convient.
Question 1 : Sans s'occuper de comment le programme fera pour prévoir le montage, proposez comment on pourrait stocker en mémoire cette gamme de production (pour un seul PC). On simplifie ici le problème, en particulier en supposant que chaque composant ne nécessite qu'une et une seule phase. On doit connaître
De plus, l'ordre de montage doit être défini, explicitement ou implicitement par la position respective des données.
Question 2 : On désire gérer l'intégralité des composants disponibles. Chaque composant est défini par : une référence (sur 8 caractères), un commentaire sur 80 caractères, la durée du montage (en mn), le prix hors taxes. Chaque composant est représenté par une structure :
typedef struct { char ref[9]; char com[81]; int duree; float pht; }compos;
On regroupe ces composants dans un tableau, un entier définissant le nombre total de composants différents utilisés dans l'entreprise :
#define MAX 1000 typedef compos tableau[MAX] ;
en supposant avoir le programme principal suivant (les include sont omis):
void main(void) { int nbcompos; tableau tab; saisie(tab,&nbcompos); affiche(tab,nbcompos); estimation(tab,nbcompos); }
Question 3 : Supposons disposer d'un tableau tabref dans lequel on a placé les références des composants à installer dans un PC, dans l'ordre du montage. nb est le nombre de composants.
typedef char reference[9]; reference tabref[30]; int nb;
Le but de cette question est de trier les références par ordre alphabétique, mais en ne perdant pas l'information de l'ordre de montage. Pour cela vous devez créer deux tableaux d'entiers, l'un s'appelant prec et contenant l'indice du précédent (pour le premier on choisira -1), l'autre s'appelant suiv et contenant l'indice du suivant (pour le dernier on choisira -1). Puis vous trierez tabref par ordre croissant (en n'oubliant pas, dès que vous déplacez une référence dans tabref, de déplacer de la même manière la même ligne dans prec et suiv).
Exemple : nb=5 ;
void aff(int n) { if(prec[n]>=0)aff(prec[n]); printf("%s\n",tabref[n]); if(suiv[n]>=0)aff(suiv[n]); }
pour voir une correction, cliquez ici
pour voir le barème et l'histogramme des notes obtenues à cet examen, cliquez ici
pour retourner au sommaire des sujets d'examen, cliquez ici
Patrick TRAU, ULP - IPST 25/1/98