Info 4 Introduction à la programmation structurée MPSI - Lycée Chrestien de Troyes Introduction à la programmation structurée Nous avons construit nos premiers programmes sous la forme de fonctions qui pour des arguments donnés, renvoyaient un ou plusieurs résultats. Pour éviter les messages d’erreur, on continuera à respecter la syntaxe du langage Python : saut de ligne, utilisation des symboles : et ;, indentation... car c’est cette structure physique qui est interprétée par l’interface. De plus, on pourra prendre l’habitude, pour plus de clarté, de présenter nos programmes, c’est à dire : • qu’on n’hésitera pas à renseigner nos programmes à l’aide des symboles ”””” ””””, dans la définition de nos fonctions, • qu’on ajoutera éventuellement quelques commentaires utiles. Par exemple, si on souhaite construire le programme equation qui pour tout nombre positif a donné, renvoie les solutions de l’équation x2 = a : import math def equation(a): """ce programme permet de résoudre les équations de la forme x**2=a, où a est positif""" x1=math.sqrt(a); x2=-x1 # on n’oubliera pas la seconde solution return x1,x2 On peut alors constater que la commande help nous permet de nous renseigner sur le programme ainsi construit : In : help(equation) Help on function equation in module : equation(a) ce programme permet de résoudre les équations de la forme x**2=a, où a est positif Si on préfère plutôt construire un programme interactif, on pourra définir une fonction sans argument et les valeurs des paramètres seront renseignées au cours de l’exécution à l’aide de la commande input. Dans ce cas, il convient de convertir la chaine de caractère entrée par l’utilisateur, que ce soit en nombre entier à l’aide de la commande int ou en nombre réel à l’aide de la commande float : import math def equation(): """ce programme permet de résoudre les équations de la forme x**2=a, où a est positif""" print("on cherche à résoudre l’équation x**2=a") a=float(input(’que vaut a ?’)) x1=math.sqrt(a); x2=-x1 # on n’oubliera pas la seconde solution return x1,x2 Pour aller plus loin, on peut aussi utiliser des instructions structurées, parmi lesquelles on distingue : 1. les instructions conditionnelles Il s’agit des structures conditionnelles qui permettent d’effectuer une série d’instructions selon qu’une certaine condition soit réalisée ou non. Dans le langage Python, on aura recours aux commandes if, elif, else, et la syntaxe d’un tel bloc d’instructions sera toujours la même : if condition 1 : indentation Instruction (...) elif condition 2 : indentation Instruction (...) elif condition 3 : indentation Instruction (...) (...) else: indentation Instruction (...) 1 1 1 1 Pour séparer les instructions, on pourra encore utiliser le symbole ; ou bien pour faciliter le debogage, on pourra préférer un saut de ligne. De plus, on retiendra que l’instruction else n’est pas obligatoire et on veillera à ce que les conditions énoncées soient bien des conditions booléennes, c’est à dire des tests logiques qui utilisent les opérateurs usuels et ne renvoient que les valeurs True ou False : 1 Info 4 Introduction à la programmation structurée MPSI - Lycée Chrestien de Troyes commande Python x == y x != y x > y x < y x >= y x <= y x in y x and y x or y not x Interprétation x est égal à y x est différent de y x est strictement supérieur à y x est strictement inférieur à y x est supérieur ou égal à y x est inférieur ou égal à y x apparient à y x et y (logique) x ou y (logique) non x (logique) Par exemple, si on souhaite définir la fonction vabsolue qui renvoie la valeur absolue d’un nombre réel, on entrera : def vabsolue(x): """vabsolue renvoie la valeur absolue d’un réel. if x>=0: return x else: return -x C’est aussi la fonction abs du module math.""" 2. les instructions répétitives Il s’agit des structures itératives qui permettent d’effectuer une série d’instructions un nombre de fois donné ou tant qu’une condition est réalisée. Dans le langage Python, on pourra distinguer : • la boucle while (boucle ”tant que”) dépendant d’une condition booléenne : while condition: indentation Instruction 1 (...) Instruction p • la boucle for (boucle ”pour”) associée à une liste donnée, qu’elle soit constituée d’entiers obtenus par la commande range, ou constituée de valeurs quelconques : for k in range(1,n+1): indentation Instruction 1 (...) Instruction p ou encore for x in L: indentation Instruction 1 (...) Instruction p Bien entendu, quand le nombre d’itérations n’est pas déterminé à l’avance, on préfèrera choisir la boucle while mais on veillera à ce qu’on puisse sortir de la boucle, c’est à dire qu’à un moment la condition énoncée ne devra plus être réalisée... Il s’agit là d’une erreur très courante et ainsi, si la condition d’arrêt n’est jamais atteinte, et que votre programme tourne sur lui-même, il vous faudra interrompre l’exécution de celui-ci en fermant par exemple la console interactive. Application 1 - Calcul des termes successifs d’une somme On rappelle qu’on définit la fonction ζ sur ]1, +∞[ par : ζ(x) = +∞ X k=1 Soit x ∈ ]1, +∞[. On pose alors pour tout n ∈ N∗ , Sn = n X k=1 n X 1 1 = lim x x n→+∞ k k k=1 1 . kx 1. Décrire S1 , S2 et S3 puis déterminer la relation de récurrence permettant d’obtenir Sn+1 à partir de Sn . 2. Dans le langage Python, construire la fonction zeta qui, pour tout couple (x, n) donné, renvoie la valeur de Sn . On présentera deux programmes semblables, l’un reposant sur une boucle for, l’autre reposant sur une boucle while. 3. Renseigner votre programme afin que celui-ci soit plus clair. Application 2 - Calcul des termes successifs d’un produit On définit le produit Pn pour tout n ∈ N, n ≥ 2 par : n Y k2 − 1 Pn = k2 k=2 1. Dans le langage Python, construire la fonction produit qui, pour tout entier n donné, renvoie la valeur du produit Pn . On pourra ajouter un test sur l’argument donné afin de renvoyer un message à l’utilisateur si n < 2. 2. Modifier votre programme afin que celui-ci soit interactif, c’est à dire que l’utilisateur devra rentrer la valeur de n au cours du programme. 3. Calculer P10 , P20 , . . . , P100 . Quelle hypothèse pouvez-vous faire ? 4. Démontrer alors le résultat annoncé. 2