Correction TP 10 :Test et V´erification d’algorithmes
Licence 2 MASS semestre 2, 2007/2008
Exercice 1 : Jeux de tests
Quelques propositions de tableaux avec :
• xest dans la premi`ere case du tableau
• xest dans la derni`ere case du tableau
• xn’est pas dans le tableau
• le tableau est vide (n=0)
• xest dans une case au milieu de tableau (pas la premi`ere et pas la derni`ere ...)
Exercice 2 : Echange de variables
2 techniques sont possibles l’une en partant de la pr-conditionx=a∧y =b, l’autre en partant de la post-conditionx=b∧y=a.
En partant de la pr-condition, on substitue la partie de droite de l’affectation dans la pr´e-condition par la partie de gauche de l’affectation pour obtenir la post-condition.
On ex´ecutant la premi`ere affectation, on obtient donc la sp´ecification : {x=a∧y =b} tmp ←x {tmp=a∧y=b}
La post-condition devient la pr´e-condition pour la deuxi`eme instruction : {tmp=a∧y=b} x←y {tmp=a∧x=b}
De mˆeme pour la troisi`eme instruction :
{tmp=a∧x=b} y←tmp {y=a∧x=b}
Ainsi, on peut en d´eduire que la sp´ecification suivante est vraie : {x=a∧y =b} A {y=a∧x=b}
Inversement, on peut proc`eder de mani`ere inverse en partant de la derni`ere post-condition et en ex´ecutant les affectations dans l’ordre inverse.
{tmp=a∧x=b} y←tmp {y=a∧x=b}
{tmp=a∧y=b} x←y {tmp=a∧x=b}
{x=a∧y=b} tmp ←x {tmp=a∧y=b}
Et encore conclure que la sp´ecification suivante est vraie :
1
{x=a∧y =b} A {y=a∧x=b}
En conclusion, nous avons montr´e que l’algorithme ´echange bien la valeur des variablesxety.
Exercice 3 : Maximum
Pour d´emontrer la sp´ecification {x=a∧y=b} B {z=max(a, b)}
Il faut montrer que les deux sp´ecifications suivantes sont vraies : {x≤y∧x=a∧y=b} z←y {z=max(a, b)}
et
{x > y∧x=a∧y=b} z←x {z=max(a, b)}
D´emontrons la premi`ere sp´ecification.
(x≤y∧x=a∧y=b)⇒(a≤b∧x=a∧y=b) D’o`u
(x≤y∧x=a∧y=b)⇒y=max(a, b)
En appliquant l’affectation, on substitue y de pr´e-condition par z, ce qui donne la sp´ecification
{y=max(a, b)} z←y {z=max(a, b)}
En affaiblissant la pr´e-condition, nous d´emontrons que la sp´ecification suiv- ante est vraie :
{x≤y∧x=a∧y=b} z←y {z=max(a, b)}
D´emontrons la seconde sp´ecification.
De mˆeme,
(x > y∧x=a∧y=b)⇒x=max(a, b)
Par substitution, on obtient {x=max(a, b)} z←x {z=max(a, b)}
En affaiblissant la pr´e-condition, nous d´emontrons que la sp´ecification suiv- ante est vraie :
{x > y∧x=a∧y=b} z←x {z=max(a, b)}
On peut donc en d´eduire que{x=a∧y =b}B{z =max(a, b)} est vraie.
L’algorithme calcule le maximum de deux variables.
Exercice 4 : Factorielle
Question 1 :
2
Op´eration k f I
k←N 5 - -
f ←1 5 1 VRAI
´evaluation dek >0 5 1 VRAI
f ←f∗k 5 5 FAUX
k←k−1 4 5 VRAI
´evaluation dek >0 4 5 VRAI
f ←f∗k 4 20 FAUX
k←k−1 3 20 VRAI
´evaluation dek >0 3 20 VRAI
f ←f∗k 3 60 FAUX
k←k−1 2 60 VRAI
´evaluation dek >0 2 60 VRAI f ←f∗k 2 120 FAUX k←k−1 1 120 VRAI
´evaluation dek >0 1 120 VRAI f ←f∗k 1 120 VRAI k←k−1 0 120 VRAI
´evaluation dek >0 0 120 VRAI Question 2 :
Depuis la post-conditionIet on v´erifie qu’en ex´ecutant les deux affectations, on obtient la pr´e-conditionN≥0.
{1∗k! =N!∧k≥0} f ←1 {f∗k! =N!∧k≥0}
{N! =N!∧N ≥0} k←N {k! =N!∧k≥0}
OrN! =N!∧N≥0 est ´equivalent N ≥0.
Donc la sp´ecification {N≥0} k←N ;f ←1 {I} est vraie.
Question 3 :
{k >0∧I} f ←f∗k;k←k−1 {I}
Montrons que en partant de la pos-condition que la sp´ecification ci-dessus est vraie.
{k−1≥0∧f∗(k−1)! =N!} k←k−1 {k≥0∧f∗k! =N!}
{k≥1∧f ∗k∗(k−1)! =N!} f←f∗k {k≥1∧f∗(k−1)! =N!}
Or,f∗k∗(k−1)! =f∗k!
donc d’apr`es la composition d’instructions, on obtient la sp´ecification {k >0∧I} f ←f∗k;k←k−1 {I}
Question 4 :
Montrons que (¬(k >0) ∧I)⇒(f =N!).
3
(¬(k >0) ∧I) ⇒ (k≤0∧k≥0∧f ∗k! =N!)
⇒ (k= 0∧f ∗k! =N!)
⇒ f =N!
Question 5 : On a montr´e que :
1. {N≥0}k←N;f ←1{I}
2. {k >0∧I}f ←f∗k;k←k−1{I}
3. (k≤0∧I)⇒f =N!
D’apr`es la propri´et´e du cours sur les it´erations tant que, on peut donc en d´eduire que la sp´ecification{N≥0}TantQuek >0 Fairef ←f∗k;k←k−1 FinTantQue{f =N!} est vraie, c’est `a dire que {N ≥0}C{f =N!} est vraie.
L’algorithme calcule la factorielle d’un nombre entier positif.
4