• 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 : 0h30 Aucun document autorisé

Mobiles interdits Nom : Prénom :

On possède la classe suivante pour représenter les points du plan cartésien.

c l a s s Point { p r i v a t e:

double x , y;

p u b l i c:

Point (c o n s t double a=0 , c o n s t double b =0) : x(a), y(b) {}

double getX () c o n s t; double getY () c o n s t; v oi d setX (c o n s t double x );

v oi d setY (c o n s t double y );

double distance (c o n s t Point &p) c o n s t;

f r i e n d std :: ostream &o p e r a t o r< <( std :: ostream &f , c o n s t Point &p );

};

Notez que l’implémentation de ces méthodes ne vous est pas donnée, car inutile. Le nom de chaque méthode est suffisamment significatif.

On souhaite représenter des polygones dans le plan cartésien. On rappelle qu’un polygone est constitué d’une suite finie de points du plan appelés sommets et de segments, appelés côtés, reliant les couples de sommets consécutifs ainsi que d’un segment reliant le premier et le dernier point.

I1. Écrivez en C++ la classePolygoneavec :

— une variable privéesommetstype vecteur dePoint;

— un constructeur pour initialiser l’objet courant ;

— l’accesseurgetSommetqui renvoie le ième sommet du polygône courant ;

— le mutateursetSommetqui modifie le ième sommet du polygone courant ;

— la fonctionpérimètrequi renvoie le périmètre du polygone courant ;

— la surcharge de l’opérateur<<pour écrire sur unostreamun polygone au format[(x1, y1)(x2, y2). . .(xi, yi). . .(xn, yn)].

// Polygone.hpp

#pragma once

#i n c l u d e <vector >

#i n c l u d e <iostream >

#i n c l u d e " Point . hpp "

/*

1

* La classe Polygone représente des polygones à n sommets (n >=1)

*/

c l a s s Polygone { p r i v a t e:

std :: vector < Point > sommets ; p u b l i c:

// les constructeurs

Polygone (c o n s t std :: vector < Point > & pts ) : sommets ( pts ) {}

// Rôle : renvoie le nombre de sommets du polygone courant i n t nbSommets () c o n s t;

// Rôle : renvoie le ième sommet du Polygone courant // 0 <= i < nbSommets()

c o n s t Point & getSommet (c o n s t i n t i) c o n s t; // Rôle : change le ième sommet du Polygone courant // 0 <= i < nbSommets()

v oi d setSommet (c o n s t i n t i , c o n s t Point &p );

// Rôle : renvoie du périmètre du Polygone courant double perimetre () c o n s t;

// Rôle : écrit le Polygone p sur le flot f

f r i e n d std :: ostream &o p e r a t o r< <( std :: ostream &f , c o n s t Polygone &p );

};

// Polygone.cpp

#i n c l u d e <iostream >

#i n c l u d e <cassert >

#i n c l u d e " Polygone . hpp "

// Rôle : renvoie le nombre de sommets du polygone courant i n t Polygone :: nbSommets () c o n s t {

r e t u r n t h i s-> sommets . size ();

}

// Rôle : renvoie le ième sommet du Polygone courant // 0 <= i < nbSommets()

Point Polygone :: getSommet (c o n s t i n t i) c o n s t { assert (i >=0 && i <t h i s-> sommets . size ());

r e t u r n t h i s-> sommets [i ];

}

// Rôle : change le ième sommet du Polygone courant // 0 <= i < nbSommets()

v oi d Polygone :: setSommet (c o n s t i n t i , c o n s t Point &p) { assert (i >=0 && i <t h i s-> sommets . size ());

t h i s-> sommets [i] = p;

}

// Rôle : renvoie du périmètre du Polygone courant double Polygone :: perimetre () c o n s t {

double p = 0.0;

i n t nbS = t h i s-> sommets . size ();

f o r (i n t i =1; i < nbS ; i ++)

p +=t h i s-> sommets [i -1]. distance (t h i s-> sommets [i ]);

2

(2)

i f (nbS >=3)

// polygone fermé => ajouter la longueur du dernier coté

p +=t h i s-> sommets [0]. distance (t h i s-> sommets [nbS -1]);

//r e t u r n p;

}

// Rôle : écrit le Polygone p sur le flot f

std :: ostream & o p e r a t o r<< ( std :: ostream & f , c o n s t Polygone &p) {

f << "[ ";

f o r (auto x : p. sommets ) f << x << " ";

r e t u r n f << "]";

}

. . . . I2. Écrivez la fonctionmainqui :

1. déclare et construit un triangle et un pentagone. Le premier polygone sera alloué dynamiquement, mais pas le second.

2. puis écrit sur la sortie standard ces deux polygones et leurs périmètres respectifs.

#i n c l u d e <iostream >

#i n c l u d e <cstdlib >

#i n c l u d e <vector >

#i n c l u d e " Point . hpp "

#i n c l u d e " Polygone . hpp "

i n t main () {

std :: vector < Point > pts3 = { Point (1 ,1) , Point (2 ,2) , Point (3 ,3)};

Polygone * triangle = new Polygone ( pts3 );

std :: cout << * triangle << " - périmètre = ";

std :: cout << triangle -> perimetre () << std :: endl ; std :: vector < Point > pts5 = {

Point (1 ,1) , Point (2 ,2) , Point (3 ,3) , Point (4 ,4) , Point (5 ,5) };

Polygone pentagone ( pts5 );

std :: cout << pentagone << " - périmètre = ";

std :: cout << pentagone . perimetre () << std :: endl ;

std :: cout << Polygone ({ Point (0 ,0) , Point (1 ,1)}) << std :: endl ;

std :: cout << Polygone ({ Point (0 ,0) , Point (0 ,1)}). perimetre () << std :: endl ; std :: cout << Polygone ({ Point (0 ,0) , Point (0 ,1) , Point (1 ,1)}). perimetre ()

<< std :: endl ;

std :: cout << Polygone ({ Point (1 ,1)}). perimetre () << std :: endl ; r e t u r n EXIT_SUCCESS ;

}

3

. . . .

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