Académique Documents
Professionnel Documents
Culture Documents
TD 1
PROGRAMMATION ORIENTÉE OBJET
Exercice 1 :
Une date est définie par trois entiers qui représentent respectivement le jour, le mois et
l’année. Proposer une classe Date qui ne permet d’instancier que des dates valides.
Une date est valide si l’année est un entier positif, le mois ∈ [1, 12] et le jour ∈ [1,
nbJour(mois)] où nbJour(m) est le nombre de jours dans le mois m.
Pour simplifier on supposera que toutes les années sont non bissextiles (le nombre de jours du
mois février d’une année non bissextile est égal à 28).
Description de la classe Date :
Attributs :
• jour : entier entre 1 et le nombre de jours dans le mois ;
• mois : entier entre 1 et 12 ;
• annee : entier positif
Méthodes :
• __init__(…) :permet l’initialiser une date ;
Exemple : d1=Date(12,2,2020) est un objet , instance de la classe Date
d2=Date(1,13,2020) renvoi date incorrecte
d3=Date(30,2,2020) renvoi date incorrecte
• __str__(…) : permet d’afficher une date selon le format DD - nom du mois –
Année
Exemple : pour la date d1=Date(12,2,2020) on affiche 12 Février 2020.
• Num_Jour (…) qui permet de retourner le numéro du jour dans l’année.
AU 2021/2022 1
ISSAT GABES MP 2 – PC 2 – T2
Travail demandée :
On suppose que la liste NBjoursMois=[31, 28, 31, 30, 31, 30, 31, 31, 30,31, 30,31] est déjà
définie.
Construire la classe Date :
1- Ecrire la méthode __init__.
2- Réécrire la méthode __init__ en utilisant le bloc try..except et le mécanisme d’assertion.
3- Ecrire la méthode __str__.
4- Ecrire la méthode Num_Jour.
5- Ecrire la méthode Avant.
6- Ecrire la méthode Lendemain.
L objectif de cet exercice est la manipulation des polynômes creux à une seule variable.
Un polynôme creux est un polynôme dont certains coefficients sont nuls.
Un polynôme est construit à partir de monômes.
Un monôme est une expression de la forme axn ou a (a≠0) est le coefficient du monôme et n
(n≥0) son degré.
Un monôme est représenté par un dictionnaire à un élément dont la clé est le degré n et la
valeur est le coefficient a.
Exemple :
Le monôme 8x2 est représenté par le dictionnaire {2 :8}
Un polynôme creux est alors défini comme une association de monômes de degrés différents.
Le polynôme –x4+8x2-5x est représenté par le dictionnaire {2 :8,1 :-5, 4 :-1}.
Le dictionnaire {0 :1,5 :1,8 :1} représente le polynôme x8+x5+1.
class PolynomeCreux :
"""Manipulation des polynômes creux a une seule variable"""
def __init__(self) :
self.data={} #initialisation à un polynôme nul
def ajout_monome(self,monome={}):
"""Cette méthode ajoute un monôme saisi au clavier si le paramètre monôme
est nul ou ajoute le monôme nommé monôme sinon"""
if len(monome)==0 :
#réponse à la question 1
else :
#si le monome est non vide
degre=list(monome.keys())[0]
AU 2021/2022 2
ISSAT GABES MP 2 – PC 2 – T2
coeff=list(monome.values())[0]
try :
assert degre≥0
assert type(degree)==int
assert type(coeff)==int or assert type(coeff)==float
assert len(monome)==1
self.data.update(monome) #ou self.data[degre]=coeff
except :
print("erreur d ajout du monome")
def degree(self):
#réponse à la question 2
def __call__(self,x0):
#réponse à la question 3
def __add__(self,other):
#réponse à la question 4
def __mul__(self,other):
#réponse à la question 5
def primitive(self):
#réponse à la question 6
Travail demandé :
Question 1
Compléter le script de la méthode ajout_monôme. On rappelle que cette méthode ajoute un
monôme saisi au clavier (en faisant les contrôles nécessaires) si le paramètre monôme
est nul ou ajoute le monôme nommé monôme sinon.
Question 2
Ecrire le script de la méthode degree, qui retourne le degré du polynôme.
Question 3
Ecrire le script de la méthode __call__, qui retourne la valeur du polynôme pour un réel x0
donné.
Question 4
Ecrire le script de la méthode __add__, qui retourne le polynôme somme de deux
polynômes.
Remarque : aucun monôme nul ne doit apparaitre dans le polynôme résultat.
Question 5
Ecrire le script de la méthode __mul__, qui retourne le polynôme produit de deux
polynômes.
Remarque : aucun monôme nul ne doit apparaitre dans le polynôme résultat.
Question 6
AU 2021/2022 3
ISSAT GABES MP 2 – PC 2 – T2
Question 7
Exercice 3:
Partie1 :
Considérons une classe appelée Point ayant les attributs suivants :
Partie2 :
Considérons maintenant une deuxième classe appelée TroisPoints ayant les attributs
suivants :
- premier : un attribut de type Point
- deuxième : un attribut de type Point
- troisième : un attribut de type Point
AU 2021/2022 4
ISSAT GABES MP 2 – PC 2 – T2
Partie3 :
1- Définir une classe Cercle dont la méthode constructeur utilisera un paramètre rayon.
2- Définir une méthode surface(), qui devra renvoyer la surface du cercle.
3- Définir une classe Cylindre dérivée de la classe cercle. Le constructeur de cette nouvelle
classe comportera les deux paramètres rayon et hauteur. Vous y ajouterez une méthode
volume() qui devra renvoyer le volume du cylindre (Rappel : volume d’un cylindre=
surface de section* hauteur)
4- Définir une classe Cône, qui devra dériver cette fois de la classe Cylindre, et dont le
constructeur comportera lui aussi les deux paramètres rayon et hauteur. Cette nouvelle
classe possèdera sa propre méthode volume(), laquelle devra renvoyer le volume du cône
(rappel : volume d’un cône=volume du cylindre correspondant divisé par 3)
AU 2021/2022 5