PCSI 2016/17 Manipuler des listes en Python

publicité
PCSI 2016/17
Manipuler des listes en Python
En cas de besoin, consulter le mémento Python 3, plus particulièrement Indexation des Conteneurs séquences
et Opérations sur Listes.
En utilisant idle3 ou pyzo, créer un fichier qui sera enregistré sous le nom polynomes.py dans votre répertoire personnel. Ce fichier sera constitué de définition de fonctions utilisées pour calculer avec des polynômes.
On décide de représenter un polynôme de degré d par la liste de ses coefficients en degré croissant de longueur
d+1. Par exemple le polynôme P : x 7→ 2x3 −3x2 +5 (de degré 3) est représenté par la liste L égale à [5, 0, −3, 2].
Cas exceptionnel : le polynôme nul x 7→ 0 est représenté par la liste vide [].
De cette manière, l’ensemble des polynômes s’identifie à l’ensemble des listes numériques dont le dernier
terme est non nul. A partir de maintenant, on appelle polynôme une telle liste. A titre d’exemple, on pose
L = [5, 0, −3, 2].
1. Définir une fonction degre() qui renvoie le degré d’un polynôme ; par exemple degre(L) renvoie la valeur
3. Contrairement à l’usage en mathématiques, on conviendra que degre([]) vaut −1.
2. Définir une fonction evalue() qui renvoie l’évaluation d’un polynôme en un nombre ; par exemple
evalue(L,4) renvoie la valeur 85, vu que 85 = 2 × 43 − 3 × 42 + 5.
3. Définir une fonction derive() qui renvoie la dérivée d’un polynôme ; par exemple derive(L) renvoie la
valeur [0,-6,6].
4. (multiplication d’un coefficient par un polynôme) Définir une telle fonction coef_fois_poly() à deux
paramètres, le premier un coefficient et le second un polynôme ; par exemple coef_fois_poly(3,L)
renvoie le polynôme [15,0,-9,6] ; faire attention au polynôme nul.
5. Définir une fonction enlever0() qui enlève les zéros consécutifs situés à la fin d’une liste ; par exemple si
lis vaut [8,0,2,0,0], alors après l’instruction enlever0(lis) qui ne renvoie aucune valeur, lis vaut
[8,0,2]. Remarquer qu’on utilise le fait que lis est un objet mutable.
Indication : utiliser l’instruction pop.
6. (Addition de deux polynômes) L’objectif est de définir une fonction add(), l’instruction add(P1,P2)
devant renvoyer la somme (au sens mathématique) des polynômes P1 et P2. Lorsque par exemple le degré
de P1 est inférieur ou égal à celui de P2, la somme s’obtient en ajoutant les premiers coefficients de P2
(ceux correspondant aux termes de plus bas degrés) à ceux de P 1, puis en complétant la liste obtenue
avec les derniers coefficients de la liste P2 (à voir avec un exemple.) On écrira donc la fonction ainsi :
def add(P1,P2):
if degre(P1) <= degre(P2) :
S = P2[:] # copie de P2 qui deviendra P1+P2
...
... lignes de programme à compléter
...
return S
else:
return add(P2,P1)
remarquer la dernière instruction add(P2,P1) où dans sa définition la fonction add() fait appel à elle
même ; la programmation précédente est dite récursive.
7. (Multiplication de deux polynômes) Pour multiplier le polynôme P1 par le polynôme P2, on décompose
P1 comme une somme de monômes qu’on multiplie chacun par P2.
(a) Définir une fonction (de décalage) decale_poly(P,n) qui multiplie un polynôme P par x 7→ xn . Par
exemple, x2 (2x3 − 3x2 + 5) = 2x5 − 3x4 + 5x2 , correspond au fait que decale_poly(L,2) renvoie la
valeur [0, 0, 5, 0, −3, 2]
(b) Utiliser la fonction précédente pour définir une fonction multiplie(P1,P2) qui renvoie le produit
(au sens mathématique) des polynômes P 1 et P 2.
n X
n k
8. En utilisant la formule du binôme : (1 + x)n =
x , écrire une fonction pascal(n) qui affiche les
k
k=0
n + 1 premières lignes du triangle de Pascal.
9. (Plus difficile) Définir une fonction division(A,B) qui renvoie Q,R couple (cad 2-tuple en python) de
polynômes, où Q est le quotient et R le reste de la division euclidienne du polynôme A par le polynôme non
nul B, les polynomes Q et R étant caractérisés par les deux conditions : A = QB +R et deg(R) < deg(B).
Téléchargement