From 15adaa105b3eac3ed9b0c5f85cbff82b15ae6b12 Mon Sep 17 00:00:00 2001
From: xdrm-brackets
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
+swap(i, A[i]);
IN
)Notations:
+a := b
notation affectation algoa
←b
notation affectation internei := 2
(i
←2
);
A[2] := 99
(A[2]
←99
)
x
←i
(x
←2
)y
←A[2]
(y
←99
)z := x;
(z
←2
)x := y;
(x
←99
)y := z;
(y
←2
)= &i
= &A[i] = &A[2]
x
←i
(x
←2
)y
←A[2]
(y
←99
)z := x
(z
←2
)x := y
(x
←99
)y := z
(y
←2
)i := 2
(i
←2
)A[2] := 99
(A[2]
←99
)x
(i
←99
)y
(A[2]
←2
)Conclusion : i
et A[2]
ont été échangés et permutés
Mêmes étapes que 2)
, mais dans l'ordre suivant : b, c, a, d
Notation : Pour une variable x
, on appelle :
l.value
de x
, son emplacement (adresse) l(eft)r.value
, la valeur de x
r(ight)x := 10
(left := right)l.value
de x
est la même que celle de i
+l.value
de y
est la même que celle de A[i]
c'est à dire A[2]
z := x
(z
←2
)x := y
(x
←99
)y := z
(A[2]
←2
)i
et A[2]
on été permutész := x
→ z
←i
x := y
→ i
←A[i]
y := z
→ A[i]
←z
z := i
(z
←2
i := A[i]
(i
←A[2]
←99
)A[i] := z
(A[99]
←2
)i
a été changéA[2]
inchangé maisA[99]
a été modifiéProcedure Quelmode(x)
+ A[1] := 6;
+ elt := 2;
+ x := x+3;
+IN
+= &A[1]
IN
diff --git a/paradigmesdeprogrammation/td/1.md b/paradigmesdeprogrammation/td/1.md new file mode 100644 index 0000000..495e1fc --- /dev/null +++ b/paradigmesdeprogrammation/td/1.md @@ -0,0 +1,174 @@ +### Exercice 1: + + 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 + +#### Q: Quel est l'effet de l'appel `swap(i, A[i]);` + +1. Passage par valeur (`IN`) +2. ... / résultat (ADA) +3. ... / (ALGOLW) +4. ... par référence +5. ... par noms + + +**Notations:** + +* `a := b` notation affectation algo +* `a `$\leftarrow$` b` notation affectation interne + +#### Opérations d'affectation + + +`i := 2` (`i `$\leftarrow$` 2`); + +`A[2] := 99` (`A[2] `$\leftarrow$` 99`) + + + + +##### 1) Passage par valeur + +1. Execution de "IN" : Mettre la valeur dans les paramètres formels + * `x `$\leftarrow$` i` (`x `$\leftarrow$` 2`) + * `y `$\leftarrow$` A[2]` (`y `$\leftarrow$` 99`) +2. Execution du code + * `z := x;` (`z `$\leftarrow$` 2`) + * `x := y;` (`x `$\leftarrow$` 99`) + * `y := z;` (`y `$\leftarrow$` 2`) + +##### 2) Passage par valeur/résultat (IN OUT ADA) + +1. Calcul d'adressage + * $P_1$ ` = &i` + * $P_2$ ` = &A[i] = &A[2]` +2. Exécution du "IN" + * `x `$\leftarrow$` i` (`x `$\leftarrow$` 2`) + * `y `$\leftarrow$` A[2]` (`y `$\leftarrow$` 99`) +3. Exécution du code + * `z := x` (`z `$\leftarrow$` 2`) + * `x := y` (`x `$\leftarrow$` 99`) + * `y := z` (`y `$\leftarrow$` 2`) +4. Exécution du "OUT" : Mettre la valeur des paramètres effectifs + * `i := 2` (`i `$\leftarrow$` 2`) + * `A[2] := 99` (`A[2] `$\leftarrow$` 99`) + * dans les paramètres effectifs **à travers le calcul d'adressage:** + * $P_1 \leftarrow$` x` (`i `$\leftarrow$` 99`) + * $P_2 \leftarrow$` y` (`A[2] `$\leftarrow$` 2`) + +Conclusion : `i` et `A[2]` ont été échangés et permutés + +##### 3) Passage par valeur/résultat (ALGOLW) + +Mêmes étapes que `2)`, mais dans l'ordre suivant : b, c, a, d + +##### 4) Passage de paramètre par référence + +**Notation** : Pour une variable `x`, on appelle : + +* `l.value` de `x`, son emplacement (adresse) _l(eft)_ +* `r.value`, la valeur de `x` _r(ight)_ +* mémo: `x := 10` (_left_ := _right_) + + +1. `l.value` de `x` est la même que celle de `i` + * `l.value` de `y` est la même que celle de `A[i]` c'est à dire `A[2]` +2. Exécution du code + * `z := x` (`z `$\leftarrow$` 2`) + * `x := y` (`x `$\leftarrow$` 99`) + * `y := z` (`A[2] `$\leftarrow$` 2`) + * **Conclusion:** `i` et `A[2]` on été permutés + + +##### 5) Passage pde paramètre par nom + +1. Substitution des paramètres formels par les paramètres effectifs de manière textuelle **sans évaluation** + * `z := x` $\rightarrow$ `z `$\leftarrow$` i` + * `x := y` $\rightarrow$ `i `$\leftarrow$` A[i]` + * `y := z` $\rightarrow$ `A[i] `$\leftarrow$` z` +2. Exécution du code + * `z := i` (`z `$\leftarrow$` 2` + * `i := A[i]` (`i `$\leftarrow$` A[2] `$\leftarrow$` 99`) + * `A[i] := z` (`A[99] `$\leftarrow$` 2`) +3. **Conclusion:** + * `i` a été changé + * `A[2]` inchangé mais + * `A[99]` a été modifié + + + +### Exercice 2 + + Procedure Quelmode(x) + A[1] := 6; + elt := 2; + x := x+3; + +* A[1] := 1 (A[1] $\leftarrow$ 1) +* A[2] := 2 (A[2] $\leftarrow$ 2) +* elt := 1 (elt $\leftarrow$ 1) + +##### 1) Appel par valeur + +1. Exécution du `IN` + * x $\leftarrow$ A[elt] (x $\leftarrow$ A[1] $\leftarrow$ 1) +2. Exécution du code + * A[1] := 6 (A[1] $\leftarrow$ 6) + * elt := 2 (elt $\leftarrow$ 2) + * x := x+3 (x $\leftarrow$ 4) +3. **Conclusion:** + * A[1] $\leftarrow$ 6 + * A[2] $\leftarrow$ 2 + * elt $\leftarrow$ 2 + +##### 2) Par valeur/résultat (IN OUT ADA) + +1. Calcul d'adressage + * $P_1$ ` = &A[1]` +2. Exécution du `IN` + * x <- A[1] (x <- 1) +3. Exécution du code + * A[1] := 6 + * elt := 2 + * x := x+3 (x <- 4) +4. Exécution du "OUT" : Mettre la valeur des paramètres effectifs + * $P_1 \leftarrow $ A[1] (A[1] <- 4) + +##### 3) Par valeur/résultat (ALGOLW) + + +### Exercice 3: + + var elt : entier init à 1; + A[] : tableau d'entiers init à 0; + + Procedure quelmdoe(x, y) + debut + elt := elt + 1; + A[x] := 5+elt; + y := y+A[x]; + fin + + Procedure Inc() + debut + elt := elt + 1; + + return(elt); + fin + diff --git a/paradigmesdeprogrammation/td/compile b/paradigmesdeprogrammation/td/compile new file mode 100755 index 0000000..a7959af --- /dev/null +++ b/paradigmesdeprogrammation/td/compile @@ -0,0 +1,3 @@ +#!/bin/sh + +pandoc -f markdown -t html5 --css ../../../dependencies/pandoc.css $1.md -o compiled/$1.html diff --git a/paradigmesdeprogrammation/td/compiled/1.html b/paradigmesdeprogrammation/td/compiled/1.html new file mode 100644 index 0000000..5b99897 --- /dev/null +++ b/paradigmesdeprogrammation/td/compiled/1.html @@ -0,0 +1,175 @@ + + +
+ + + +
+ + + + +
+