Adloun

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 exacte

Les 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.