css-le-botlan/Y/Ada-S2/Programmes/exos-preparatoires/solution-en-ocaml.html
2021-02-04 20:04:17 +01:00

80 lines
5.3 KiB
HTML

<html class="ada2" lang="fr" id="h" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>mission2.ml</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">mission2.ml</h1>
</div>
<main><code class="page block"><span class="comment">(* Version OCaml de l'exercice sur les intervalles *)</span>
<span class="kw">type</span> t_intervalle =
{ inf: float ;
sup: float }
<span class="kw">let</span> <span class="letvar">sof</span> x = string_of_int (int_of_float x)
<span class="comment">(* Les trois premières fonctions demandées. *)</span>
<span class="kw">let</span> <span class="letvar">intervalle_image</span> it = <span class="string">&quot;[&quot;</span> ^ sof it.inf ^ <span class="string">&quot;, &quot;</span> ^ sof it.sup ^ <span class="string">&quot;]&quot;</span>
<span class="kw">let</span> <span class="letvar">est_inclus</span> a b = (a.inf &gt;= b.inf &amp;&amp; a.sup &lt;= b.sup)
<span class="kw">let</span> <span class="letvar">disjoints</span> a b = (a.sup &lt; b.inf || a.inf &gt; b.sup)
<span class="comment">(* Fonction d'affichage générique qui marchera pour t_intervalle et pour t_prod. *)</span>
<span class="kw">let</span> <span class="letvar">affichage_gen</span> f_inclus f_disjoint f_image i1 i2 =
<span class="kw">let</span> <span class="letvar">s1</span> = f_image i1
<span class="kw">and</span> <span class="letvar">s2</span> = f_image i2 <span class="kw">in</span>
<span class="kw">if</span> f_inclus i1 i2 <span class="kw">then</span> <span class="uident">Printf</span>.printf <span class="string">&quot;%s est inclus dans %s\n&quot;</span> s1 s2
<span class="kw">else</span> <span class="kw">if</span> f_inclus i2 i1 <span class="kw">then</span> <span class="uident">Printf</span>.printf <span class="string">&quot;%s est inclus dans %s\n&quot;</span> s2 s1
<span class="kw">else</span> <span class="kw">if</span> f_disjoint i1 i2 <span class="kw">then</span> <span class="uident">Printf</span>.printf <span class="string">&quot;%s et %s sont disjoints\n&quot;</span> s1 s2
<span class="kw">else</span> <span class="uident">Printf</span>.printf <span class="string">&quot;%s et %s ne sont pas disjoints, ni inclus\n&quot;</span> s1 s2
<span class="comment">(* Afficher_relation pour les intervalles. *)</span>
<span class="kw">let</span> <span class="letvar">afficher_relation</span> = affichage_gen est_inclus disjoints intervalle_image
<span class="comment">(* Produit cartésien *)</span>
<span class="kw">type</span> t_prod =
{ left: t_intervalle ;
right: t_intervalle }
<span class="comment">(* Les trois premières fonctions pour les produits cartésiens. *)</span>
<span class="kw">let</span> <span class="letvar">prod_image</span> p = intervalle_image p.left ^ <span class="string">&quot; x &quot;</span> ^ intervalle_image p.right
<span class="kw">let</span> <span class="letvar">prod_est_inclus</span> a b = est_inclus a.left b.left &amp;&amp; est_inclus a.right b.right
<span class="kw">let</span> <span class="letvar">prod_disjoints</span> a b = disjoints a.left b.left || disjoints a.right b.right
<span class="comment">(* La fonction d'affichage demandée. *)</span>
<span class="kw">let</span> <span class="letvar">prod_afficher_relation</span> = affichage_gen prod_est_inclus prod_disjoints prod_image
<span class="kw">let</span> <span class="letvar">prod</span> a b = { left = a ; right = b }
<span class="comment">(* Test *)</span>
<span class="kw">let</span> () =
<span class="kw">let</span> <span class="letvar">c</span> = { inf = <span class="number">5.0</span> ; sup = <span class="number">10.0</span> }
<span class="kw">and</span> <span class="letvar">d</span> = { inf = <span class="number">7.0</span> ; sup = <span class="number">8.0</span> }
<span class="kw">and</span> <span class="letvar">e</span> = { inf = <span class="number">4.0</span> ; sup = <span class="number">6.0</span> }
<span class="kw">in</span>
afficher_relation c d ;
afficher_relation d c ;
afficher_relation c e ;
afficher_relation d e ;
prod_afficher_relation (prod c c) (prod d d) ;
prod_afficher_relation (prod c d) (prod d c) ;
prod_afficher_relation (prod d c) (prod e c) ;
()
</code></main>
<footer><small class="pcom"><a class="caml_c" href="../../../yversion.html" data-eliom-c-onclick="UJHGP0o9lEGA">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>