Académique Documents
Professionnel Documents
Culture Documents
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 .