Académique Documents
Professionnel Documents
Culture Documents
-----¤¤¤¤----- 2010-2011
ECOLE NATIONALE DES SCIENCES
DE L'INFORMATIQUE
list<Point> points;
Solution :
class FoncteurDeplacer {
public:
FoncteurDeplacer(double x, double y) : u(x), v(y) {}
void operator()(Point& p) const {
p = Point(p.getX() + u, p.getY() + v);
}
private:
double u, v;
};
class FoncteurEtirer {
public:
FoncteurEtirer() {i=1;}
void operator()(Point& p) const {
if (i++ % 5 ==1) if (p.getX() < 20) delta =1 ; else delta=-1 ;
p = Point(p.getX() + delta, p.getY() + delta);
}
private:
int i , delta ;
};
Solution :
void main() {
Polygone p;
p.ajouterPoint(1,2);
p.ajouterPoint(3,6);
p.ajouterPoint(3,15);
p.ajouterPoint(5,8);
p.ajouterPoint(6,12);
p.ajouterPoint(7,15);
p.appliquer(permuter);
p.appliquer(FoncteurDeplacer(5,5));
p.appliquer(FoncteurEtirer());
b) Donner les coordonnées des points du polygone après l’étirement (et ce avant la fin du
programme) :
Solution :
a) La suppression d’un point inexistant déclenche l’affichage d’un message d’erreur sur
la console d’erreur (cerr). Donner la classe PbSuppression (déclaration+corps)
Solution :
class PbSuppression {
Point p;
public :
PbSuppression(Point & p) : p(p) { } // ou sans arg
FaireNecessaire() {
cerr << "Message d’erreur" << endl;
// ou
cerr << "Le point (" << p.getX() << "," << p.getY()
<< ") est inexistant" << endl;
}};
c) L’ajout d’un point M(x,y) existant déclenche l’ajout d’un point M1(x1+1,y). [x1 est la
plus grande abscisse des points du polygone]. Sans faire le calcul de x1, donner la
classe PbAjout (déclaration+corps).
Solution :
class PbAjout {
Polygone * p;
int x1,y1;
public :
PbAjout(Polygone * pol, int y) {
pol;
y1 = y;
}
FaireNecessaire() {
p->ajouterPoint(x1 +1 , y1);
};
d) Donner le nouveau corps de la méthode void Polygone::ajouterPoint(int,int) incluant
le lancement d’exception.
Solution :
list<Point>::iterator it =
find(points.begin(), points.end(), Point(x,y));