Le contrat ambigu
Exercice · informatique (tronc commun des prépas scientifiques), chapitre 1 — La discipline de programmation
Énoncé
On souhaite spécifier une fonction arrondi(x) renvoyant l'entier le plus proche du flottant x. Comment lever l'ambiguïté des demi-entiers (comme 2.5) ? Proposer un contrat et le jeu de tests associé.
Corrigé
Le contrat doit explicitement choisir une règle pour départager les deux entiers équidistants. On choisit de renvoyer le plus grand d'entre eux :
def arrondi(x: float) -> int:
"""Renvoie l'entier n qui minimise |x - n|.
En cas d'égalité (x de la forme k + 0.5 avec k entier), renvoie n = k + 1.
Postcondition : |x - arrondi(x)| <= 0.5
"""
Jeu de tests associé :
assert arrondi(2.3) == 2
assert arrondi(2.7) == 3
assert arrondi(2.5) == 3 # règle du demi-entier positif
assert arrondi(-2.5) == -2 # demi-entier négatif : -2 est plus grand que -3
assert arrondi(4.0) == 4 # cas nominal : valeur entière exacteLes autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.