Aller au contenu

Ep 28

▶ TĂ©lĂ©charger le sujet en pdf.

EXERCICE 1⚓

Écrire une fonction qui prend en paramĂštre un tableau d'entiers non vide et qui renvoie la moyenne de ces entiers. La fonction est spĂ©cifiĂ©e ci-aprĂšs et doit passer les assertions fournies.

RĂ©ponse

Complétez le code ci-dessous

###
def moyenne (tab):bksl-nl '''bksl-nl moyenne(list) -> floatbksl-nl Entrée : un tableau non vide d'entiersbksl-nl Sortie : nombre de type floatbksl-nl Correspondant à la moyenne des valeurs présentes dans lebksl-nl tableaubksl-nl '''bksl-nlbksl-nl assert moyenne([1]) == 1bksl-nl assert moyenne([1, 2, 3, 4, 5, 6, 7]) == 4bksl-nl assert moyenne([1, 2]) == 1.5bksl-nlbksl-nl



Solution

###
def moyenne(tab):bksl-nl '''bksl-nl moyenne(list) -> floatbksl-nl Entrée : un tableau non vide d'entiersbksl-nl Sortie : nombre de type floatbksl-nl Correspondant à la moyenne des valeurs présentes dans lebksl-nl tableaubksl-nl '''bksl-nl somme = 0bksl-nl for elt in tab:bksl-nl somme += eltbksl-nl return somme / len(tab)bksl-nlbksl-nl



EXERCICE 2⚓

Le but de l'exercice est de compléter une fonction qui détermine si une valeur est présente dans un tableau de valeurs triées dans l'ordre croissant.

L'algorithme traite le cas du tableau vide et il est Ă©crit pour que la recherche dichotomique ne se fasse que dans le cas oĂč la valeur est comprise entre les valeurs extrĂȘmes du tableau.

On distingue les trois cas qui renvoient False en renvoyant False, 1 , False, 2 et False, 3.

Compléter l'algorithme de dichotomie donné ci-aprÚs.

RĂ©ponse

Complétez le code ci-dessous

###
def dichotomie(tab, x):bksl-nl """bksl-nl tab : tableau triĂ© dans l’ordre croissantbksl-nl x : nombre entierbksl-nl La fonction renvoie True si tab contient x et False sinonbksl-nl """bksl-nl # cas du tableau videbksl-nl if ...:bksl-nl return False, 1bksl-nlbksl-nl # cas oĂč x n'est pas compris entre les valeurs extrĂȘmesbksl-nl if (x < tab[0]) or ...:bksl-nl return False, 2bksl-nlbksl-nl debut = 0bksl-nl fin = len(tab) - 1bksl-nl while debut <= fin:bksl-nl m = ...bksl-nl if x == tab[m]:bksl-nl return ...bksl-nl if x > tab[m]:bksl-nl debut = m + 1bksl-nl else:bksl-nl fin = ...bksl-nl return ...bksl-nlbksl-nl



Solution

###
def dichotomie(tab, x):bksl-nl """bksl-nl tab : tableau triĂ© dans l’ordre croissantbksl-nl x : nombre entierbksl-nl La fonction renvoie True si tab contient x et False sinonbksl-nl """bksl-nl # cas du tableau videbksl-nl if tab == []:bksl-nl return False, 1bksl-nlbksl-nl # cas oĂč x n'est pas compris entre les valeurs extrĂȘmesbksl-nl if (x < tab[0]) or (x > tab[-1]):bksl-nl return False, 2bksl-nlbksl-nl debut = 0bksl-nl fin = len(tab) - 1bksl-nl while debut <= fin:bksl-nl m = (debut + fin) // 2bksl-nl if x == tab[m]:bksl-nl return Truebksl-nl if x > tab[m]:bksl-nl debut = m + 1bksl-nl else:bksl-nl fin = m - 1bksl-nl return False, 3bksl-nlbksl-nl



Exemple :

🐍 Script Python
    >>> dichotomie([15, 16, 18, 19, 23, 24, 28, 29, 31, 33],28)
    True
    >>> dichotomie([15, 16, 18, 19, 23, 24, 28, 29, 31, 33],27)
    (False, 3)
    >>> dichotomie([15, 16, 18, 19, 23, 24, 28, 29, 31, 33],1)
    (False, 2)
    >>> dichotomie([],28)
    (False, 1)