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.