Appels et passages de paramètres ================================ .. include:: common.rst.inc #. .. _reutilisation: |exo| É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édent\ [#tip_reutilisation]_, notamment `plus_petit `:ref: et `puissance_n `:ref:. #. .. _appels_successifs: |exo| 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. #. .. _somme_fact: |exo| 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 `:ref: définie au chapitre précédent... ou pas. .. raw:: html .. only:: html .. rubric:: Indices .. [#tip_reutilisation] Pour trouver le plus *grand* nombre parmi trois, vous pouvez écrire une nouvelle fonction, ou réutiliser la fonction `plus_petit `:ref: en choisissant astucieusement les valeurs passées en paramètres.