Vous êtes sur la page 1sur 5

ISSAT GABES MP 2 – PC 2 – T2

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.

Exemple : l’objet d=Date(12,2,2020) , le 12 février 2020 correspond au 43 ème


jour de l’année.
• Avant(…) qui permet de comparer deux dates, return True si date1<date2 et
False sinon.
• Lendemain(…) qui retourne la date du lendemain.

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.

Exercice 2: (concours 2017)

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.

On se propose de construire la classe PolynomeCreux à coefficients réels dont la squelette (à


compléter) est défini par :

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

Ecrire le script de la méthode primitive, qui retourne le polynôme représentant la primitive.


On suppose que la constante d’intégration est nulle.

Question 7

Ecrire le script de la fonction, nommée intégrale, permettant de retourner la valeur de


l’intégrale d’un polynôme creux Pen x entre les bornes d’intégration a et b.

Exercice 3:

Partie1 :
Considérons une classe appelée Point ayant les attributs suivants :

- x : un attribut de type float


- y : un attribut de type float

1- Définissez la classe Point et un constructeur à deux paramètres.


2- Définissez la méthode __str__ (self) qui retourne la représentation mathématique d’un
point : (x, y).
3- Ecrivez la méthode calculerdistance (self, other) qui permet de calculer la distance entre le
point de l’objet courant (self) et l’objet other passe en paramètre.
Nous rappelons que la distance entre deux points A(x1,y1) et B(x2,y2), en
mathématiques, est égale à :

4- Ecrivez la méthode calculermilieu (self, other) qui permet de calculer et de retourner un


point correspondant au milieu du segment defini par le point de l’objet courant (self) et
l’objet other passé en paramètre. Nous rappelons que les coordonnées d’un point M(x M,yM)
milieu de A(x1,y1) et B(x2,y2), en mathématiques, sont :

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

1- Définissez la classe TroisPoints et un constructeur à trois paramètres.


2- Ecrivez une méthode sontalignes(self) qui retourne True si les trois points premier,
deuxième et troisième sont alignés, False sinon. Nous rappelons que trois points A, B et

AU 2021/2022 4
ISSAT GABES MP 2 – PC 2 – T2

C sont alignés si AB = AC + BC, AC = AB + BC ou BC = AC + AB (AB désigne la


distance séparant le point A du point B, pareillement pour AC et BC).
3- Ecrivez une méthode est isocèle(self) qui retourne True si les trois points premier,
deuxième et troisième forment un triangle isocèle, False sinon. Nous rappelons qu’un
triangle ABC est isocèle si AB = AC ou AB = BC ou BC = AC.

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)

Exemple d’utilisation de cette classe :


>>>cy1=Cylindre(5,7)
>>>print(cy1.surface())
78.53981633974483
>>>print(cy1.volume())
549.7787143782139

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)

Exemple d’utilisation de cette classe :


>>>co=Cone(5,7)
>>>print(co.volume())
183.2595714594046

AU 2021/2022 5

Vous aimerez peut-être aussi