Cours Stage - Corpus d'instructions élémentaires

Corpus d'instructions élémentaires

L'énoncé

Cet exercice a pour but de définir des fonctions de manipulations d'entiers. Pour chacune de vos fonctions vous écrirez en commentaire le type des paramètres et de la valeur retournée.

Pour tester vos fonctions, vous utiliserez la fonctions assert. Par exemple :

assert (1+1) == 2   #renvoie vrai, le programme peut continuer
assert (1+2) == 2   #renvoie faux, le programme s'arrête et renvoie une erreur d'assertion

 


Question 1

Ecrire une fonction absolue(x) qui renvoie la valeur absolue de x. Proposez un jeu de test comprenant au moins trois test. Par exemple :

>>> absolue(0)
0
>>> absolue(1)
1
>>> absolue(-1)
1
def absolue(x):
    """Renvoie la valeur absolue de x.
       entier (int) -> entier (int)."""
    if x < 0:
        return -x   # Le else n'est pas nécessaire ici, si le if est vérifié
    return x        # on retourne déjà une valeur (on quitte la fonction).

La valeur absolue d'un nombre est sa valeur numérique sans tenir compte de son signe.

Question 2

Ecrire une fonction addition_pos(a,b) qui renvoie la somme de a et b tels que a et b sont positifs. Proposez un jeu de test comprenant au moins trois tests. Par exemple :

>>> addition_pos(0, 1)
1
>>> addition_pos(11)
2
>>> addition_pos(1, -1)
0
def addition(a,b):
    """Renvoie la somme de a et b (a >= 0 et b >= 0).
       int * int -> int"""
    return absolue(a) + absolue(b)

On peut utiliser la fonction absolue(x) que l'on vient de créer.

Question 3

Ecrire une fonction fact(n) qui renvoie la factorielle de n. Proposez un jeu de test comprenant au moins trois tests. Par exemple :

>>> fact(0)
1
>>> fact(1)
1
>>> fact(5)
120

Quelle hypothèse peut-on faire sur n ?

def fact(n):
    """Renvoie la factorielle de n. (n>=0)
       int -> int."""
    # x : int
    x = 1
    for i in range(2, n+1):
        x *= i  # x = x * i
    return x

La factorielle d'un entier naturel n est le produit des nombres entiers strictement positifs inférieurs ou égaux à n.

Question 4

Ecrire une fonction factSuperieure(a,b) qui renvoie True si la factorielle de a est strictement supérieur à b et False sinon. Proposez un jeu de test comprenant au moins trois tests. Par exemple :

>>> factSuperieure(0, 1)
False
>>> factSuperieure(36)
False
>>> factSuperieure(4, 23)
True
def factSuperieure(a, b):
    """Renvoie True si a > b et False sinon.
       int * int -> boolean"""
    return fact(a) > b

Question 5

Soit la fonction «mystère» f ci-dessous:

def f(x,y):
"""
? * ? -> ? """
# s : ?
s = 0
# c : ?
c = 0
while factSuperieure(x,s):
s += addition_pos(x,y)
c += 1
return c

Compléter cette définition en donnant la signature de la fonction ainsi que les type à déclarer pour les variables s et c.

Selon les principes vus, effectuer une simulation de boucle correspondant à l'évaluation :

f(3,-1)

Quelle est la valeur retournée par cette application ?

def f(x,y):
"""
int * int -> int """
# s : int
s = 0
# c : int
c = 0
while factSuperieure(x,s):
s += addition_pos(x,y)
c += 1
return c

 

fact(x) s x
6  0
6  4
6  8

 

La valeur retournée est 2.