
Question n°1
Etablir la terminaison de l’algorithme suivant :
# Entrée : un entier n ≥ 0
# Sortie : la racine carrée de n (arrondie à l’entier inférieur)
def rac(n):
c := 0
s := 1
while s ≤ n do
c := c + 1
s := s + 2 * c + 1
return c
Pour démontrer la terminaison, il suffit de mettre en évidence un variant de boucle : La quantité n − s
cette quantité :On fera remarquer que la dernière affirmation demande cependant de vérifier que la valeur de c est toujours positive (invariant facile à démontrer). On peut aussi, de façon équivalente, démontrer que la valeur de s augmente strictement à chaque itération et qu’elle est bornée par n, qui lui est constant.
Question n°2
Etablir la terminaison de l’algorithme suivant :
Entrée : a,b : entiers strictements positifs
Sortie : q, r : entiers
def mystere(a,b):
r = a ;
q = 0 ;
while r > b:
r = r − b ;
q = q + 1 ;
return (q,r)
variant de boucle v : r-b
v ne prend que des valeurs entières; v (en entrée de boucle) est positive; v décroit strictement.