1 Algorithme de boucle conditionnelle

publicité
Informatique
Cours S1.5
Boucle conditionnelle
1 Algorithme de boucle conditionnelle
La structure d'un algorithme de boucle conditionnelle fait intervenir :
• l'instruction de boucle conditionnelle (while en python),
• un test dont le résultat est un booléen (vrai True ou faux False),
• la liste des instructions à répéter tant que le test est vrai.
Exemple : algorithme d'une boucle conditionnelle permettant la saisie de chiffres entiers tant qu'il s'agit
effectivement de chiffre entier.
Entrée : une chaine de caractères chaine supposée contenir un entier
Résultat : une liste liste contenant les entiers saisis
En pseudo code :
Ecrire 'Entrer un chiffre entier (ou un autre caractère pour terminer la saisie) : '
chaine ← Saisir
Tant que ('0' <= chaine) et (chaine <= '9') alors
# les chiffres se suivent dans le codage des caractères
liste ← ajouter l'entier de la chaine à la liste
Afficher ('La nouvelle liste des entiers saisis est :')
Afficher (liste)
Ecrire ('Entrer un chiffre entier (ou un autre caractère pour terminer la saisie) : ' )
chaine ← Saisir
Fin Tant que
En python :
chaine = input ( 'Entrer un chiffre entier (ou un autre caractère pour terminer la saisie) : ' )
while ('0' <= chaine) and (chaine <= '9'):
liste = liste + [ int(chaine) ]
print ('La nouvelle liste des entiers saisie est :')
print (liste)
chaine = input ('Entrer un chiffre entier (ou un autre caractère pour terminer la saisie) : ' )
Syntaxe obligatoire :
- while en minuscule annonce le test à venir
- le test est une expression dont le résultat est un booléen (True ou False)
-
: les deux points annoncent la fin de l'expression du test et le début des instructions à réaliser
les instructions à réaliser dans le cas d'un test positif (True) doivent être indentés (décalées par
-
rapport à l'instruction while). Une instruction minimum est obligatoire
la fin de l'indentation annonce la fin des instructions à répéter
-
Remarque : la variable (ici chaine) utilisée dans le test et modifiée par les instructions répétées doit avoir
reçue une affectation avant l'instruction while.
Remarque :
- une expression est un groupe d'opérandes (nombre, chaine…) liés par des opérateurs (+,*,/,==,…)
qui renvoie une valeur,
Exemples : 1+2
'0' <= chaine
liste + [ int(chaine) ]
- une instruction est exécutée et peut contenir une ou plusieurs expressions.
Exemples : print (1+2)
liste ← liste + [ int(chaine) ]
En d'autres termes une expression fait plutôt référence à un élément d'une ligne de commande, alors
qu'une instruction correspond à une ligne complète.
Lycée Jules Ferry Cannes
Page 1 sur 2
TSI1
Informatique
Cours S1.5
Boucle conditionnelle
Les expressions du test sont les mêmes qu'avec l'instruction conditionnelle if.
2 Précaution lors de l'usage d'une boucle conditionnelle
Le danger particulier d'une boucle while est de ne jamais s'arrêter : le programme tourne indéfiniment dans
la boucle. Cela impose de forcer l'arrêt du programme (ctrl-c par exemple) ce qui n'est jamais souhaitable.
SOLUTION :
il faut s'assurer que le test pourra devenir faux : les instructions de la boucle doivent agir sur les variables
du test de telle façon que le test puisse devenir faux.
Idéalement lors d'opérations répétitives, on utilise un variant de boucle (entier positif) qui décroit (ou
croit constamment) jusqu'à atteindre une valeur entière (zéro par exemple).
Exemple :
# Entrée :
un tableau T de nombres triés par ordre croissant T[0..n]
#
un nombre x
# Sortie :
un tableau T de nombres triés par ordre croissant T[0..n+1] contenant x
T=[ 0 , 1.5 , 1.7 , 2] # valeur initiale de la table T
x=1.6
# nombre à insérer à T
i= len(T)-1
# i est affecté du numéro de dernier indice de T
T=T+ [ x ]
# on ajoute un élément à la liste T (par défaut x est supposé être le plus grand)
while (T[i] > x and i > 0) :
T[i+1]=T[i]
T[i]=x
i=i-1
print ( 'Nouvelle liste triée :', T)
i est un variant de boucle : entier positif et qui décroit à chaque boucle jusqu'à la valeur 0 (sauf si x
est effectivement le plus grand élément, dans ce dernier cas les instructions de la boucle while ne
sont jamais exécutées).
PREUVE :
Mathématiquement on peut prouver si une algorithme délivre bien le résultat attendu à partir d'un
invariant de boucle :
- propriété vraie lors de l'initialisation,
- propriété vraie pour chaque valeur du variant de boucle,
- propriété vraie en fin de boucle et qui montre que le résultat est bien celui attendu.
L'invariant de boucle est souvent difficile à trouver.
Exemple : l'invariant de boucle de l'algorithme précédent est :
la juxtaposition des tableaux T[0, i] et T[i+ 2, n+1] est égale au tableau initial et x est plus petit que
tous les éléments du deuxième tableau.
Solution pratique pour vérifier que l'algorithme donne les résultats attendus : tester avec des valeurs
particulières (mais ce n'est pas une preuve).
Exemple : -1, 1.6 puis 3 permettraient de vérifier que l'algorithme classe correctement les valeurs.
Références : http://www.mpsi-lycee-saint-exupery.fr
Lycée Jules Ferry Cannes
Page 2 sur 2
TSI1
Téléchargement