• Aucun résultat trouvé

Université de Nice-Sophia Antipolis POLYTECH

N/A
N/A
Protected

Academic year: 2022

Partager "Université de Nice-Sophia Antipolis POLYTECH"

Copied!
2
0
0

Texte intégral

(1)

Université de Nice-Sophia Antipolis POLYTECH

ELEC4 2018–2019

Examen de Programmation C++

Durée : 1h

Aucun document autorisé

Mobiles interdits Nom : Prénom :

1 Question 1

On définit lesparallélogrammes dont un des cotés est posé sur un axe horizontal par leur longueur horizontalel, leur longueur inclinéeLet l’angle inférieur gauchea. La figure ci-dessous montre un exemple.

L

l a

On veut définir la hiérarchie de classes C++ qui représente les parallélogrammesgénéraux, les rectangles (des parallélogrammes dont l’angle est toujours égal à 90), et les losanges (un parallé- logramme ayant deux côtés consécutifs de même longueur).

On veut également effectuer des déformations sur les différents parallélogrammes. On définira les méthodesallongerX(doublecoeff),allongerY(doublecoeff)etchangerAngle(doublecoeff) qui modifie respectivement l,Leta.allongerXsera par exemplel=l*coeff.Important :les déformations ne doivent pas changer la nature du parallélogramme sur lequel elles sont appliquées.

Par exemple, un losange devra garder ses cotés égaux, ou rectangle son angle droit quelle que soit la déformation.

On souhaite également définir la méthodepivoterqui effectue la transformation donnée ci- dessous :

L

l a

l’=L L’=l

a’=180−a

Enfin, on veut définir la classeCarré. Veillez à ce qu’on puisse appeler des méthodes pour déformer ou faire pivoter un carré, néanmoins, tout en le laissant carré.

I1. Écrivez en C++, les classesParallelogramme, Losange, RectangleetCarremunies de leurs constructeurs et méthodes qui répondent à l’organisation définies précédemment. Veillez à factoriser le code, afin de ne pas répéter inutilement des déclarations, en particulier pour la classeCarre(quel type d’héritage ?).Soyez très précis dans le code que vous écrivez.

1

/* * Cette classe définit les parallélogrammes dont un des cotés est

* posé sur un axe horizontal par leur longueur horizontale l , leur

* longueur inclinée L et l ’ angle inférieur gauche a. c l a s s*/ Parallelogramme {

p r o t e c t e d: double l , L , a;

p u b l i c:

Parallelogramme (double l=0 , double L=0 , double a =0) { assert (l >=0 && L >=0 && a >=0 && a <=180);

t h i s->l = l;

t h i s->L = L;

t h i s->a = a;

} /* *

* Antécédent : c >0

* Rôle : allonge la longueur horizontale d ’un coefficient

* multiplicateur c

v i r t u a l vo id*/ allongerX (double c) { assert (c >0);

t h i s->l *= c;

} /* *

* Antécédent : c >0

* Rôle : allonge la longueur inclinée d ’un coefficient

* multiplicateur c

*/

v i r t u a l vo id allongerY (double c) { assert (c >0);

t h i s->L *= c;

} /* *

* Antécédent : 0 <= a <=180

* Rôle : change l ’ angle du parallélogramme courant à la valeur a

*/

v i r t u a l vo id changerAngle (double a) { assert (a >=0 && a <=180);

t h i s->a=a;

} /* *

* Rôle : pivote le parallélogramme courant vers la droite

*/

v oi d pivoter () {

// échanger la longueur et la largeur double aux = t h i s->l;

t h i s->l = t h i s->L;

t h i s->L = aux ; // prendre l’angle opposé t h i s->a = t h i s->a -180;

} };

2

(2)

/* *

* Cette classe définit des Losange par héritage de Parallélogramme

* Elle garantit que les cotés restent égaux par redéfinition des méthodes

* allongerX et allongerY

*/

c l a s s Losange : p u b l i c v i r t u a l Parallelogramme { p u b l i c:

Losange (double c=0 , double a =0) : Parallelogramme (c , c , a) {}

/* *

* Antécédent : c >0

* Rôle : allonge la longueur horizontale ET

* inclinée d ’un coefficient multiplicateur c , et donc assure que

* les longueurs des 2 cotés du Losange courant restent égales

*/

v oi d allongerX (double c) override { Parallelogramme :: allongerX (c );

Parallelogramme :: allongerY (c );

} /* *

* Antécédent : c >0

* Rôle : allonge la longueur horizontale ET

* inclinée d ’un coefficient multiplicateur c , et donc assure que

* les longueurs des 2 cotés du Losange courant restent égales

*/

v oi d allongerY (double c) override { t h i s-> allongerX (c );

} };

/* *

* Cette classe définit des Rectangle par héritage de Parallélogramme

* Elle garantit que l ’ angle reste à 90 par redéfinition de la méthode

* changerAngle .

c l a s s*/ Rectangle :p u b l i c v i r t u a l Parallelogramme { p u b l i c:

Rectangle (double l=0 , double L =0) : Parallelogramme (l , L ,90) {}

v oi d changerAngle (double c) override { assert (c ==90); } };

/* *

* Cette classe définit les Carré par héritage multiple de

* Losange et Rectangle .

*/

c l a s s Carre : p u b l i c Losange , p u b l i c Rectangle { p u b l i c:

Carre (double c) : Parallelogramme (c ,c ,90) {}

};

. . . .

3

2 Question 2

I 2. Expliquez de façon claire et synthétique ce qu’on appelle un patron de conception en POO.

Voir support de cours

. . . .

I 3. Présentez un des patrons de conception vus en cours, celui que vous voulez. Vous expliquerez son rôle et vous donnerez son diagramme de classes UML.

Voir support de cours

. . . .

4

Références

Documents relatifs

Avec la notation de pointeur, écrivez en C la fonction somme qui prend en paramètre une chaîne de caractères qui représente un entier naturel et qui renvoie la somme de ses

Écrivez de façon itérative la fonction itos qui renvoie la conversion d’un entier positif ou nul passé en paramètre, en sa représentation sous forme d’une chaîne de

Écrivez un programme qui lit sur l’entrée standard une opération arithmétique formée de 2 entiers et d’un caractère ( ’+’ , ’-’ , ’*’ ou ’/’ ) et qui écrit sur

Écrivez la fonction creerFichDates qui lit un fichier de texte contenant la suites d’entiers, et qui crée un fichier de dates valides (de type Date ).. Sans l’écrire, vous

Au lieu de retirer, à chaque itération, 1 diviseur au dividende et d’incrémenter de 1 le quotient, le diviseur est multiplié successivement par 2 pour trouver son plus grand

qui prend en paramètre une chaîne de caractères, et qui remplace chaque chiffre par le caractère ’_’ dans celle-ci.. La fonction renvoie un pointeur sur le 1er caractère de

Il est nécessaire d’écrire un destructeur pour libérer explicitement la mémoire occupée par le tableau et les 3 points du triangle

En utilisant, la classe std::ifstream et ses méthodes is_open , get , eof et close , écrivez la classe FileInputStream qui permet de lire un fichier d’octets (et uniquement