Exercice 2

Exercice 2#

Question 1

On considère le programme suivant :

int a;

void g(vector<int> t, int i) {
    int k = a + i;
    t[i] = k;
    // ICI
}

void f(int b) {
    a = a - 1;
    b = b + 1;
    vector<int> t = vector<int>(b);
    for ( int i = 0; i < 3; i++ )
        t[i] = 2 * i;
    g(t, b - 1);
}

int main() {
    a = 4;
    int b = a;
    f(b);
    // LÀ
    return 0;
}
  1. Soulignez la ou les déclaration(s) de paramètre(s) formel(s).

    BEGIN SOLUTION

    Paramètres t et i de g et b de f.

    END SOLUTION

  2. Encadrez d’un rectangle la ou les déclaration(s) de variable(s) locale(s).

    BEGIN SOLUTION

    Variables locales k déclarée dans g, t et i déclarées dans f et b déclarée dans main.

    END SOLUTION

  3. Entourez d’un rond la ou les déclaration(s) de variable(s) globale(s).

    BEGIN SOLUTION

    Variable a déclarée tout en haut.

    END SOLUTION

  4. Sur votre brouillon, exécutez pas-à-pas le programme. En suivant les conventions du cours, représentez ci-dessous la pile et le tas au moment où l’exécution atteint la ligne marquée «ICI».

    BEGIN SOLUTION

                       ┌───────────────┬────┐
                       │ int k         │  7 │       ┌─┬─┬─┬─┬─┐
                       │ int i         │  4 │       │0│2│4│?│7│
                     g │ vector<int> t │ 5 ●┼──────>└─┴─┴─┴─┴─┘
                       │ vector<int> t │ 5 ●┼──────>┌─┬─┬─┬─┬─┐
                     f │ int b         │  5 │		│0│2│4│?│?│
                  main │ int b         │  4 │		└─┴─┴─┴─┴─┘
    variables globales │ int a         │  3 │
                       ├───────────────┴────┤
                       │         ...        │
                       └────────────────────┘     ──────────────────
                                 Pile                   Tas
    

    END SOLUTION

  5. Quelles sont les valeurs de a et b lorsque l’exécution du programme atteint la ligne marquée «»?

    BEGIN SOLUTION

    variable globale a: 3; variable locale b: 4

    END SOLUTION