176 lines
7.7 KiB
HTML
176 lines
7.7 KiB
HTML
<!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 "IN" : 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>= &i</code></li>
|
|
<li><span class="math inline"><em>P</em><sub>2</sub></span> <code>= &A[i] = &A[2]</code></li>
|
|
</ul></li>
|
|
<li>Exécution du "IN"
|
|
<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 "OUT" : 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>= &A[1]</code></li>
|
|
</ul></li>
|
|
<li>Exécution du <code>IN</code></li>
|
|
</ol>
|
|
</body>
|
|
</html>
|