Merge branch 'master'

This commit is contained in:
Mstrdav 2021-02-04 21:58:06 +01:00
commit 804a7789df
25 changed files with 291 additions and 12 deletions

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,24 @@
<!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>

77
Y/Ada-S2/exo-traces.html Normal file
View file

@ -0,0 +1,77 @@
<!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 de tracés avec des caractères</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 de tracés avec des caractères</h1><nav><a class="caml_c" title="Back to main page" href="tps.html" data-eliom-c-onclick="AVUMznauqliT"></a></nav></div><main><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('5abee968')"><span class="arrow" id="arrow-5abee968">&#x25b8;</span>Objectifs</h2><div class="yfold-content" id="content-5abee968" data-yfold-default="show"><ul class="goals"><li>Écrire quelques procédures qui affichent des formes géométriques en utilisant le caractère dièse #. Par exemple, un pseudo-carré et un damier : <pre>#####
# #
# #
# #
#####</pre><pre> ## ## ## ##
## ## ## ##
## ## ## ## ##
## ## ## ## ##
## ## ## ##
## ## ## ##
## ## ## ## ##
## ## ## ## ##
## ## ## ##
## ## ## ## </pre></li><li>Ces exercices vous familiariseront avec les concepts des séances de TP à venir.</li></ul><h4>Prérequis</h4><p>➪ Au moins quelques restes du semestre 1.</p></div><script>
//<![CDATA[
initYfold('5abee968') ;
//]]>
</script></section><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('053717c4')"><span class="arrow" id="arrow-053717c4">&#x25b8;</span>Étapes à suivre</h2><div class="yfold-content" id="content-053717c4" data-yfold-default="hide"><ul class="steps"><li>Le seul acteur dont vous aurez besoin est <a class="file caml_c" href="../Ada-S1/acteur-gada/gada-text_io.ads.html" data-eliom-c-onclick="akNvajSCrSGu">GAda.Text_IO</a>. </li><li>Créez un nouveau dossier <span class="file">Exos-Algo</span>. </li><li>Créez-y un fichier vide <span class="file">mission1.adb</span> que vous complétez avec la structure d'usage (page 5 du livret du semestre 1). <br/><small class="pcom">Si vraiment vous n'y parvenez pas, exclamez-vous : <q>O cursed spite that ever I was born to set it right!</q> (Hamlet, Act I, Scene 5) puis copiez le fichier mission1.adb qui se situe sur commetud (comme au premier TP du premier semestre).</small></li><li>Dans votre programme, qui s'appelle déjà <var>Mission1</var>, ajoutez une procédure <var>Tracer_Ligne</var> qui reçoit en argument un entier <var>Long</var> et qui trace une ligne de <var>Long</var> symboles dièses puis passe à la ligne. <br/>Par exemple, si Long vaut 5, la procédure affiche<samp>#####</samp><img class="space" title="Tracer_Ligne" style="width:305px;height:50px;" alt="Procedure Tracer_Ligne" src="../Gen/Tracer_Ligne-1-4e0-.png"/> Pour tester, invoquer la procédure dans le corps du programme principal avec les arguments 3, 8, puis 20. Vous obtenez alors le résultat suivant : <pre><samp>###
########
####################</samp></pre><small class="pcom">Corps de la procédure : 4 lignes Ada.</small></li><li>Ajoutez maintenant à votre programme une procédure <code class="inline">Tracer_Rectangle</code> qui reçoit deux arguments : <var>Largeur</var> et <var>Hauteur</var>, et qui trace (toujours avec des dièses) les contours d'un rectangle des dimensions indiquées (en nombre de dièses). <img class="space" title="Tracer_Rectangle" style="width:361px;height:50px;" alt="Procedure Tracer_Rectangle" src="../Gen/Tracer_Rectangle-2-266-.png"/> Pour tester, invoquer la procédure dans le corps du programme principal avec les paires d'arguments (5,5), (4,6), puis (14,2). Vous obtenez alors le résultat suivant (utiliser des espaces &quot; &quot; pour décaler les dièses les uns des autres quand c'est nécessaire.) : <pre><samp>#####
# #
# #
# #
#####
####
# #
# #
# #
# #
####
##############
##############</samp></pre><small class="pcom">Corps de la procédure : une dizaine de lignes Ada.</small></li><li><aside class="yfold"><div class="content"><h4 class="yfold-title" onclick="toggleYfold('c1b7a4c8')"><span class="arrow" id="arrow-c1b7a4c8">&#x25b8;</span>Pour tester si un nombre est pair</h4><div class="yfold-content" id="content-c1b7a4c8" data-yfold-default="hide">On utilise le modulo :<ul><li><code class="inline">X mod 2</code> vaut 0 lorsque X est pair.</li><li><code class="inline">X mod 2</code> vaut 1 lorsque X est impair.</li></ul></div><script>
//<![CDATA[
initYfold('c1b7a4c8') ;
//]]>
</script></div></aside>Ajoutez une procédure <code class="inline">Tracer_Quadrillage</code> qui reçoit aussi en argument une largeur et une hauteur. Invoquée avec la paire d'arguments (19, 11), votre procédure doit afficher ceci : <pre><samp>###################
# # # # # # # # # #
###################
# # # # # # # # # #
###################
# # # # # # # # # #
###################
# # # # # # # # # #
###################
# # # # # # # # # #
###################</samp></pre><small class="pcom">Corps de la procédure : une dizaine de lignes Ada, un seul IF.</small></li><li>Faites de même une procédure <code class="inline">Tracer_Damier</code> qui, invoquée avec les arguments (18,10) affiche ceci : <pre><samp># # # # # # # # #
# # # # # # # # #
# # # # # # # # #
# # # # # # # # #
# # # # # # # # #
# # # # # # # # #
# # # # # # # # #
# # # # # # # # #
# # # # # # # # #
# # # # # # # # #</samp></pre><small class="pcom">Corps de la procédure : une dizaine de lignes Ada, un seul IF.</small></li><li><span class="lbutton">Facultatif</span>Et enfin, écrivez une procédure <code class="inline">Tracer_Gros_Damier</code> qui, invoquée avec les arguments (18,10) affiche ceci : <pre><samp> ## ## ## ##
## ## ## ##
## ## ## ## ##
## ## ## ## ##
## ## ## ##
## ## ## ##
## ## ## ## ##
## ## ## ## ##
## ## ## ##
## ## ## ## </samp></pre><small class="pcom">Corps de la procédure : une dizaine de lignes Ada, un seul IF.</small></li></ul></div><script>
//<![CDATA[
initYfold('053717c4') ;
//]]>
</script></section><section class="yfold"><h2 class="yfold-title" onclick="toggleYfold('14138620')"><span class="arrow" id="arrow-14138620">&#x25b8;</span>Bilan</h2><div class="yfold-content" id="content-14138620" data-yfold-default="hide"><ul class="success"><li>Vous avez compris que pour parcourir une structure à deux dimensions (damier, matrice), il faut deux boucles FOR imbriquées.</li><li>Dans ces deux boucles FOR imbriquées, vous reconnaissez le compteur des lignes et le compteur des colonnes.</li></ul></div><script>
//<![CDATA[
initYfold('14138620') ;
//]]>
</script></section></main><footer><small class="pcom"><a class="caml_c" href="../yversion.html" data-eliom-c-onclick="7pkwUvkk3G6G">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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

