Appels et passages de paramètres

  1. Écrivez l’algorithme suivant :

    def reutilisation(a: int, b: int, c: int) -> int:
        """
        :pré-cond: a ≥ 0, b ≥ 0, c ≥ 0
        :post-cond: d = xⁿ ou x est le plus petit nombre parmi a, b et c,
                    et n est le plus grand nombre parmi a, b et c
        """
    

    Écrivez cet algorithme sans utiliser l’opérateur ** de Python. Vous pouvez cependant utiliser certaines des fonctions du chapitre précédent1, notamment plus_petit et puissance_n.

  2. Soient les trois algorithmes (idiots) suivants :

    def toto(a: int) -> int:
        """
        :post-cond: ?
        """
        n = 4
        n = titi(a*2, n*a)
        b = 3*n - 2
        return b
    
    def titi(a: int, b: int) -> int:
        """
        :post-cond: ?
        """
        n = tutu(a+b, a*2)
        c = n-a
        return c
    
    def tutu(a: int, b: int) -> int:
        """
        :post-cond: ?
        """
        if a < b:
           c = a
        else:
           c = b
        return c
    

    On souhaite connaître la valeur obtenue après l’exécution de toto(3). Pour cela, simulez l’exécution de cette instruction en représentant les environnement d’exécution des fonctions.

  3. Calculer la somme des \(n\) premières factorielles :

    def somme_fact(n: int) -> int:
        """
        :pré-cond: n ≥ 1
        :post-conf: sf = somme des i! pour i ∈ [0, n-1]
        """
    

    On pourra bien sûr réutiliser la fonction factorielle définie au chapitre précédent… ou pas.

Indices

1

Pour trouver le plus grand nombre parmi trois, vous pouvez écrire une nouvelle fonction, ou réutiliser la fonction plus_petit en choisissant astucieusement les valeurs passées en paramètres.