css-le-botlan/Y/Ada-S1/exercices/complet-s1.html
2021-02-09 17:41:02 +01:00

228 lines
17 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>