BIN
Y/Images/algo-auto1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
Y/Images/car1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

BIN
Y/Images/car2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

BIN
Y/Images/car3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

BIN
Y/Images/car4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

BIN
Y/Images/etoile.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 455 B

BIN
Y/Images/forbid.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 670 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
Y/Images/speed1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
Y/Images/speed2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

View file

@ -74,7 +74,7 @@ main {
display: block; display: block;
} }
.yfold:not(.card) { .yfold:not(.card):not(aside) {
background: rgba(189, 189, 189, 0.2); background: rgba(189, 189, 189, 0.2);
position: relative; position: relative;
z-index: 1; z-index: 1;
@ -210,7 +210,7 @@ footer .pcom a {
/* PAGE DE CODE */ /* PAGE DE CODE */
code { code:not(.inline) {
position: relative; position: relative;
z-index: 2; z-index: 2;
background: rgba(19,19,19,.8); background: rgba(19,19,19,.8);
@ -270,7 +270,7 @@ code div.not-valid {
code div.valid, code div.not-valid, code div.darken { code div.valid, code div.not-valid, code div.darken {
animation-name: shake; animation-name: shake;
animation-duration: .6s; animation-duration: .6s;
} }
span.comment { span.comment {
font-style: italic; font-style: italic;
@ -302,22 +302,153 @@ span.uident{
color: rgb(203, 203, 53); color: rgb(203, 203, 53);
} }
.light code:not(.inline) {
z-index: 2;
background: black;
width: min(94vw, 900px);
border-radius: 12px;
margin-left: 3vw;
margin-top: 20px;
font-family: monospace;
display: block;
color: white;
tab-size: 2;
white-space: pre;
overflow-x: scroll;
font-size: 120%;
padding: 20px 50px 22px 15px;
border-bottom: 10px solid #222;
line-height: 1.55;
}
code * {
white-space: pre;
tab-size: 2px;
display: inline;
}
.light span.comment {
font-style: italic;
color: rgb(204, 209, 209);
white-space: pre;
}
.light span.kw {
color: rgb(138, 74, 10);
}
.light span.type {
color: rgb(138, 74, 10);
}
.light span.fname {
color: rgb(138, 138, 10);
}
.light span.string {
color: rgb(10, 138, 74);
}
.light span.letvar {
color: rgb(74, 138, 10);
}
.light span.uident {
color: rgb(138, 138, 10));
}
span.file {
font-weight: bold;
}
var, samp, code.inline {
display: inline-block;
padding: 2px 8px;
background: #222;
color: #ffffcc ;
border-radius: 4px;
font-size: 90%;
font-family: monospace;
font-style: normal;
}
pre {
margin: 20px 0;
}
img.space {
margin-left: auto;
margin-right: auto;
display: block;
margin-top: 1.5ex;
margin-bottom: 1.5ex;
}
span.lbutton{
position:relative;
margin-right: 6px;
}
span.lbutton:before{
content:"";
z-index:-1;
left:-0.5em;
top:-0.1em;
border-width:2px;
border-style:solid;
border-color:rgb(138, 138, 10);
position:absolute;
border-right-color:transparent;
width:100%;
height:1em;
transform:rotate(2deg);
opacity:0.7;
border-radius:50%;
padding:0.1em 0.25em;
}
span.lbutton:after{
content:"";
z-index:-1;
left:-0.5em;
top:0.1em;
padding:0.1em 0.25em;
border-width:2px;
border-style:solid;
border-color:rgb(138, 138, 10);
border-left-color:transparent;
border-top-color:transparent;
position:absolute;
width:100%;
height:1em;
transform:rotate(-1deg);
opacity:0.7;
border-radius:50%;
}
aside.yfold {
margin: 20px 0;
}
aside .yfold-title, .card .yfold-title {
color: black;
font-family: 'Poppins', sans-serif;
font-weight: 100;
}
/* MEDIA */ /* MEDIA */
@media (min-width: 1400px) { @media (min-width: 1400px) {
footer { footer {
flex-direction: column; flex-direction: column;
max-height: 400px; max-height: 400px;
position: absolute; position: absolute;
top: calc(20px + 150px); top: calc(20px + 150px);
right: 3vw; right: 3vw;
width: calc(91vw - 900px); width: calc(91vw - 900px);
border-radius: 12px; border-radius: 12px;
} }
} }
/* ANIMATION */ /* ANIMATION */