css-le-botlan/Y/Ada-S2/exo-intervalles.html
2021-02-04 21:55:27 +01:00

24 lines
No EOL
7.3 KiB
HTML

<!DOCTYPE html>
<!-- Page generated by OCaml with Ocsigen.
See http://ocsigen.org/ and http://caml.inria.fr/ for information -->
<html class="ada2" lang="fr" id="h" xmlns="http://www.w3.org/1999/xhtml"><head><title>Exercice avec des types article</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 avec des types article</h1><nav><a class="caml_c" title="Back to main page" href="tps.html" data-eliom-c-onclick="qTPZRMm8azh9"></a></nav></div><main><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('47526826')"><span class="arrow" id="arrow-47526826">&#x25b8;</span>Objectifs</h2><div class="yfold-content" id="content-47526826" data-yfold-default="show"><ul><li>L'objectif est d'écrire quelques fonctions manipulant des intervalles de réels, représentés avec un type article.</li></ul></div><script>
//<![CDATA[
initYfold('47526826') ;
//]]>
</script></section><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('59d9c792')"><span class="arrow" id="arrow-59d9c792">&#x25b8;</span>Étapes à suivre</h2><div class="yfold-content" id="content-59d9c792" data-yfold-default="hide"><section class="yfold card"><h4 class="yfold-title" onclick="toggleYfold('c5642c79')"><span class="arrow" id="arrow-c5642c79">&#x25b8;</span>Première partie : les intervalles compacts</h4><div class="yfold-content" id="content-c5642c79" data-yfold-default="hide"><ul class="steps"><li>Créez un nouveau fichier <span class="file">mission2.adb</span> contenant la structure habituelle d'un programme Ada. </li><li>Définissez un type article <code class="inline">T_Intervalle</code> permettant de représenter les intervalles de réels fermés et bornés, c'est-à-dire de la forme [inf, sup] où inf et sup sont des réels. Remarquez qu'il suffit de connaître inf et sup pour définir l'intervalle.</li><li>Définissez une fonction <code class="inline">Intervalle_Image</code> qui reçoit un <code class="inline">T_Intervalle</code> et renvoie une chaîne de caractères, de la forme &quot;[3,5]&quot;<small class="pcom"> (pour un affichage pas trop laid, convertir les bornes en entier, ou alors utiliser l'acteur <a class="file caml_c" href="../Ada-S1/acteur-gada/dfloat.ads.html" data-eliom-c-onclick="QET/ZEqPcLT1">DFloat</a>).</small></li><li>Ajoutez une fonction <code class="inline">Est_Inclus</code> qui reçoit deux arguments A et B de type <code class="inline">T_Intervalle</code> et qui renvoie vrai si et seulement si A est inclus dans B. <img class="space" title="Est_Inclus" style="width:399px;height:50px;" alt="Function Est_Inclus" src="../Gen/Est_Inclus-2-a14-f.png"/><small class="pcom">(Le corps de la fonction tient en une seule ligne.)</small></li><li>Ajoutez une fonction <code class="inline">Disjoints</code> ayant la même signature que <code class="inline">Est_Inclus</code> (même arguments, même type de résultat) et qui renvoie vrai si et seulement si A et B sont disjoints. <small class="pcom">(Elle tient aussi en une seule ligne.)</small></li><li>Ajoutez une procédure <code class="inline">Afficher_Relation</code> qui reçoit deux arguments A et B de type <code class="inline">T_Intervalle</code> et qui affiche l'un ou l'autre des messages suivants (selon ce qui est le plus adéquat) :<ul><li><samp>A est inclus dans B</samp></li><li><samp>B est inclus dans A</samp></li><li><samp>A et B sont disjoints</samp></li><li><samp>A et B ne sont pas disjoints</samp><small class="pcom"> (mais aucun n'est inclus dans l'autre)</small></li></ul>Vous pouvez utiliser <code class="inline">Intervalle_Image</code> pour afficher l'intervalle lui-même au lieu de &quot;A&quot; ou &quot;B&quot;.</li><li>Pour tester, créez trois constantes C, D, E, représentant respectivement les intervalles [5, 10], [7, 8], et [4, 6]. Puis, dans le corps du programme principal, invoquez <code class="inline">Afficher_Relation</code> avec les paires d'arguments (C,D), (D,C), (C,E), et (D,E). <br/>Grâce à votre maîtrise absolue des relations ensemblistes, vous pouvez prévoir à l'avance ce qui sera affiché.</li></ul></div><script>
//<![CDATA[
initYfold('c5642c79') ;
//]]>
</script></section><section class="yfold card"><h4 class="yfold-title" onclick="toggleYfold('c5f14639')"><span class="arrow" id="arrow-c5f14639">&#x25b8;</span>Deuxième partie : produits cartésiens d'intervalles compacts</h4><div class="yfold-content" id="content-c5f14639" data-yfold-default="hide"><ul class="steps"><li>Dans le même programme, définissez un type <code class="inline">T_Prod</code> représentant un produit cartésien de deux intervalles. Par exemple : [1,5]x[3,8] est un élément de T_Prod</li><li>Définissez une fonction <code class="inline">Prod_Image</code> qui reçoit un <code class="inline">T_Prod</code>et qui renvoie une chaîne de caractère, par exemple &quot;[1,5]x[3,8]&quot;.<small class="pcom"> Vous pensez spontanément à utiliser Intervalle_Image, c'est bien.</small></li><li>Comme ci-dessus, définissez les fonctions <code class="inline">Prod_Est_Inclus</code> et <code class="inline">Prod_Disjoints</code> qui reçoivent deux arguments A et B de type <code class="inline">T_Prod</code> et qui indiquent si A est inclus dans B ou si A et B sont disjoints (respectivement). <br/><small class="pcom">Le corps de ces fonctions tient toujours en une seule ligne.</small></li><li>Comme ci-dessus, ajoutez une procédure <code class="inline">Prod_Afficher_Relation</code> qui joue le même rôle que <code class="inline">Afficher_Relation</code> mais pour des arguments de type <code class="inline">T_Prod</code>.</li><li>Testez dans le corps du programme principal en invoquant <code class="inline">Prod_Afficher_Relation</code> avec les paires d'arguments suivants : <ul><li>CxC et DxD</li><li>CxD et DxC</li><li>DxC et ExC</li></ul>en prévoyant à l'avance ce qui sera affiché.</li></ul></div><script>
//<![CDATA[
initYfold('c5f14639') ;
//]]>
</script></section></div><script>
//<![CDATA[
initYfold('59d9c792') ;
//]]>
</script></section><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('0e19da2c')"><span class="arrow" id="arrow-0e19da2c">&#x25b8;</span>Bilan</h2><div class="yfold-content" id="content-0e19da2c" data-yfold-default="hide"><ul class="success"><li>Avec le type <var class="type">T_Prod</var>, vous avez expérimenté un type article imbriqué dans un autre type article.</li><li>Vous savez maintenant que vous devez vous souvenir du produit cartésien À VIE.</li></ul></div><script>
//<![CDATA[
initYfold('0e19da2c') ;
//]]>
</script></section></main><footer><small class="pcom"><a class="caml_c" href="../yversion.html" data-eliom-c-onclick="dPUSAaaxce2m">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>