Vous êtes sur la page 1sur 2

Exercice 3

Preuve d’un algorithme : corrigé On considère l’algorithme suivant :


Données : un tableau t de taille N ≥ 1 de nombres réels
Résultat : ?
Exercice 1 m t[1]
Correction du programme de division euclidienne par différences successives à l’aide d’un invariant de boucle.
Pour i de 2 à N Faire
Algorithme : Si t[i] > m alors m t[i]
Données : un entier naturel a et un entier naturel b non nul Retourner m
Résultat : deux entiers naturels q et r
Conjecture : Cet algorithme renvoie le maximum du tableau t.
q 0
r a Preuve :
Tant que r b Faire
• Terminaison : L’algorithme termine car c’est une boucle « Pour ».
r r-b
• Correction : notons k le nombre de fois où la boucle est effectuée et t[a∷b] le sous-tableau de t
q q+1
Fin Tant que commençant à l’indice a et terminant à l’indice b.
Montrons l’invariant de boucle « mi = max(t[1∷1+i]) » :
Terminaison : La suite (ri)i 0 forme une suite arithmétique de raison -b < 0 ; elle diverge donc vers -∝ ; en – m0 = t[1] = t[1∷1+0] ;
conséquence, la boucle termine. – si mk = max(t[1∷1+k] alors mk+1 = max(mk , t[1+(1+k)])
Correction : Démontrons l’invariant de boucle " a = bqi + ri et ri 0 " où (i désigne le n° de l’itération). = max(max(t[1∷1+k]) , t[2+k])
o Initialisation : i = 0 : q0 = 0 et r0 = a donc bq0 + r0 = b*0 + a = a et r0 0; = max(t[1∷2+k]
A la fin de la boucle, k = N – 1 et m vaut alors m = max(t[1∷N]).
o Hérédité : si a = bqi + ri alors, comme ri+1 = ri – b 0 et qi+1 = qi + 1, bqi+1 + ri+1 = b(qi + 1) + (ri - b)
= bqi + b + ri – b Exercice 4
= bqi + ri On considère l’algorithme suivant :
= a.
En sortie de boucle, on a : a = bq + r et 0 r < b : (q , r) est bien le couple cherché ! Données : un nombre a et un entier naturel n
Résultat : un nombre p
Exercice 2 p 1
On considère l’algorithme suivant : b a
Données : un entier naturel a et un entier b m n
Résultat : un entier p Tant que m > 0 Faire
p 0 Si m est impair
m 0 Alors p p*b
Tant que m < a Faire Fin Si
p p+b b b2
m m+1 m quotient de la division euclidienne de m par 2
Fin Tant que
Fin Tant que
1. Valeur finale de p lorsque :
1. Valeur finale de p lorsque :
o (a ; b) = (3 ; 5) : 15 ;
o (a ; b) = (4 ; -3) : -12 . o (a ; n) = (3; 6) : 729 ;
Ce que semble faire cet algorithme : il semble retourner le produit a*b. k 0 1 2 3
2. Terminaison de cet algorithme : p 1 1 9 729
o (mi) est une suite arithmétique de raison 1 donc diverge vers +∝ donc m a finit par se produire. b 3 9 81 6562
o Valeur de m à la fin de la boucle : m = a en sortie de boucle. m 6 3 1 0
3. Correction de cet algorithme :
o «pi = mib» est un invariant de boucle (où i désigne le n° de l’itération). o (a ; n) = (4; 5) :
p0 = 0 et m0 = 0 donc on a bien p0 = m0b ; k 0 1 2 3
si pi = mib, comme pi+1 = pi + b et mi+1 = mi + 1, on a : pi+1 = pi + b =mib + b = (mi + 1)b = mi+1b . p 1 4 4 1024
o A la fin de la boucle, puisque m = a, on a donc la relation p = ab ce qui confirme la conjecture b 4 16 256 65536
faite.
m 5 2 1 0

1 sur 4 2013-12-21 2 sur 4 2013-12-21


Preuve d’un algor ithme

2. Exercice 6
Terminaison de l’algorithme : la suite( mi) est une suite strictement décroissante (tant que mi > 0) ALGORITHME PYTHON
d’entiers positifs ou nuls ; Fonction myst x y = def myst (x , y ):
r←0;s←y;
Valeur de m à la fin de la boucle : m = 0. r, s = 0, y
Tant que s > 0 faire
while s > 0:
3. «pbm = an» est un invariant de boucle : r←r+x; r += x
m n n
p0 = 1,m0 = n et b0 = a donc on a bien pb = 1*a = a ; s←s–1 s =1
FinTantQue;
m
si pi bi i = a n , s=y 1
s ← y – 1; t ← r;
t=r
Tant que s > 0 faire
si mi = 2mi' +1 , pi +1 = pi bi , bi +1 = bi2 et mi +1 = mi' d’où : while s > 0 :
o r←r+t; r += t
mi' ' s←s–1
= ( pi bi )(bi2 ) = pi bi2 mi +1 = pi bimi = a n ;
mi +1
pi+1bi +1 s =1
FinTantQue return r
Afficher r.
o si mi = 2mi' , pi +1 = pi , bi +1 = bi2 et mi +1 = mi' d’où :
mi' '
1. Résultat rendu par myst pour l’appel myst (3 , 2).
= pi (bi2 ) = pi bi2 mi = pi bimi = a n .
mi+1
pi +1bi+1 r 0;
n n s 2;
4. Ce que fait cet algorithme : A la sortie de la boucle, m = 0 donc on a : p = a donc il retourne a .
(* première boucle : *)
r 0+3=3;s 2 1=1;
Exercice 5
n r 3+3=6;s 1 1=0;
On représentera un polynôme P = ∑p X
k =0
k
k
par la liste [p0; p1; … ; pn] de ses coefficients. s 2 1=1;
t 6;
On considère l’algorithme suivant : (* deuxième boucle : *)
Données : la liste [p0; … ; pn] des coefficients d’un polynôme P un nombre x r 6 + 6 = 12 ; s 1 1 = 0 ;
Résultat : un nombre r 12
r 0 Donc myst (3,2) renvoie 12.
Pour i variant de n à 0 par pas de -1 Faire 2. Dans le cas général de l’appel myst (x , y) avec x ∈ et y ∈ *, conjecturer la valeur rendue et prouver
r rx + pi cette conjecture (pour ce faire on aura grand soin de préciser ses invariants de boucle).
Fin Pour
Conjecture de la valeur rendue : myst (x,y) renvoie xy2 ;
2 3
1. Valeur finale de r lorsque P = 2 + 3X - X + 3X et x = 3 : n = 3 donc ; Preuve :
k 0 1 2 3 4 → Terminaison : il est clair que les deux boucles terminent car s est décrémenté à chaque
i 3 2 1 0 itération donc les valeurs de s forment une suite arithmétique de raison 1 qui diverge donc
p 3 -1 3 2 vers .
r 0 3 8 27 83 → Correction :
ère
La valeur retournée est donc 83. 1 boucle : Invariant de boucle : p(i) : "ri = (y – si)x" où i est l’indice de l’itération.
n (i) pré-condition : initialement, r 0 = 0 et s0 = y donc "r0 = (y – s0)x donc p(0) vraie ;
2. « r = ∑ pk x k −i » est un invariant de boucle :
k =i
(ii) si p(i) vraie alors : ri+1 = ri + x et si+1 = si – 1 donc
Initialement, r = 0 ; (y – si+1)x = (y – si + 1)x = (y – si )x + x = ri + x = ri+1,
n n n n soit p(i + 1) vraie ;
si ri = ∑ pk x k −i alors : ri-1 = x*ri + pi-1 = x* ∑ pk x k −i + pi-1 = ∑p x k
k −i +1
+ pi-1 = ∑px k
k −i +1
; (iii) condition de sortie : à la sortie de boucle, lorsque s prend la valeur 0 (car y supposé
k =i k =i k =i k =i −1
n entier) donc après y itérations, p(y) étant vraie, ry = (y – 0)x = xy.
3. Que fait cet algorithme ? A la sortie de la boucle, i = 0 donc on a : r = ∑ pk x k donc il retourne p(x). ième
k =0 2 boucle : Invariant de boucle : p(i) : "ri = (y – si)xy" où i est l’indice de l’itération.
(i) pré-condition : initialement, r 0 = xy et s0 = y 1donc "r0 = (y – s0)xy donc p(0) vraie ;
(ii) si p(i) vraie alors : ri+1 = ri + t = ri + xy et si+1 = si – 1 donc
(y – si+1)xy = (y – si + 1)xy = (y – si)xy + xy = ri + xy = ri+1,
soit p(i + 1) vraie ;
(iii) condition de sortie : à la sortie de boucle, lorsque s prend la valeur 0 donc après
y 1 itérations, p(y 1) étant vraie, ry 1 = (y – 0)xy = xy2.
2
Au final, la valeur rendue par la fonction est donc bien xy .

3 sur 4 2013-12-21 4 sur 4 2013-12-21

Vous aimerez peut-être aussi