css-le-botlan/Y/Ada-S1/exercices/complet-s1.html
2021-02-04 21:55:27 +01:00

47 lines
No EOL
15 KiB
HTML

<!DOCTYPE html>
<!-- Page generated by OCaml with Ocsigen.
See http://ocsigen.org/ and http://caml.inria.fr/ for information -->
<html class="ada1" lang="fr" id="h" xmlns="http://www.w3.org/1999/xhtml"><head><title>Exercice sur TOUT</title><meta content="text/html; charset=utf-8" http-equiv="content-type"/><link media="all" href="../../ystyle.css" rel="stylesheet"/><script src="../../Scripts/yfold.js"></script></head><body><div class="header" id="header"><h1 id="title">Exercice sur TOUT</h1><nav><a class="caml_c" title="Back to main page" href="../tps.html" data-eliom-c-onclick="1jXlRMQCah3z"></a></nav></div><main><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('081bbf4f')"><span class="arrow" id="arrow-081bbf4f">&#x25b8;</span>Objectifs</h2><div class="yfold-content" id="content-081bbf4f" data-yfold-default="show"><ul class="goals"><li>Mettre en application toutes les compétences ALGO du premier semestre.</li><li>Ce sujet, typique de l'examen, peut être fait complètement en 1H50, ou alors en 1H30 (durée de l'examen) en ne faisant qu'un seul exercice à la question 3.</li></ul></div><script>
//<![CDATA[
initYfold('081bbf4f') ;
//]]>
</script></section><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('79a292bb')"><span class="arrow" id="arrow-79a292bb">&#x25b8;</span>Exercices</h2><div class="yfold-content" id="content-79a292bb" data-yfold-default="hide"><ul class="steps"><li>Copiez ces fichiers dans un dossier de travail : <a class="caml_c" href="../Exos_Complementaires/auto.ads" data-eliom-c-onclick="1nrQ01rzQH/u">auto.ads</a>, <a class="caml_c" href="../Exos_Complementaires/auto.adb" data-eliom-c-onclick="ZwjaRxUnmYdg">auto.adb</a>, et le programme <a class="caml_c" href="../mission1.adb" data-eliom-c-onclick="xHpOe0vsM+am">mission1.adb</a>. </li><li>Prenez le temps de bien lire l'acteur <a class="caml_c" href="../Programmes/acteurs-exo-complementaire/auto.html" data-eliom-c-onclick="BNtwitGHmxEV">Auto</a>. </li></ul><img class="space" style="width:536px;height:164px;" alt="Voiture autonome" src="../../Images/car1.png"/><section class="exercise"><div class="content"><h5><span class="difficulty"><img style="width:16px;height:16px;" alt="Star" src="../../Images/etoile.png"/></span>Question 1 : Traduction d'algorigramme et procédure de test</h5><h6>Compétences mises en oeuvre : </h6><ul><li>Distinguer les structures de contrôle <code class="kw">while</code>, <code class="kw">if</code>, et <code class="kw">for</code>. </li><li>Traduire une spécification de sous-programme en un en-tête Ada.</li><li>Écrire une procédure de test qui invoque une fonction et affiche le résultat.</li></ul><h6>Algorigramme</h6><ul class="steps"><li>Écrivez une fonction <code class="block">Controler_Vitesse</code><img class="space" title="Controler_Vitesse" style="width:467px;height:50px;" alt="Function Controler_Vitesse" src="../../Gen/Controler_Vitesse-2-c6e-f.png"/>Cette fonction doit correspondre exactement à l'algorigramme ci-dessous, avec les conventions suivantes: <ul><li><code class="highlight">Cond1</code> signifie<code class="highlight">Vitesse &gt; Limite</code></li><li><code class="highlight">Cond2</code> signifie<code class="highlight">Depassements ⩾ Securite</code></li></ul><img class="space" style="width:601px;height:692px;" alt="Algorigramme" src="../../Images/algo-auto1.png"/></li></ul><h6>Procédure de test</h6><ul class="steps"><li>Écrivez une procédure de test <code class="block">Tester_Controler_Vitesse</code><img class="space" title="Tester_Controler_Vitesse" style="width:456px;height:50px;" alt="Procedure Tester_Controler_Vitesse" src="../../Gen/Tester_Controler_Vitesse-2-aa8-.png"/>La procédure de test doit afficher la valeur de ses deux arguments, puis la valeur renvoyée par la fonction <code class="inline">Controler_Vitesse</code><small class="pcom"> (invoquée avec les arguments de test)</small> de cette manière : <pre class="output">Seuil Vitesse = 5.50000E+01 km/h
Seuil Sécurité = 5 dépassements.
Nombre de dépassements = 16
Seuil Vitesse = 5.60000E+01 km/h
Seuil Sécurité = 4 dépassements.
Nombre de dépassements = 14
Seuil Vitesse = 5.70000E+01 km/h
Seuil Sécurité = 1 dépassements.
Nombre de dépassements = 6</pre>Vous voyez ici trois invocations de la procédure de test.</li><li>Dans le corps du programme principal, invoquez trois fois la procédure de test, avec les valeurs ci-dessus, et vérifiez que vous obtenez les mêmes résultats.</li></ul><h6>Solution</h6>Solution utile si vous avez fait preuve de persévérance <a class="caml_c" href="../Programmes/solution-exo-complementaire/mission9.html" data-eliom-c-onclick="P+DZGX9IHRXh">mission9.adb</a>. </div></section><img class="space" style="width:581px;height:192px;" alt="Circulation de voitures autonomes" src="../../Images/car2.png"/><section class="exercise"><div class="content"><h5><span class="difficulty"><img style="width:16px;height:16px;" alt="Star" src="../../Images/etoile.png"/><img style="width:16px;height:16px;" alt="Star" src="../../Images/etoile.png"/></span>Question 2 : Affichage et type article</h5><ul class="steps"><li>Écrivez une procédure <code class="block">Afficher_Action</code><img class="space" title="Afficher_Action" style="width:319px;height:50px;" alt="Procedure Afficher_Action" src="../../Gen/Afficher_Action-2-b9e-.png"/></li><li>Cette procédure affiche la vitesse et le contenu de l'action <b>passés en argument</b> de cette manière :<pre class="output">Vitesse = 13 km/h
Direction = 14 degrés
Accélération = 10
Freinage = 0</pre>ou encore<pre class="output">Vitesse = 71 km/h
Direction = -7 degrés
Accélération = 0
Freinage = 0
<mark>--- ACTION D'URGENCE ---</mark></pre></li><li>Notez que la vitesse et la direction sont <b>convertis en entier</b> pour un affichage plus agréable.</li><li>Les <b>unités</b> sont précisées.</li><li>S'il s'agit d'une action d'urgence, on ajoute une dernière ligne (comme dans le deuxième exemple).</li></ul><h6>Procédure de test</h6><ul class="steps"><li>Écrivez une procédure de test<code class="block">Tester_Affichage</code><img class="space" title="Tester_Affichage" style="width:190px;height:50px;" alt="Procedure Tester_Affichage" src="../../Gen/Tester_Affichage-0-c97-.png"/></li><li>Cette procédure commence par fixer la destination <samp>Long : -1.12, Lat : 40.31</samp></li><li>Puis, il faut afficher les <b>dix</b> premières actions effectuées par la voiture<small class="pcom"> (en utilisant <var>Action_Courante</var>)</small>. </li><li>Il faut invoquer <var>Attend_Ms</var> entre chaque action pour laisser le temps à la voiture de changer d'action.</li><li>Avec la destination indiquée ci-dessus, votre première action devrait être <pre class="output">Vitesse = 13 km/h
Direction = 14 degrés
Accélération = 10
Freinage = 0</pre> et votre sixième action devrait être <pre class="output">Vitesse = 71 km/h
Direction = -7 degrés
Accélération = 0
Freinage = 0
<mark>--- ACTION D'URGENCE ---</mark></pre></li></ul><h6>Solution</h6>Avez-vous réellement besoin de consulter la solution ? <a class="caml_c" href="../Programmes/solution-exo-complementaire/mission10.html" data-eliom-c-onclick="zGVMvnJsRRMz">mission10.adb</a>. </div></section><img class="space" style="width:590px;height:190px;" alt="Circulation de voitures autonomes" src="../../Images/car3.png"/><section class="exercise"><div class="content"><h5><span class="difficulty"><img style="width:16px;height:16px;" alt="Star" src="../../Images/etoile.png"/><img style="width:16px;height:16px;" alt="Star" src="../../Images/etoile.png"/></span>Question 3 : Recherche d'extremum</h5><h6>Moyenne</h6><img class="float" style="width:223px;height:148px;" alt="Compteur de vitesse" src="../../Images/speed1.png"/><ul class="steps"><li>Écrivez une fonction <code class="block">Vitesse_Moy</code> qui renvoie la moyenne des vitesses mesurées sur les <i>N</i> prochaines mesures<small class="pcom"> (N étant l'argument de la fonction)</small>. <img class="space" title="Vitesse_Moy" style="width:415px;height:50px;" alt="Function Vitesse_Moy" src="../../Gen/Vitesse_Moy-1-99f-f.png"/>Cette fonction doit mesurer <i>N</i><small class="pcom"> (= l'argument Mesures)</small> fois la vitesse, en invoquant <var>Attend_Ms</var> entre chaque mesure, et renvoyer <b>la moyenne calculée</b>. </li><li>Pour tester, dans le corps du programme, établir la destination à <samp>Long : -0.82, Lat : 41.22</samp><br/>Afficher la moyenne après 100 mesures, vous devriez trouver 44,910 km/h<small class="pcom"> (avec cette précision)</small>. </li></ul><h6>Max</h6><ul class="steps"><li>Écrivez une fonction <code class="block">Date_Vitesse_Max</code><img class="space" title="Date_Vitesse_Max" style="width:457px;height:50px;" alt="Function Date_Vitesse_Max" src="../../Gen/Date_Vitesse_Max-1-99f-f.png"/>De manière similaire, cette fonction doit mesurer la vitesse <i>N</i> fois, en invoquant <var>Attend_Ms</var> entre chaque mesure. <br/>La fonction doit renvoyer <b>la date</b> à laquelle la vitesse est maximale<small class="pcom"> (voir la fonction <var>Date</var>)</small>. <br/><small class="pcom"><img class="inline" style="width:18px;height:18px;" alt="Forbidden" src="../../Images/forbid.png"/> Ne renvoyez pas la vitesse maximale, ce n'est pas ce qui est demandé.</small></li><li>Testez dans le corps du programme principal, en établissant la destination à <samp>Long : 0.5, Lat : 40.18</samp><br/>La vitesse maximale sur 100 mesures est atteinte à la date 1.425s.</li></ul><h6>Min</h6><img class="float" style="width:195px;height:192px;" alt="Compteur de vitesse" src="../../Images/speed2.png"/><ul class="steps"><li>Écrivez une fonction <code class="block">Vitesse_Min</code> qui renvoie la vitesse minimale calculée jusqu'à l'arrivée à destination.<img class="space" title="Vitesse_Min" style="width:244px;height:50px;" alt="Function Vitesse_Min" src="../../Gen/Vitesse_Min-0-fb9-f.png"/>La fonction doit invoquer <var>Attend_Ms</var> entre chaque mesure de vitesse, et ne s'arrêter que lorsque le véhicule a atteint sa destination<small class="pcom"> (voir la fonction <var>Arrivee</var>)</small>. </li><li>Testez dans le corps du programme principal, en établissant la destination à <samp>Long : 0.2, Lat : 40.37</samp><br/>La vitesse minimale est 0.57 km/h.</li></ul><h6>Solution</h6>Avant de lire la solution, avez-vous déjà un programme qui fonctionne ? <a class="caml_c" href="../Programmes/solution-exo-complementaire/mission11.html" data-eliom-c-onclick="4KqN+IDy23gx">mission11.adb</a>. </div></section><img class="space" style="width:572px;height:224px;" alt="Flying bDeLorean" src="../../Images/car4.png"/><section class="exercise"><div class="content"><h5><span class="difficulty"><img style="width:16px;height:16px;" alt="Star" src="../../Images/etoile.png"/><img style="width:16px;height:16px;" alt="Star" src="../../Images/etoile.png"/><img style="width:16px;height:16px;" alt="Star" src="../../Images/etoile.png"/></span>Question 4 : Algorithme enrichi<small class="pcom"> (nécessaire uniquement pour obtenir A ou A+ à l'examen)</small></h5><ul class="steps"><li>Définissez dans votre programme un type article <var class="type">T_Stats</var> qui contient :<ul><li>Un réel <var>Moy</var>,</li><li>Deux entiers <var>Min</var> et <var>Max</var>,</li><li>Et encore un entier <var>Urgences</var>. </li></ul>Ce type servira à effectuer quelques statistiques pendant le pilotage de la voiture.</li><li>Écrivez une fonction <code class="block">Acceleration_Stats</code><img class="space" title="Acceleration_Stats" style="width:477px;height:50px;" alt="Function Acceleration_Stats" src="../../Gen/Acceleration_Stats-2-a60-f.png"/>Cette fonction doit obtenir <i>N</i><small class="pcom"> (= l'argument Mesures)</small> fois l'action courante, en invoquant <var>Attend_Ms</var> entre chaque mesure, et renvoyer certaines statistiques :<ul><li>Le nombre d'action d'urgence <small class="pcom">(dans l'attribut <var>Urgences</var>)</small>. </li><li>Et, <b>en ne considérant que les actions</b><ul class="success"><li>dont la valeur de direction est supérieure ou égale à <var>Dir_Abs</var> (en valeur absolue),</li><li>et dont la valeur de freinage est 0,</li></ul>calculer les valeurs max, min, et la moyenne de l'accélération <small class="pcom">(à placer dans les attributs correspondant du type article)</small>. </li></ul></li><li>Testez dans le corps du programme principal, en établissant la destination à <samp>Long : -0.2, Lat : 41.63</samp>, et en effectuant 22 mesures avec le seuil de direction 4.0. Vous obtenez : <pre class="output">Acceleration Moyenne : 6.25000E+00
Acceleration Min : 3
Acceleration Max : 8
Actions d'urgence : 1</pre></li></ul><h6>Solution</h6>Voici une solution : <a class="caml_c" href="../Programmes/solution-exo-complementaire/mission12.html" data-eliom-c-onclick="rH4bp3e+wD/c">mission12.adb</a>. </div></section></div><script>
//<![CDATA[
initYfold('79a292bb') ;
//]]>
</script></section><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('977984d3')"><span class="arrow" id="arrow-977984d3">&#x25b8;</span>Acteurs utilisés</h2><div class="yfold-content" id="content-977984d3" data-yfold-default="hide"><ul class="file-list"><li><a class="file caml_c" href="../Programmes/acteurs-exo-complementaire/auto.html" data-eliom-c-onclick="38/8vRQ0R9WZ">Auto</a></li><li><a class="file caml_c" href="../acteur-gada/gada-text_io.ads.html" data-eliom-c-onclick="RIUyjoxSiuU7">GAda.Text_IO</a></li></ul></div><script>
//<![CDATA[
initYfold('977984d3') ;
//]]>
</script></section><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('5b284864')"><span class="arrow" id="arrow-5b284864">&#x25b8;</span>Bilan</h2><div class="yfold-content" id="content-5b284864" data-yfold-default="hide">En gardant tout votre flegme, vous êtes capables :<ul class="success"><li>de traduire correctement un algorigramme en Ada.</li><li>d'écrire une <b>procédure de test</b> correspondant à une fonction donnée.</li><li>d'exploiter intelligemment les <b>arguments</b> d'un sous-programme, fussent-ils d'un <b>type article</b>. </li><li>d'appliquer quelques <b>algorithmes classiques</b> à connaître : <b>min, max, moyenne</b>. </li><li>d'<b>adapter un algorithme</b> connu pour prendre en compte une contrainte supplémentaire.</li></ul></div><script>
//<![CDATA[
initYfold('5b284864') ;
//]]>
</script></section></main><footer><small class="pcom"><a class="caml_c" href="../../yversion.html" data-eliom-c-onclick="r+rCIOnRL3mL">Version information</a></small><a target="_blank" href="http://www.insa-toulouse.fr"><img title="INSA Toulouse" style="width:73px;height:28px;" alt="INSA logo" src="../../Images/logo-insa-light.jpg"/></a><a target="_blank" href="http://jigsaw.w3.org/css-validator/check/referer"><img title="Validate css stylesheet" style="width:28px;height:32px;" alt="CSS3 logo" src="../../Images/css3.png"/></a><a target="_blank" href="http://validator.w3.org/check/referer"><img title="Validate html5 content" style="width:32px;height:32px;" alt="HTML5 logo" src="../../Images/html5.png"/></a></footer></body></html>