TD 8 : TABLEAUX ET BOUCLES (AVANCÉ) Exercice 1 : Inversion

publicité
TD 8 : TABLEAUX ET BOUCLES (AVANCÉ)
Exercice 1 : Inversion de tableau
Proposer un algorithme optimal d’inversion de tableau (dont le nom sera A) dans
le langage J-While. On ne considérera que la division entière et la longueur du
tableau A sera notée A.length
Exercice 2 : Conception par contrat
On souhaite tester correctement notre algorithme, c’est-à-dire proposer une contractualisation complète du code.
Question 2.1 : Précondition et postcondition. On pose les prédicats suivants:
def
• prédicat “trié” : T (A, d, f ) = ∀i ∈ N, 0 ≤ i < f − 1 =⇒ A[i] < A[i + 1]
def
• prédicat “trié en ordre inverse” : T I(A, d, f ) = ∀i ∈ N, 0 ≤ i < f − 1 =⇒
A[i] > A[i + 1]
Entourer le programme de l’exercice 1 des préconditions et postconditions qui vous
semblent reflêter le fait que l’inversion d’un tableau trié produit un tableau trié en
sens inverse.
Question 2.2 : Variant et invariant. Par simulation sur deux exemples de
tableaux de tailles 5 et 6, proposez:
• Un variant de boucle V décroissant par pas de 1 et terminant en 0
• Un invariant de boucle I qui permettrait de déduire selon-vous les préconditions et postcondition proposées
• Une condition d’arrêt CA que l’on ajoutera à I et qui garantit que l’algorithme
termine pour i (sans suppose que i vaut 0 au début). Il s’agira donc de
fournir un intervalle pour i.
Question 2.3 : Algorithme contractualisé. Ajouter au code de l’algorithme
les vérification du contrat pour le variant V et l’invariant I
Exercice 3 : logique de Hoare
On veut prouver dans cet exercice que nos contrats sont corrects (ce qui nous
permettra de ne pas rendre nécessaire l’exécution du code de vérification).
Plus que les détails (assez fastidieux) de la preuve, on s’appliquera à bien suivre la
méthodologie de preuve en logique de Hoare, en comptant et nommant correctement
les étapes.
1
Téléchargement