Master SIM FP de Taza
Série 4 (classes, héritage et polymorphisme)
Exercice 1 :
Les verbes du premier groupes (verbes en –er) sont très réguliers sauf envoyer, leur conjugaison est
très simple. Ils représentent 3000 sur les quelques 4000 verbes de la langue française. (90%)
Les terminaisons au présent sont : -e, -es, -e, -ons, -ez, -ent.
Attention le verbe aller ne fait partie du premier groupe même s’il se termine par -er.
Fait aussi attention au verbe qui se terminent par –eler ou –eter (appeler, jeter : j’appelle, …. Nous
appelons, vous appelez, ils appellent ; je jette, …nous jetons, vous jetez, ils jettent)
Verbes qui se terminent par -oyer ou -uyer : (envoyer : j’envoie, …, nous envoyons, vous envoyez, ils
envoient) , (appuyer : j’appuie, …, nous appuyons, vous appuyez, ils appuient)
Question :
On considère la classe suivante :
class Conjugaison ():
ter=[ "e", "es", "e", "ons", "ez", "ent" ]
def affich(self):
print (Conjugaison.ter)
Ajouter à la classe les fonctions suivantes :
Un constructeur qui accepte en argument le verbe à conjuguer et l’ajouter à la liste listeVerbe (attribut
de classe).
La méthode Conjuguer() qui va retourner la conjugaison du verbe au présent.
Une méthode pour afficher le résultat de la conjugaison.
Le programme doit tenir en considération les cas particuliers cités aux dessus.
Exercice 2:
On considère la classe Forme qui définie juste:
la constante Pi=3,14 et les fonctions surface, volume et affichage qui retournent 0
Dans cet exercice on va créer les 3 formes suivantes : points, Disques et cylindres. Un Disque est
caractérisé par un point comme centre et un rayon. Un cylindre est défini par la hauteur et une base
sous forme d’un disque.
1) La classe Point dispose:
• de 2 attributs réelles privées (x,y),
• d’un constructeur d’initialisation pour créer un point, x et y prennent 0 par défaut .
Surcharger la fonction affichahge() pour affiche un point
2) La classe Disque comporte également un attribut privé rayon. La classe disque dispose:
• d’un constructeur pour créer un Disque dont le centre est le point (0,0) et de rayon 0 par défut;
• surcharger les fonctions nécessaires pour afficher toutes les informations (coordonnées du centre,
valeur du rayon et l’aire du disque).
3) La classe Cylindre comporte la caractéristique hauteur (privé). La classe dispose :
• des constructeurs que vous devez vous-même proposé.
• surcharger les fonctions surface() et volume() ,
•la redéfinition de la fonction affichage pour obtenir toutes les informations sur le cylindre : centre et
le diamètre de la base (Disque) et la hauteur.
Exemple d’exécution:
p=point(2,4)
print(p.affichep())
d=disque(4,6,7)
print(d.affiche())
c=cylindre(2,4,6,7)
print(c.affiche())
le point (2,4)
le disque de rayon 4 et de centre (6,7) surface D :50.24
le cylindre de hauteur 2 de base centre (le point (6,7)) ray:4, surface :150.72 et volume 100.48
1
Exercice 3 :
Dans cet exercice on vous demande de définir un ensemble de classes pour représenter des fonctions
d’une variable formées avec des constantes, des occurrences de la variable x, les quatre opérations
arithmétiques +, –, ×, / et des appels de quelques fonctions convenues comme sin, cos exp, log, etc.
Par exemple : 3x + 3sin(2x+1)
Dans un programme, une expression comme celle-là peut être efficacement représentée par une
structure arborescente organisée comme le montre la figure ci-contre, faite de feuilles (les constantes
et les variables), de nœuds à deux « descendants » (les opérateurs binaires) et de nœuds à un
descendant (les fonctions d’une variable).
+
* *
Sin
3 x 3 +
*
1 2 x
Les classes qu’il faut définir sont destinées à représenter les nœuds d’un tel arbre. Il y en a donc de
plusieurs sortes :
• un nœud représentant une constante porte un nombre, la valeur de la constante,
• un nœud représentant une occurrence de la variable x ne porte aucune autre information,
• un nœud représentant une addition, une soustraction, une multiplication ou une division porte deux
informations : les expressions qui sont ses opérandes,
• un nœud représentant l’appel d’une fonction porte comme information l’expression qui est son
argument.
Définissez les classes suivantes :
Expression – classe représentant ce qu’est en commun avec toutes les expressions arithmétiques : elle
se compose d’une seule méthode :
def valeur(double x)
qui renvoie la valeur de l’expression pour la valeur de x donnée. Toutes les classes de cette hiérarchie
devront redéfinir la fonction valeur(). Elles fourniront aussi une fonction pour afficher la valeur.
Constante – classe dont chaque instance représente une occurrence d’une constante. Cette classe a
un attribut de type double.
Variable – classe concrète dont chaque instance représente une occurrence de la variable x. Cette
classe ne comporte aucun attribut.
OperationBinaire – classe rassemblant ce qu’est en commun entre tous les opérateurs à deux
opérandes(+, -, *, /). Elle a donc deux membres d’instance, de type Expression, représentant les deux
opérandes, et le constructeur qui va avec.
Addition, Soustraction, Multiplicationet Division sont des classes pour représenter les opérations
binaires dans lesquelles on redéfinit la fonction valeur().
OperationFonction– classe rassemblant ce qu’est en commun entre tous les opérateurs à un
opérande. Elle doit avoir un membre d’instance, de type Expression, représentant l’opérande en
question.
Sin, Cos, Log, Exp, etc. sont donc des classes pour représenter les fonctions standard. Dans ces classes
on redéfinit la fonction valeur promise dans la classe Expression.
On vous demande de montrer que votre structure est bien adaptée au calcul de la valeur de
l’expression pour une valeur donnée de la variable x.
Soit la fonction suivante :
f(x)=3*x+4*sin(2*x+1) calculer f(4)