Introduction à l’Algorithmique et la Programmation feuille de TD: Instructions itératives Exercice - 1 Listes d’entiers et répétitions 1- Ecrire les algorithmes permettant de générer et d’afficher les séries de valeurs suivantes : a) 5 5 5 5 5 5 5 5 5 5 b) 0 1 2 3 4 5 6 7 8 9 c) 20 21 22 23 24 25 26 27 28 29 30 d) 10 9 8 7 6 5 4 3 2 1 0 e) 1 2 4 8 16 32 64 128 256 512 1024 f) 1 1 2 3 5 8 13 21 34 55 Exercice - 2 Itérations déterministes 1- écrivez un algorithme utilisant une instruction itérative déterministe pour : a- renvoyer le factoriel d’un naturel n saisi en début de programme b- afficher à l’écran tous les nombres entiers compris entre 1 et 100 qui sont des multiples d’un naturel n saisi en début de programme c- afficher à l’écran tous les nombres de 3 à n (saisi en début de programme) avec la valeur de leur factoriel 2- Pour chacune des 3 questions précédentes, écrivez la suite d’instruction en Python correspondante. Vérifiez le bon fonctionnement du programme. Exercice - 3 Itérations non déterministes Une structure itérative non déterministe répète l’exécution d’une série d’instructions en fonction de la valeur d’une expression booléenne. Les deux instructions itératives non déterministes sont TantQue et Répeter avec chacune leur spécifité d’interpétation : • l’ordre d’exécution : dans une boucle TantQue la condition est évaluée avant d’exécuter éventuellement les instructions à itérer alors que dans une boucle Répéter les instructions sont exécutées avant l’interprétation de la condition. 1 feuille de TD: Instructions itératives IAP 2016-2017 • l’évaluation de la condition : si la conditon est vraie, une nouvelle itération est effectuée avec l’instruction TantQue alors qu’il faut que celle-ci soit fausse pour effectuer une nouvelle itération avec l’instruction Répéter 1- écrivez un algorithme en utilisant l’instruction itérative indéterministe qui vous semble la plus appropriée pour les taches suivantes : a- afficher la partie entière inférieure de la racine carrée d’un entier n saisi en début de programme. On suppose ici qu’on ne dispose pas de fonction racine b- afficher la valeur u et le rang k du premier terme de la suite de Fibonacci dépassant une borne entière positive donnée p (saisi en début de programme) 2- écrivez un programme en Python correspondant à chacun des 2 exercices précédents. Vérifiez le bon fonctionnement de votre code. Exercice - 4 La tortue Une tortue effectue 100 pas sur un chemin rectiligne. A chaque pas, elle avance d’une distance aléatoire d (en cm), avec 0 < d < 5. 1- Ecrire l’algorithme qui affiche, pour chacun des 100 pas, le numéro du pas et la distance parcourue depuis le départ. 2- Ajouter un message qui indique si la tortue a parcouru au moins 250 cm après avoir marché 100 pas. 3- Modifier l’algorithme pour que la tortue s’arrête dès qu’elle a parcouru 250 cm, et afficher alors le nombre de pas qui ont été nécessaires. 4- Ecrire les programmes correspondant aux questions 2 et 3. Exercice - 5 Population 1- Une population a un effectif initial (année 0) de 100 individus. Chaque année, l’effectif augmente de 5%. On veut connaitre l’effectif au bout de 20 années (année 20). Ecrire l’algorithme correspondant. 2- On suppose maintenant que l’effectif évolue selon la règle suivante : si l’effectif est inférieur à 500, il augmente de 10% ; s’il est supérieur ou égal à 500, il diminue de 5%. Ecrire l’algorithme qui stocke dans une liste et affiche les valeurs de l’effectif au cours des années 1 à 50. Ecrire le programme correspondant. 3- Ecrire l’algorithme qui détermine et affiche l’effectif maximal sur la période complète, et l’année correspondante. Ecrire le programme correspondant. 4- Ecrire l’algorithme qui calcule et affiche la moyenne des effectifs sur la période complète (années 0 à 50). Ecrire le programme correspondant. Exercice - 6 Dessiner un sapin de Noel (comp.) Ecrire un code en python permettant de reproduire le dessin suivant dans votre fenêtre de terminal tout en utilisant une boucle while (on pourra faire varier la longueur de la base du sapin qui est ici de 21 caractères "˜") . UPMC - License Biologie Mathématiques 2 feuille de TD: Instructions itératives * ~ ~ * * * ~ ~ ~ ~ ~ * ~ * ~ * ~ * ~ * ~ ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ ~ * ~ * ~ * ~ * ~ * ~ * ~ IAP 2016-2017 ~ * ~ * ~ * ~ ~ * * * ~ ~ ~ ~ Exercice - 7 Climat (complémentaire) Le tableau ci-dessous donne la température (en degrés Celsius) enregistrée au mois de mars à Reykjavik (Islande) sur la période 1951-1960 : Année Temp. 1951 -3,9 1952 2,4 1953 -3,6 1954 -13,7 1955 4,5 1956 0,8 1957 5,3 1958 -1,9 1959 3,7 1960 -7,8 1- Ecrire l’algorithme permettant de calculer et afficher la température moyenne sur la période considérée. 2- Ecrire l’algorithme permettant de trouver et afficher la température la plus élevée et l’année de son enregistrement. 3- Modifier l’algorithme de la question 1 pour déterminer et afficher le nombre d’années ou la température a été inférieure à la moyenne. 4- Ecrire les programmes correspondant aux algorithmes 2 et 3. Rappels de Python Structure de répétition conditionnelle (itération non déterministe) Il s’agit de répéter (exécuter plusieurs fois) une ou plusieurs instructions. La répétition est dite conditionnelle. C’est en effet la valeur : vrai ou faux d’une expression booléenne qui conditionne l’entrée dans le corps de la boucle et donc l’exécution du bloc d’instructions correspondant. Afin de répéter une action ou une série d’instructions plusieurs fois, la boucle while peut être utilisée. Le principe est simple : la série d’instructions est répétée tant que la condition est vraie. Exemple 1 : i=1 while (i <= 10): print i i=i+1 UPMC - License Biologie Mathématiques 3 feuille de TD: Instructions itératives IAP 2016-2017 Exemple 2 : Connaissant la taille actuelle d’une population et sachant que celle-ci double tous les 10 ans, on veut en connaitre l’effectif dans 60 ans. pop = 1376 an = 0 while (an < 60): an = an + 10 pop = pop * 2 print "Au bout de 60 ans =", pop Trois éléments sont nécessaires au bon fonctionnement de la boucle while : 1. initialiser au moins une variable la boucle (dans l’exemple 1, la variable i est initialisée telle que i = 1) 2. faire tourner la boucle avec un test, on boucle tant que la condition est vraie (dans l’exemple 1, le test est i <= 10) 3. la variable du test doit être ré-affectée dans le corps de la boucle afin que la condition de sortie de boucle soit atteinte pour éviter que la boucle ne tourne infiniment. (dans l’exemple 1, i est augmenté à chaque tout de 1 : i = i + 1) 1 . Boucle for En Python, la boucle for permet de définir une variable qui prendra successivement toutes les valeurs d’une liste (c’est un itérateur). La déclaration de la boucle for permet de nommer cette variable et est suivie du bloc d’instruction (indenté) à répéter pour chaque itération. Remarque : une boucle de répétition sur une liste vide n’a pas d’éléments sur lesquels itérer et donc ne s’éxécute pas. for i in <liste d’éléments>: instruction1 instruction2 ... Remplissage d’une liste Les trois propositions suivantes sont équivalentes : l = [0, 1, 2, 3, 4, 5] l = [] for i in range(6): l.append(i) Pour utiliser append() il faut avoir au moins une liste vide en paramètre. 1. Au besoin, on peut stopper la boucle avec les touches Ctrl-C. UPMC - License Biologie Mathématiques 4 l = [] i = 0 while (i<6): l.append(i) i = i + 1