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