Feuille no3 d`exercices de programmation : la boucle ≪ while ≫ ISN

Transcription

Feuille no3 d`exercices de programmation : la boucle ≪ while ≫ ISN
Feuille no 3 d’exercices de programmation : la boucle
La boucle while permet d’exprimer des boucles plus générales que les boucles
par une condition qu’il convient de modifier dans le bloc de la boucle.
while ISN
for . L’arrêt de la boucle étant contrôlé
Analyse de programmes
Exercice 1
Calcul de somme d’entiers
Exercice 2
2
1
3
5
print tmp
i = 1
tmp = 0
while i <10:
tmp+=i
i+=1
4
Que va afficher ce bloc de
code ? Réécrire cette boucle
avec un for.
6
Variante
i = 1
tmp = 0
while i <10:
i+=1
tmp+=i
print tmp
Ce bloc est-il équivalent au précédent ? Justifier.
Écrire un programme
Exercice 3
Somme des inverses
Nous avons vu que pour nombre M il existe un entier n0 tel
que pour pour tout n > n0 ,
n
X
1
k
2 Déterminer le premier nombre de Fibonacci plus grand
que 1000.
> M
Exercice 6
Transformer un for en while
Éliminer les boucles for du programme suivant :
k=1
Écrire un programme qui pour une valeur de M trouve un n0
comme ci-dessus.
? Étudier la relation M 7→ n0 (ici n0 est le plus petit possible).
Exercice 4
Somme des carrés des inverses
Nous avons vu qu’il existe un nombre ` tel que pour tout
ε > 0, il existe un n0 tel que pour tout n > n0 ,
`−
n
X
1
k2
<
2
4
.
ε
k=1
Écrire un programme qui pour une valeur de M trouve un n0
comme ci-dessus.
? Étudier la relation ε 7→ n0 (ici n0 est le plus petit possible).
Exercice 5
Suites de nombres
1 Toto a mis 2 000e sur un compte rémunéré à 1, 5%/an.
tmp = 0
f o r i in r a n g e ( 1 , 1 0 ) :
f o r j in r a n g e ( 1 , 1 0 ) :
tmp = ( −1)∗∗( i+j )
print tmp
Exercice 7
Transformer un while en for
Éliminer la boucle while du programme suivant :
1
3
5
n = 255
i = 1
while 2∗∗ i <n :
i+=1
print i −1
Déterminer le nombre d’années nécessaires pour que
Toto double son capital.
Corriger un programme
Exercice 8
1
3
5
Variante no 1
nb = 42
tmp = 0
while ( 2 ∗ ∗ i <nb )
tmp+=1
print tmp
Que cherche à calculer le bloc ci-dessus ? Corriger ce bloc pour
qu’il affiche le bon résultat.
Exercice 9
1
3
5
Variante no 2
n = 1
while ( ( 2 ∗ ∗ n)>n )
print n
n+=1
print n
Que cherche à trouver ce bloc ? Pourquoi cela ne fonctionnet-il pas ?
Feuille no 3 d’exercices de programmation : la boucle
Exercice 10
1
3
5
7
9
Deux while imbriqués
while (suite)
ISN
suites de 0 et de 1 (vue comme des chaı̂nes de caractères). À
une telle suite, on associe une nouvelle telle suite en opérant
de la manière suivante : on lit de gauche à droite la chaı̂ne
de caractères et si on trouve la sous-chaı̂ne 10 on associe la
chaı̂ne 01, si on lit 0 on associe 0 et si on lit 1 (non suivi d’un
0) on associe 1. Ainsi on associe à la chaı̂ne 10101 la chaı̂ne
01011. Cette dernière donne 00111.
n = 42
while ( n >0):
p = 1
while ( p<n ) :
p∗=2
i f n!=p :
p/=2
n−=p
print p ,
1 Écrire un programme qui effectue se travail.
2 Quels sont les chaı̂nes qui ne sont pas modifiées par ce
programme ?
Que fait ce bloc de code ?
3 Que se passe-t-il en réitérant ce processus un nombre
Exercice 11
Jeu du commentaire
On rappelle que le jeu du commentaire est défini par s0 = 0
et que sn+1 et le commentaire de sn .
Écrire un programme qui trouve un terme de cette suite de
14 chiffres.
Exercice 12
suffisant de fois une chaı̂ne donnée ?
4 Expliquer comment réécrire un programme équivalent à
la répétition jusqu’à l’obtention d’une chaı̂ne invariante
par ce programme.
Réordonner Nous considérons les
Les mot-clefs break et continue
Exercice 13
1
3
5
7
9
11
13
Utilisation de break
n = 0
b = False
tmp = 1
while ( tmp <200):
n+=1
tmp+=1./n
i f n >1000:
b = True
break
if b:
print ” I n f i n i t y ”
else :
print n
1
3
5
7
Que fait ce bloc de code ?
Exercice 15
F Recherche de sous-chaı̂ne
Nous considérons les chaı̂nes de caractères constituées par des
0 et des 1 (termes suites des suites de nombres entiers écrits
en binaires). Une telle chaı̂ne étant donnée, on cherche à savoir si la chaı̂ne 010101 est une sous-chaı̂ne de celle-là.
Conseil : l’utilisation de break rend le code plus lisible.
Optionnel : il est possible que la chaı̂ne donnée ne soit pas
uniquement formée de 0 et de 1, auquel cas, le programme
doit en rendre compte à l’utilisateur.
Expliquer le but de l’utilisation du mot-clef break dans cet
exemple.
Exercice 14
n = 0
while ( 1 ) :
while n <10000:
n+=1
while n>0:
n−=1
continue
Ping-pong
Éliminer les for ou les while
Exercice 16
Transformer un for en while
Éliminer la boucle for du programme suivant :
1
3
s = ” Je s u i s un TX−1001. ”
for c in s :
print ord ( c )
print tmp
.
Exercice 17
Transformer un while en for
Éliminer la boucle while du programme suivant :
2
4
n = 255
i = 1
while 2∗∗ i <n :
i+=1
print i −1