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

63 lines
No EOL
5.1 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>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>