Introduction à la programmation structurée - MPSI

publicité
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
Téléchargement