retour sommaire des sujets logo ULP

Janvier 2007

Master Ingénierie et Technologie 1
TCM 10 - commande des systèmes
Première session 2007

Cet examen comporte deux parties. Vous êtes maîtres de la gestion de votre temps, mais nous vous conseillons de passer environ une heure sur chacune d'elles. Vous composerez chaque partie sur une copie différente. Le sujet fait 4 pages (2 pour chaque partie). Documents autorisés.

Partie génie informatique

P. TRAU

Un groupe d'anciens étudiants fraîchement diplômés aimeraient développer un logiciel de planification spécifique à la démarche de certification qualité. Ils décident de créer une petite société pour créer le logiciel, le commercialiser, mais aussi former et assister le client.

Les questions ci dessous ne tenteront évidement pas de résoudre la globalité du problème, mais chaque partie traitera un point particulier, avec des hypothèses simplificatrices qui ne sont pas les mêmes pour chaque partie.

Un outil bien utile pour toute planification est le diagramme de Gantt. Un tel diagramme comporte des "blocs" décrivant chacun une tâche à effectuer : le nom de cette tâche, mais aussi quelles ressources (humaines et matérielles) elle nécessite, et obligatoirement une estimation de sa durée (avec si possible un intervalle de tolérance). De plus on impose, entre ces tâches, des relations d'antériorité (quelles sont les tâches qui doivent être terminées pour pouvoir entamer une tâche donnée).

Définition des classes

Définissez dans un premier temps une"tâche" (à l'aide d'une classe). Une tâche contient :

Question 1.1 : Déclarez la classe, avec des accesseurs en lecture pour chaque attribut, une méthode pour la saisie et une pour l'affichage (sans s'occuper des antériorités).

Question 1.2 : Donnez (en français, avec l'aide de schémas si nécessaire) quelques idées (mais pas nécessaire de donner les déclarations en C, et totalement interdit de définir complètement les méthodes) pour prévoir une structuration des tâches et de leurs antériorités, en utilisant obligatoirement des pointeurs. Si vous le voulez, on peut supposer que le nombre d'antériorités est limité, par exemple maxi trois antériorités par tâche.

Gestion des antériorités

Comme vous l'avez peut-être remarqué, le diagramme de Gantt donné plus haut comporte une antériorité redondante, mais ceci n'est pas gênant car cohérent. Dans cette partie nous allons analyser la cohérence des antériorités d'un diagramme de Gantt.

Pour simplifier, supposons avoir N<20 tâches (numérotées entre 0 et N-1) regroupées (sous forme d'un tableau) dans un objet (la classe s'appellera "diagramme"). Chaque tâche peut avoir au maximum deux antériorités. Une tâche contiendra donc, en plus de ce que vous avez défini en question 1.1, deux attributs entiers, nommés A1 et A2. Quand un tâche n'a qu'une antériorité, alors elle est stockée dans A1, et A2 sera mis à -1. Quand une tâche n'a aucune antériorité, A1 = A2 = -1.

Exemple :

Ne réécrivez pas la classe "tâche", considérez qu'on y a inséré A1 et A2, qu'on les a pris en compte dans la saisie et l'affichage, et qu'il existe pour chacun d'eux un accesseur en lecture et en écriture (nommées get_A1, get_A2, set_A1 et set_A2, au cas où vous en auriez besoin).

Question 2-1 : Déclarez la classe "diagramme" en ne prévoyant qu'une seule méthode : affiche (qui utilise évidement la méthode d'affichage de chacune des tâches).

Question 2-2 : Ecrivez une méthode nommée "incoherence" qui pour un diagramme retourne 0 si ses antériorités sont cohérentes, un entier non nul sinon. Vous utiliserez obligatoirement l'algorithme suivant :

les tâches n'ayant aucune antériorité sont notées comme étant "valides". Puis on parcourt toutes les tâches, celles ayant toutes leurs antériorités valides sont également valides. On recommence jusqu'à ce qu'on ait parcouru les N tâches sans avoir trouvé de nouvelle tâche à valider. On retourne alors le nombre de tâches non valides.

Vous pourrez, si vous en avez besoin, créer des tableaux temporaires (sous forme d'objets ou non). S'il vous faut des méthodes supplémentaires, définissez les.

Question 2-3 : Pourriez-vous décrire comment on pourrait transformer cet algorithme en multi-tâche (threads), et quel dialogue il faudrait utiliser entre les tâches ?


notes 2007 :

retour sommaire des sujetsPatrick TRAU, ULP - IPST jan 07