2. écrire l’algorithme
3. Justifier sa correction composée de :
— la correction partielle (sous réserve de terminaison)
— La terminaison .
—
Le couple précondition/postcondition représente un contrat : on garantie que
sous réserve que la précondition est vérifiée au début, la postcondition le sera à
la fin.
—
Justifier la correction partielle du programme consiste à démontrer que l’algo-
rithme respecte le contrat pour toutes les valeurs pour lesquelles l’algorithme
termine.
Dans le cas d’une boucle ’for’ ou ’while’ :
—
définir un invariant de boucle pour une boucle
for
ou
while
qui est une
propriété qui est vraie à l’entrée de la boucle et qui, si elle est vraie en début
de tour de boucle, est vraie à la fin du tour. Dans ce cas, à la sortie du dernier
tour de boucle, on obtient le résultat cherché.
— justifier cet invariant de boucle.
— Prouver la correction partielle du programme ie montrer que
(Precond + condition d’arrêt de la boucle ⇒Postcond ).
Pour une boucle ’while cond’, la condition d’arrêt est ’non cond’
Pour une boucle ’for i in range(n)’, la condition d’arrêt est ’i=n-1’.
La question de la terminaison ne se pose
que pour une boucle «tant que condition
».
On la justifie en :
—
définissant un variant de boucle qui est une valeur
entière
,
positive
et
décrois-
sant strictement à chaque tour de boucle ;
—
justifiant ce variant de boucle pour en déduire la terminaison (ie condition fausse)
2 Exemples classiques
2.1 Division euclidienne
Calculer quotient et reste d’une division euclidienne en utilisant pour seules opéra-
tions arithmétiques l’addition et la soustraction.
2.1.1 Spécifier le problème
Étant donné deux entiers
n
et
d
, avec
d > 0
et
n≥0
, on veut retourner l’unique
couple d’entiers (q, r)tel que n=dq +ret 0≤r < d.
3