165 lines
8.2 KiB
HTML
165 lines
8.2 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 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">▸</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">▸</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 " " 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">▸</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">▸</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>
|