Durée : 2h. Cours, corrections de TP et autres documents autorisés.
On désire développer un nouveau type de compteur kilométrique usage sportif (vélo, course à pied,...). Le capteur est en fait un système optique (qui "regarde la route") mesurant la vitesse de déplacement des irrégularités du sol. Nous disposons donc d'une mesure instantanée de la vitesse. Nous supposerons dans la suite du sujet que tous les problèmes d'acquisition et d'interfaçage avec le calculateur (programmable en C) sont résolus, et que l'on peut à tout moment connaître la vitesse instantanée en appelant une fonction, définie dans "acquerir.h", dont l'entête est float vitesse(void) . La valeur retournée est la vitesse en m/s. Nous supposerons également disposer d'une fonction retournant un flottant (double précision) donnant le temps écoulé depuis l'allumage ou le reset de la carte d'acquisition (en s). Son entête est long float temps(void) .
On veut connaître la distance parcourue. Pour cela, il suffit d'intégrer la vitesse. J'avais évoqué la méthode à utiliser lors du premier TP. Le plus rapidement possible, il faut mesurer la vitesse et le temps actuel, les comparer à la mesure précédente et calculer la distance parcourue, et cumuler toutes ces distances. Pour cela la méthode qui semble la plus précise consiste à utiliser des trapèzes (figure de gauche), mais étant en phase de développement du produit nous désirons une quantification de l'erreur effectuée. Pour cela nous utiliserons des rectangles : il faut calculer une borne inférieure de la vitesse (fig de droite) puis un second calcul nous donnera la borne supérieure (en prenant cette fois-ci la plus grande des deux hauteurs de chaque rectangle). La moyenne des deux nous donne la même valeur que la méthode des trapèzes, mais leur différence nous donne l'intervalle de tolérance.
|
|
Question 1 : Ecrivez un programme qui affiche à tout moment (en boucle, jusqu'à un appui de touche) :
On désire comptabiliser les durés passées dans différentes plages de vitesses (40 plages maximum). Pour cela, nous allons utiliser un tableau nommé CumulParPlage dont vous expliciterez la déclararation de type. On ne comptabilisera pas les temps d'arrêt (vitesse inférieure à 0.01 m/s).
Question 2-1 : Ecrivez un fonction nommée "initialiser" qui demande à l'utilisateur le nombre N de plages désirées et les (N-1) seuils désirés (qui seront stockés dans un tableau nommé Seuils). Par exemple on donnera les deux seuils 5 et 10 pour les trois plages ]0,5],]5,10], et >10. Cette fonction sera appelée par le programme principal vu dans la première partie, bien évidement avant la boucle principale. Donnez l'instruction qui permettra cet appel.
Question 2-2 : Ecrivez une fonction nommée "comptabiliser" qui sera appelée à l'intérieur de la boucle du programme principal. Elle reçoit en argument deux flottants : la vitesse instantanée et la durée écoulée entre la mesure précédente et l'actuelle, mais aussi N et les deux tableaux. Elle détermine la plage correspondante et ajoute la durée dans CumulParPlage.
On désire stocker les informations de tous les entraînements de l'année (il en a moins de 365). Un entraînement est caractérisé par sa date (trois entiers : le jour, le mois et l'année), la distance totale, la durée totale, la durée d'exercice, les informations par plages (nombre, seuils et cumuls). On désire représenter une date par une structure, de même pour les informations par plages et pour un entraînement. L'ensemble des entraînements sera regroupé dans un tableau.
Question 3-1 : Donnez les déclarations de type et déclarez ces données. Ecrivez l'instruction qui permet d'afficher (à l'écran) le dernier seuil du premier enregistrement.
Question 3-2 : Pour chaque entraînement, on désire trouver rapidement l'entraînement de durée (d'exercice) juste inférieure, ainsi que celui de distance juste supérieure. Pour cela, nous aimerions utiliser des pointeurs. Donnez les déclarations nécessaires à leur mise en place.
Question 3-3 : Comment pourrait-t'on mettre à jour les liens définis en 3-2 ? Expliquez la démarche (l'algorithme) avec plus ou moins de détails suivant le temps qu'il vous reste.
pour retourner au sommaire des sujets d'examen, cliquez ici
Si vous le désirez, vous pouvez regarder ici une proposition de réponses.
Patrick TRAU, ULP - IPST fev 02