PCSI – Lycée Dupuy de Lôme – 2019/2020 B OUCLES FOR ET WHILE - C ORRIGÉ Exercice 1 Quelle est la valeur de la variable s à la suite de ces instructions ? On complètera le tableau. s 0 1 1 5 5 s =0 q =21 i =4 while q !=0 and i>0 : s = s +( q %2)*2**(4 - i ) q = q //2 i =i -1 print ( s ) q 21 10 5 2 1 i 4 3 2 1 0 arrêt s =5 Exercice 2 1. Écrire un programme qui demande de saisir un entier naturel non nul n et qui affiche le produit P n = 1 × 2 × 3 × · · · × n. n = int ( input ( ’ Saisir un entier n ’ )) P =1 for k in range (1 , n +1): P=P*k print ( ’P = ’ ,P ) 2. Écrire un programme qui calcule la plus petite valeur de n pour laquelle le produit P n est supérieur ou égal à 1000 ? # initialisation n =1 P =1 # boucle while while P <1000: n = n +1 P=P*n print ( ’n = ’ ,n ) Exercice 3 (n + 2) Soit (Q n ) la suite définie par Q 0 = 1 et Q n+1 = Q n pour tout n ∈ N. 2 1. Écrire un programme qui demande de saisir un entier n et affiche la valeur de Q n . n = int ( input ( ’ Saisir un entier n ’ )) Q =1 for k in range ( n ): Q = Q *( n +2)/2 print ( ’Q = ’ ,Q ) 1 PCSI – Lycée Dupuy de Lôme – 2019/2020 2. Écrire un programme qui calcule la plus petite valeur de n pour laquelle Q n est supérieur ou égal à 1000. # initialisation n =0 Q =1 # boucle while while Q <1000: Q = Q *( n +2)/2 n = n +1 print ( ’n = ’ ,n ) Exercice 4 1. Écrire un programme qui demande un entier naturel et affiche toutes les puissances de 2 qui sont inférieures ou égales à ce nombre. n = int ( input ( ’n = ’ )) # initialisation p =1 # 2**0 # boucle while while p <= n : print (n , ’ est inf é rieur ou é gal à ’ ,p ) p =2* p 2. Modifier le programme précédent pour qu’il affiche uniquement la valeur de la plus grande puissance de 2 qui soit inférieure ou égale à ce nombre. n = int ( input ( ’n = ’ )) # initialisation p =1 # 2**0 # boucle while while p <= n : p =2* p print ( p //2) Exercice 5 Le but de cet exercice est de (re)programmer la commande element in liste permettant de savoir si un élément appartient à une liste donnée. On n’utilisera donc pas x in L. 1. Écrire un programme qui demande de saisir un réel x puis affiche si celui-ci appartient à la liste L=[1,2,5,6,-2,0,5,4,8,-1] ou non. L = [1 ,2 ,5 ,6 , -2 ,0 ,5 ,4 ,8 , -1] x = float ( input ( ’x = ’ )) test = 0 # variable é gale à 1 si x est dans L et é gale à 0 sinon . for k in range ( len ( L )): if L [ k ] == x : test = 1 # Pour terminer on regarde si test vaut 0 ou 1 2 PCSI – Lycée Dupuy de Lôme – 2019/2020 if test == 1 : print ( " x appartient à L " ) else : print ( " x n ’ appartient pas à L " ) 2. Modifier ce programme pour qu’il affiche, si x appartient à la liste, le numéro d’une place occupée par x (la première rencontrée). L = [1 ,2 ,5 ,6 , -2 ,0 ,5 ,4 ,8 , -1] x = float ( input ( ’x = ’ )) # On va faire un boucle while pour s ’ arr ê ter au 1 er x k = 0 while k < len ( L ) and L [ k ] != x : k = k +1 # Si k = len ( L ) à la fin , c ’ est qu ’ on a parcouru toute la liste sans succ è s . if k == len ( L ) : print (x , " n ’ appartient pas à la liste " ) else : print (x , " est pr é sent en position " , k ) 3. Écrire un programme qui demande de saisir un réel x puis affiche le nombre d’occurence de x dans la liste L précédente. x = float ( input ( ’x = ’ )) compteur =0 for a in L : if a == x : compteur = compteur +1 print (x , ’ est pr é sent ’ , compteur , ’ fois ’) Exercice 6 Bonus - Jeu de Nim Le but de cet exercice est de programmer le jeu de Nim (ou jeu des bâtons). Au début, on dispose de 20 bâtons alignés. Les deux joueurs vont, à tour de rôle, enlever 1, 2 ou 3 bâtons. Le joueur qui laisse 1 bâtons à la fin a gagné. 1. On définit une variable joueur égale à 1 ou 2 (numéro du joueur dont c’est le tour). Écrire une commande d’une ligne permettant de passer d’un joueur à l’autre : • si joueur=1, alors joueur prend la valeur 2 ; • si joueur=2, alors joueur prend la valeur 1. joueur = joueur %2+1 3 PCSI – Lycée Dupuy de Lôme – 2019/2020 2. Programmer le jeu. À chaque tour, on affichera ’Joueur 1’ ou ’Joueur 2’ puis on lui demandera de saisir le nombre de bâtons qu’il souhaite enlever et enfin le nombre de bâtons restant. Le jeu s’arrête quand il reste un seul bâton. On affichera le numéro du perdant et le numéro du gagnant. # programme fonctionnant si les propositions des joueurs sont coh é rentes . joueur =1 batons =20 print ( ’ Il y a ’ , batons , ’b â tons ’) while batons>1 : print ( ’ Joueur ’ , joueur ) N = int ( input ( ’ Combien enlevez - vous de batons (1 ,2 ou 3)? ’ )) batons = batons - N print ( ’ Il reste ’ , batons , ’b â tons ’) joueur = joueur %2+1 print ( ’ Joueur ’ , joueur , ’a perdu ’) print ( ’ Joueur ’ , joueur %2+1 , ’a gagn é ’) 4