cours/paradigmesdeprogrammation/td/compiled/1.html

176 lines
7.7 KiB
HTML
Raw Normal View History

2017-02-09 16:03:05 +00:00
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="generator" content="pandoc">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<title></title>
<style type="text/css">code{white-space: pre;}</style>
<link rel="stylesheet" href="../../../dependencies/pandoc.css">
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<h3 id="exercice-1">Exercice 1:</h3>
<pre><code>Programme xx;
var i : entier init à 0;
A[] : tableau init à 0;
procedure swap(x,y)
var z : entier;
debut
z := x;
x := y;
y := z;
fin
debut
i := 2;
A[2] := 99;
swap(i, A[i]);
fin</code></pre>
<h4 id="q-quel-est-leffet-de-lappel-swapi-ai">Q: Quel est l'effet de l'appel <code>swap(i, A[i]);</code></h4>
<ol type="1">
<li>Passage par valeur (<code>IN</code>)</li>
<li>... / résultat (ADA)</li>
<li>... / (ALGOLW)</li>
<li>... par référence</li>
<li>... par noms</li>
</ol>
<p><strong>Notations:</strong></p>
<ul>
<li><code>a := b</code> notation affectation algo</li>
<li><code>a</code><span class="math inline"></span><code>b</code> notation affectation interne</li>
</ul>
<h4 id="opérations-daffectation">Opérations d'affectation</h4>
<p><code>i := 2</code> (<code>i</code><span class="math inline"></span><code>2</code>);</p>
<p><code>A[2] := 99</code> (<code>A[2]</code><span class="math inline"></span><code>99</code>)</p>
<h5 id="passage-par-valeur">1) Passage par valeur</h5>
<ol type="1">
<li>Execution de &quot;IN&quot; : Mettre la valeur dans les paramètres formels
<ul>
<li><code>x</code><span class="math inline"></span><code>i</code> (<code>x</code><span class="math inline"></span><code>2</code>)</li>
<li><code>y</code><span class="math inline"></span><code>A[2]</code> (<code>y</code><span class="math inline"></span><code>99</code>)</li>
</ul></li>
<li>Execution du code
<ul>
<li><code>z := x;</code> (<code>z</code><span class="math inline"></span><code>2</code>)</li>
<li><code>x := y;</code> (<code>x</code><span class="math inline"></span><code>99</code>)</li>
<li><code>y := z;</code> (<code>y</code><span class="math inline"></span><code>2</code>)</li>
</ul></li>
</ol>
<h5 id="passage-par-valeurrésultat-in-out-ada">2) Passage par valeur/résultat (IN OUT ADA)</h5>
<ol type="1">
<li>Calcul d'adressage
<ul>
<li><span class="math inline"><em>P</em><sub>1</sub></span> <code>= &amp;i</code></li>
<li><span class="math inline"><em>P</em><sub>2</sub></span> <code>= &amp;A[i] = &amp;A[2]</code></li>
</ul></li>
<li>Exécution du &quot;IN&quot;
<ul>
<li><code>x</code><span class="math inline"></span><code>i</code> (<code>x</code><span class="math inline"></span><code>2</code>)</li>
<li><code>y</code><span class="math inline"></span><code>A[2]</code> (<code>y</code><span class="math inline"></span><code>99</code>)</li>
</ul></li>
<li>Exécution du code
<ul>
<li><code>z := x</code> (<code>z</code><span class="math inline"></span><code>2</code>)</li>
<li><code>x := y</code> (<code>x</code><span class="math inline"></span><code>99</code>)</li>
<li><code>y := z</code> (<code>y</code><span class="math inline"></span><code>2</code>)</li>
</ul></li>
<li>Exécution du &quot;OUT&quot; : Mettre la valeur des paramètres effectifs
<ul>
<li><code>i := 2</code> (<code>i</code><span class="math inline"></span><code>2</code>)</li>
<li><code>A[2] := 99</code> (<code>A[2]</code><span class="math inline"></span><code>99</code>)</li>
<li>dans les paramètres effectifs <strong>à travers le calcul d'adressage:</strong>
<ul>
<li><span class="math inline"><em>P</em><sub>1</sub></span><code>x</code> (<code>i</code><span class="math inline"></span><code>99</code>)</li>
<li><span class="math inline"><em>P</em><sub>2</sub></span><code>y</code> (<code>A[2]</code><span class="math inline"></span><code>2</code>)</li>
</ul></li>
</ul></li>
</ol>
<p>Conclusion : <code>i</code> et <code>A[2]</code> ont été échangés et permutés</p>
<h5 id="passage-par-valeurrésultat-algolw">3) Passage par valeur/résultat (ALGOLW)</h5>
<p>Mêmes étapes que <code>2)</code>, mais dans l'ordre suivant : b, c, a, d</p>
<h5 id="passage-de-paramètre-par-référence">4) Passage de paramètre par référence</h5>
<p><strong>Notation</strong> : Pour une variable <code>x</code>, on appelle :</p>
<ul>
<li><code>l.value</code> de <code>x</code>, son emplacement (adresse) <em>l(eft)</em></li>
<li><code>r.value</code>, la valeur de <code>x</code> <em>r(ight)</em></li>
<li>mémo: <code>x := 10</code> (<em>left</em> := <em>right</em>)</li>
</ul>
<ol type="1">
<li><code>l.value</code> de <code>x</code> est la même que celle de <code>i</code>
<ul>
<li><code>l.value</code> de <code>y</code> est la même que celle de <code>A[i]</code> c'est à dire <code>A[2]</code></li>
</ul></li>
<li>Exécution du code
<ul>
<li><code>z := x</code> (<code>z</code><span class="math inline"></span><code>2</code>)</li>
<li><code>x := y</code> (<code>x</code><span class="math inline"></span><code>99</code>)</li>
<li><code>y := z</code> (<code>A[2]</code><span class="math inline"></span><code>2</code>)</li>
<li><strong>Conclusion:</strong> <code>i</code> et <code>A[2]</code> on été permutés</li>
</ul></li>
</ol>
<h5 id="passage-pde-paramètre-par-nom">5) Passage pde paramètre par nom</h5>
<ol type="1">
<li>Substitution des paramètres formels par les paramètres effectifs de manière textuelle <strong>sans évaluation</strong>
<ul>
<li><code>z := x</code> <span class="math inline"></span> <code>z</code><span class="math inline"></span><code>i</code></li>
<li><code>x := y</code> <span class="math inline"></span> <code>i</code><span class="math inline"></span><code>A[i]</code></li>
<li><code>y := z</code> <span class="math inline"></span> <code>A[i]</code><span class="math inline"></span><code>z</code></li>
</ul></li>
<li>Exécution du code
<ul>
<li><code>z := i</code> (<code>z</code><span class="math inline"></span><code>2</code></li>
<li><code>i := A[i]</code> (<code>i</code><span class="math inline"></span><code>A[2]</code><span class="math inline"></span><code>99</code>)</li>
<li><code>A[i] := z</code> (<code>A[99]</code><span class="math inline"></span><code>2</code>)</li>
</ul></li>
<li><strong>Conclusion:</strong>
<ul>
<li><code>i</code> a été changé</li>
<li><code>A[2]</code> inchangé mais</li>
<li><code>A[99]</code> a été modifié</li>
</ul></li>
</ol>
<h3 id="exercice-2">Exercice 2</h3>
<pre><code>Procedure Quelmode(x)
A[1] := 6;
elt := 2;
x := x+3;</code></pre>
<h5 id="appel-par-valeur">1) Appel par valeur</h5>
<ul>
<li>A[1] := 1 (A[1] <span class="math inline"></span> 1)</li>
<li>A[2] := 2 (A[2] <span class="math inline"></span> 2)</li>
<li>elt := 1 (elt <span class="math inline"></span> 1)</li>
</ul>
<ol type="1">
<li>Exécution du <code>IN</code>
<ul>
<li>x <span class="math inline"></span> A[elt] (x <span class="math inline"></span> A[1] <span class="math inline"></span> 1)</li>
</ul></li>
<li>Exécution du code
<ul>
<li>A[1] := 6 (A[1] <span class="math inline"></span> 6)</li>
<li>elt := 2 (elt <span class="math inline"></span> 2)</li>
<li>x := x+3 (x <span class="math inline"></span> 4)</li>
</ul></li>
<li><strong>Conclusion:</strong>
<ul>
<li>A[1] <span class="math inline"></span> 6</li>
<li>A[2] <span class="math inline"></span> 2</li>
<li>elt <span class="math inline"></span> 2</li>
</ul></li>
</ol>
<h5 id="par-valeurrésultat">2) Par valeur/résultat</h5>
<ol type="1">
<li>Calcul d'adressage
<ul>
<li><span class="math inline"><em>P</em><sub>1</sub></span> <code>= &amp;A[1]</code></li>
</ul></li>
<li>Exécution du <code>IN</code></li>
</ol>
</body>
</html>