• Aucun résultat trouvé

Les boucles WHILE

N/A
N/A
Protected

Academic year: 2022

Partager "Les boucles WHILE"

Copied!
4
0
0

Texte intégral

(1)

MPSI - 2017/2018 Les boucles ”While” http://pascal.delahaye1.free.fr/

Fiche n

07 : Les boucles ”While”

R´edig´ee par Pascal Delahaye

Cette fiche contient des ´el`ements de cours `a assimiler pour le cours de la semaine suivante.

Vous devez imp´erativement :

• Travailler avec un ordinateur afin de v´erifier une `a une les diff´erentes instructions qui sont pr´esent´ees.

• V´erifier et confirmer votre assimilation en effectuant tous les exercices d’entrainement propos´es `a la fin du poly.

• Pr´evoir environ 1h30 de travail personnel.

Une ´evaluation de 10mn sera effectu´ee au prochain cours pour v´erifier la qualit´e de votre travail d’auto- apprentissage.

I] Les boucles ”While”

Lorsque l’on souhaite effectuer une mˆeme s´erie d’instructions tant qu’une condition donn´ee reste v´erifi´ee, on utilise une boucle ”while”. On identifie facilement cette situation car elle correspond au cas o`u l’on ne peut d´eterminer `a l’avance le nombre d’it´erations n´ecessaires `a la r´esolution de notre probl`eme.

Les boucleswhilese structurent de la fa¸con suivante :

Python

while "condition bool´eenne" : # Tant que la condition bool´eenne est v´erifi´ee instruction 1 # Faire les diff´erentes instructions qui suivent instruction 2

. .

instruction n .

Tant que la condition bool´eenne est v´erifi´ee, on effectue les instructions qui suivent.

Exemple 1. Ainsi, les probl`emes suivants pourront se traiter `a l’aide d’une boucle ”While” : 1. Calculer le terme un d’une suite tant que celui-ci reste inf´erieur `a 1000.

Python

while U <= 100 : ... # U est le terme de la suite calcul´e

2. Demander `a l’utilisateur de choisir un nombre tant que celui-ci ne correspond pas `a un nombre myst`ere donn´e.

1

(2)

MPSI - 2017/2018 Les boucles ”While” http://pascal.delahaye1.free.fr/

Python

while N != mystere : ... # mystere est le nombre `a trouver

# N est le nombre choisi par l’utilisateur

3. Rechercher le nombre premier suivant tant que l’on n’en a pas encore trouv´e 100.

Python

while len(L) < 100 : ... # L est la liste utilis´ee pour stocker les

# nombres premiers trouv´es

Remarque 1.

1. Il est souvent possible de remplacer une boucle ”for” par une boucle ”while” mais cela n’a pas grand int´erˆet...

Python

for k in range(1,101) : instructions

# Peut se remplacer par : k = 1

while k <= 100 : instructions k = k + 1

2. Les boucles ”while” pr´esentent un risque de boucle infinie.

Deux exemples de boucles infinies :

Python

# Exemple 1 | # Exemple 2

S = 0 | L = []

while S == 0 : | while 0 == 0 :

print("je suis une boucle infinie !") | L.append(1)

• Dans l’exemple 1, le programme ne se termine jamais, seule une action de l’utilisateur peut l’interrompre.

• Dans l’exemple 2, le programme s’arrˆete avec un message d’erreur car la liste L atteind une taille maximale.

Pour ´eviter d’obtenir une boucle infinie, il faut au minimum s’assurer que la condition est bien modifi´ee par les instructions.

Exemple 2. La suite de Syracus est d´efinie de la fa¸con suivante :

u0=A

uk+1=uk/2 siuk est pair uk+1= 3uk+ 1 siuk est impair

. D’apr`es-vous, le programme suivant pr´esente-t-il un risque de boucle infinie ?

V´erifiez votre conjecture. Qu’en pensez-vous ?

Python

def syracus(A) : U=A

while U != 1 :

if U%2 == 0 : U = U/2 else : U = 3U + 1

Exemple 3. Programme de jeu o`u il s’agit de deviner un entier compris entre 0 et 9.

Python

from random import randint def jeu() :

inconnu = randint(1,10) guess = -1

while guess != inconnu :

guess = eval(input("devinez un entier compris entre 0 et 9 : ")) print("Enfin gagn´e !")

2

(3)

MPSI - 2017/2018 Les boucles ”While” http://pascal.delahaye1.free.fr/

Am´eliorer ce programme afin :

1. qu’il renvoie le nombre d’essais qu’il vous a fallu pour trouver le nombre inconnu.

2. qu’il indique `a l’utilisateur si le nombre propos´e est trop grand ou trop petit (avec une structure de contrˆole).

Deux situations usuelles `a connaˆıtre :

