NSI (terminale) · Chapitre 10 · Exercice d'entraînement
Tester une dichotomie contre une version naïve
Modularité, mise au point et tests · Jeux de tests · niveau 3 (difficile)
Énoncé
Tester une dichotomie contre une version naïve. On veut tester la fonction suivante, qui cherche x dans une liste t triée par ordre croissant.
def recherche_dicho(t, x):
"""Precondition : t est triee par ordre croissant.
Renvoie un indice i tel que t[i] == x, ou -1 si x n'est pas dans t."""
g, d = 0, len(t) - 1
while g <= d:
m = (g + d) // 2
if t[m] == x:
return m
elif t[m] < x:
g = m + 1
else:
d = m - 1
return -1
- Écrire une fonction
test_cas_limites()contenant au moins six assertions : liste vide, liste à un élément (présent ou absent), valeur en première et en dernière position, valeur absente plus petite que tout, plus grande que tout, ou comprise entre deux valeurs. - La postcondition ne fixe pas quel indice renvoyer quand
xapparaît plusieurs fois. Comment écrire une assertion qui reste juste dans ce cas ? - Écrire une fonction
test_aleatoire(n)qui fabriquenlistes triées aléatoires (modulerandom) et compare, pour chacune, le résultat derecherche_dichoà celui du testx in t, dont on est sûr. - Un élève remplace
while g <= dparwhile g < d. Donner un test de la question 1 qui détecte l'erreur.
Un exercice à chercher : son corrigé n'est pas publié. Sur Adloun, le tuteur guide par questions, sans donner la réponse.