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:

Opérations d'affectation

i := 2 (i2);

A[2] := 99 (A[2]99)

1) Passage par valeur
  1. Execution de "IN" : Mettre la valeur dans les paramètres formels
  2. Execution du code
2) Passage par valeur/résultat (IN OUT ADA)
  1. Calcul d'adressage
  2. Exécution du "IN"
  3. Exécution du code
  4. Exécution du "OUT" : Mettre la valeur des paramètres effectifs

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 :

  1. l.value de x est la même que celle de i
  2. Exécution du code
5) Passage pde paramètre par nom
  1. Substitution des paramètres formels par les paramètres effectifs de manière textuelle sans évaluation
  2. Exécution du code
  3. Conclusion:

Exercice 2

Procedure Quelmode(x)
    A[1] := 6;
    elt  := 2;
    x    := x+3;
1) Appel par valeur
  1. Exécution du IN
  2. Exécution du code
  3. Conclusion:
2) Par valeur/résultat
  1. Calcul d'adressage
  2. Exécution du IN