• Aucun résultat trouvé

Correction TP 10 :Test et V´erification d’algorithmes

N/A
N/A
Protected

Academic year: 2022

Partager "Correction TP 10 :Test et V´erification d’algorithmes"

Copied!
4
0
0

Texte intégral

(1)

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

(2)

{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

(3)

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

(4)

(¬(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

Références

Documents relatifs

Check that the composition of word-level interpretations of components matches the specification of the circuit by direct construction of a *BMD.. Need of high-level knowledge about

Écrire une fonction en Python qui prend en argument une liste de nombres, calcule les écarts en valeur absolue entre chaque nombre de la liste et la moyenne de ces nombres, et

[r]

[r]

L’it´ eration de la division enti` ere par 2 m` ene ` a 0, et le case de base 0 se termine par l’ex´ ecution de retourner.. – puissance se termine si on remplace l’appel `

Si l’algorithme se termine pour la valeur n−1 alors il se termine aussi pour la valeur n est excutant retourner.. – somme ne se termine pas lorsque n est

En un sommet de la grille donn´ e on a le choix de monter ou d’avancer, le nombre de chemin est donc la somme des nombres de chemins qui commen¸ cent par monter (Chemin(l −1, L)) et

4) On veut diluer 10 fois la solution mère. Expliquez comment procéder pour préparer 100mL de solution fille avec le matériel disponible. On complète avec de l'eau distillée