1def carre_plus_petit(x):
2n=0
3while n**2<=x:#tant que n au carré est plus petit que x
4n=n+1#ou de manière équivalente n+=1
5#tant que n**2<=x est vrai, la boucle continue.
6return n-1#on renvoie la dernière valeur qui rendait la condition de la
boucle vraie
Exercice 2.
Exercice 2.
Écrire une fonction qui prenne en argument un nombre pet qui renvoie le premier indice de la
suite (un)dénie plus haut telle que un≥p.
3. Invariant de boucle
Dénition 1.
Dénition 1. gInvariant de boucleInvariant de boucle
Un invariant de boucle est une assertion telle que :
i) Initialisation Cette assertion est vraie avant la première itération de la boucle ;
ii) Conservation si cette assertion est vraie avant une itération de la boucle, elle le reste
avant l’itération suivante ;
Cet invariant de boucle va nous permettre à la fois d’écrire nos algorithmes et de prouver qu’il
fonctionne (la correction d’un algorithme, que l’on abordera plus tard).
a. Cas de la boucle for
Dans le cas d’une boucle for, l’invariant de boucle va nous servir à écrire notre algorithme. Voici
comment le déterminer sur un exemple. Reprenons notre fonction qui calcule le terme d’indice nde la
suite un:
1def suite(n):
2u=1
3for iin range(n):
4u=3*u+2
5return u
On cherche donc une assertion (une proposition) qui vérie les points i) et ii) de la dénition précé-
dente : la voici
À l’entrée du i-ème tour de boucle, la variable uprend la valeur ui
Une fois que l’on a donné cet invariant, on se rend compte que l’instruction u=3*u+2dans le bloc
du for est naturelle puisqu’elle doit satisfaire à l’invariant de boucle.
En eet, si à l’entrée de la boucle indexée par i,ucontient ui, alors on aura, après l’instruction u=3*u+2
dans le tour de boucle indexée par i
3