NSI (première) · Chapitre 3 · Exercice de TD
Écrire est croissant(t) , qui dit si le tableau t est trié au sens…
Langages et programmation · Spécifier : prototype, préconditions, postconditions · niveau 2
Énoncé
Écrire est_croissant(t), qui dit si le tableau t est trié au sens large. Quelle est la précondition ? Que doit-elle rendre sur le tableau vide, et sur un tableau à un seul élément ? Justifier ces deux choix, puis les vérifier — ainsi que la fonction elle-même — sur tableaux aléatoires.
Corrigé
def est_croissant(t):
"""Vrai si t est trie par ordre croissant au sens large.
Precondition : les elements de t sont deux a deux comparables.
Postcondition : le resultat vaut True si et seulement si
t[i] <= t[i+1] pour tout i de 0 a len(t)-2.
"""
for i in range(len(t) - 1):
if t[i] > t[i + 1]:
return False
return True
Les deux cas limites. Sur le tableau vide et sur le singleton, la postcondition porte sur un ensemble vide d'indices : « pour tout » d'un ensemble vide est vrai. Les deux doivent donc rendre True, et c'est ce que fait le code sans cas particulier — range(-1) et range(0) sont vides. Une bonne postcondition rend les cas limites automatiques ; une mauvaise oblige à des if supplémentaires.
La précondition n'est pas « t est un tableau de nombres » mais, plus généralement, « les éléments sont comparables entre eux ». Un tableau de chaînes convient (["ali", "zoe"]), un tableau mélangeant nombres et chaînes non : la comparaison lèverait TypeError.
La vérification par oracle. Plutôt que d'écrire les réponses attendues à la main, on compare à une propriété de référence :
for _ in range(3000):
t = [random.randint(0, 6) for _ in range(random.randint(0, 8))]
assert est_croissant(t) == (t == sorted(t))
Les cas passent. Le petit intervalle de valeurs ( à ) est délibéré : il produit beaucoup d'ex æquo, donc beaucoup de cas où le « sens large » compte.
Contrôles : est_croissant([]) et est_croissant([5]) rendent True ; [1, 1, 2] rend True ; [1, 3, 2] rend False.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 16 autres exercices corrigés dans ce chapitre, et 20 à chercher avec le tuteur
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
Sans compte : le cours, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.