Instructions répétitives

publicité
Info 5
INSTRUCTIONS RÉPÉTITIVES
Itérations dans un algorithme
Le recours à des itérations, également appelées boucles, est fréquent en algorithmique.
C’est un passage particulièrement délicat de la mise au point d’un algorithme, et la rédaction
d’une boucle réclamera souvent un soin tout particulier...
1
Comprendre un algorithme contenant une boucle 2
1. Ce que produit une boucle...
On considère le programme suivant, écrit en Python :
nombre_binaire=input("Donner une séquence de bits")
longueur=len(nombre_binaire)
nombre=0
puissance=1
for i in range(1,longueur+1) :
nombre=nombre+liste[longueur-i]*puissance
puissance=puissance*2
print(nombre)
Que produit l’algorithme sous-jacent ?
2. ... et pourquoi une boucle s’arrête
On considère le programme suivant, écrit en Python :
dividende=int(input("Donner un dividende"))
diviseur=int(input("Donner un diviseur"))
quotient=0
reste=dividende
while reste>=diviseur :
quotient=quotient+1
reste=reste-diviseur
print(quotient,reste)
Justifier que l’algorithme sous-jacent se termine, et préciser ce qu’il produit.
Conception d’une boucle
1. Connaît-on
le nombre de répétitions à envisager ?
:::::::::::::::::::::::::::::::::::::::::
,→ :::
Oui : alors on utilisera plutôt une boucle avec compteur du type :
for compteur in range(n) :
instruction(s)
,→ ::::
Non : la fin des répétitions est alors décidée à l’aide d’une condition, et on
utilise alors une boucle du type :
while condition :
instruction(s)
2. Dans le cadre d’un calcul répété
i. On initialise une variable à une valeur donnée ;
ii. à chaque « tour de boucle », la valeur prise par la variable doit subir le
calcul à répéter ;
iii. à la fin de la boucle, la valeur de la variable doit être celle attendue.
3. Exemples
. Pour tout entier n > 0, on appelle factorielle de n, et on note n! :
1 × 2 × · · · × (n − 1) × n si n > 1
n! =
1
si n = 0
Ecrire un algorithme prenant en entrée un entier naturel n et retournant, en
sortie, la valeur de n!.
. Un nombre entier n > 2 est dit premier lorsqu’il n’est divisible que par 1 et
lui-même.
Ecrire un algorithme prenant
en entrée un entier naturel n et retournant, en
V rai si n est premier
sortie, la valeur booléenne
F aux sinon
4. Vérification
. Au moment de vérifier qu’une boucle produit ce que l’on souhaite,
on raisonnera comme dans le premier paragraphe.
Pour bien comprendre le résultat que renvoie une boucle, on considère
souvent une variable qui subit des changements au cours de l’itération :
(a) on relève sa valeur avant la boucle ;
(b) à l’aide des instructions itérées, on détermine sa valeur à chaque tour
de boucle ;
(c) on en déduit sa valeur à l’issue de la boucle.
L’étude précédente peut concerner plusieurs variables,
voire une propriété liée à une variable.
. Terminaison d’une boucle conditionnelle
Lorsqu’un algorithme contient une telle boucle, on doit s’assurer que celleci se termine. Pour cela, on regarde, parmi les instructions qui figurent dans
l’itération, celle(s) qui modifie(nt) la condition à laquelle les instructions
sont répétées. Si lesdites instructions garantissent que cette condition ne
sera plus vérifiée au bout d’un nombre fini d’itérations, notre boucle se
termine.
−→ Par exemple, lorsqu’on calcule la somme 12 + 22 + · · · + n2 (n étant un entier
naturel non nul donné) à l’aide de la séquence :
somme=0
for i in range(1,n+1) :
somme=somme+i*i
alors la variable somme vaut, au i-ième tour de boucle, la somme de tous les carrés
jusqu’au dernier indice considéré : ceci est valable avant la boucle, pendant la boucle,
et à l’issue de la boucle.
Cette propriété s’appelle un invariant de boucle : c’est ce qui permet de justifier
rigoureusement que la boucle produit ce qu’on veut.
Téléchargement