1. Suites divergeant vers +∞:

Ecrire en prseudo-langage, un programme permettant de savoir `a partir de quelle valeur de nle terme g´en´eralun de la suite d´epasse une valeurA.

Application : (un) d´efinie parun=

n

X

k=1

1 k. 2. Suites adjacentes :

Ecrire en pseudo-langage, un programme qui donne une approximation de la limite commune de deux suites adjacentes (un) et (vn) `aεpr`es.

Application : On consid`ere les deux suites suivantes : (un) :un =

n

X

k=1

1

k! (vn) :vn=un+ 1

n!

Nous verrons en cours de math que les suites (un) et (vn) sont adjacentes et convergent vers e.

Concevez un programme donnant la valeur dee`a une erreurεpr`es.

Remarque 2. Il est possible en python d’interrompre le d´eroulement d’une boucle (”for” ou ”while”) `a l’aide de l’ins- tructionbreak.

Python

i=1

while i < 100 : print(2*i) i = i + 1

a = input("voulez-vous arr^eter : O ou N ? ")

if a == "O" : break # Instruction permettant d’interrompre la boucle

II] Quelques exemples

1. SoitA >0.

Construire un programme permettant de connaˆıtre la premi`ere valeur den∈N telle que n1 < A.

R´eponse Id´ee : On incr´emente la valeur de ntant que n1 ≥A.

Python

def recherche(A) : n = 1

while 1/n >= A : n = n + 1 return n

3

(4)

MPSI - 2017/2018 Les boucles ”While” http://pascal.delahaye1.free.fr/

2. Construire un programme de jeu qui compte le nombre d’essais n´ecessaires `a un joueur pour trouver un nombre myst`ere.

R´eponse

Id´ee : On s’inspire d’un programme pr´ec´edent et on ajoute un compteur.

Python

from random import randint def jeu() :

myst = randint(1,10) N = 1

A = eval(input("Choisisser un entier entre 1 et 10 : ")) while A != myst :

A = eval(input("Recommencer : ")) N = N + 1

print("Il vous a fallu ", N, " essais pour trouver")

3. Construire un programme permettant de tester si un entier naturel est un nombre premier et de renvoyer son premier diviseur si celui-ci ne l’est pas.

R´eponse Id´ee : On regarde si les nombres de2 `a⌊√

n⌋sont des diviseurs de net on s’arrˆete d`es qu’on en a trouv´e un.

Python

from math import sqrt def test_prem(n) :

d = 2

fin = int(sqrt(n))

while n%d != 0 and d <= fin:

d = d+1

if d == fin + 1 : print(n," est premier")

else : print(n, " n’est pas premier car il est divisible par ", d)

4. Construire une fonction bool´eenne permettant de savoir si un ´el´ementeest contenu dans une listeL: R´eponse

Id´ee : On parcourt tous les ´el´ements de la listeLjusqu’`a trouver e.

Python

def test(e,L) :

i = 0 # i est l’indice courant

while i < len(L) and L[i] != e : i = i+1 if i == len(L) : return False

else : return True

Expliquer pourquoi la commandewhile L[i] != e and i < len(L) : i = i+1renvoie un message d’erreur lorsqueene se trouve pas dans la listeL.

R´eponse

Parce que dans ce cas, i finit par prendre la valeur len(L) et que dans ce cas, le test L[i] != e n’est pas possible puisqueL[i]n’a pas de sens.

4

Références

Documents relatifs

Er moet altijd voor worden gezorgd dat kabels en andere flexibele componenten niet door de montage of functie kunnen worden ingeklemd.. Overschrijd de aangegeven maximale

Les Positions Ouvertes Clients enregistrées dans une Structure de Compte de Ségrégation Collective Nette pour le compte de Clients Indirects, tel que prévu à l’article

Utilisez toujours un chiffon doux et propre pour épousseter les meubles en bois et déplacez le chiffon dans le sens du fil du bois.. Lorsque vous utilisez un poli pour nettoyer

Pour connaitre les pièces dont vous aurez besoin, référez-vous à la « Liste des pièces pour l’assemblage de la table à

1726K-2 EK / CK Footboard with drawer &amp; Slat / Pied de Lit avec tiroir et lattes-Tres Grand Lit.. A Queen / EK / CK Footboard with drawer &amp; slat / Pied de Lit avec

Beyond the nature of the expansion, two additional parameters must be made precise in order to define en- forcement operators. First, enforcement can be a strict when the expected

Le langage C/C++ offre la possibilité de conditionner un traitement avec l'instruction if (ou

Lorsque l’on uti- lise une boucle while, il faut avoir un argument permettant de justifier que la condition c deviendra nécessairement fausse..