Programmation par Objets, TD 1: Introduction
Exercice 1. Compile ou compile pas
Pour chaque fichier suivant (un fichier correspondant `a un encadr´e), dire s’il compile ou non, et dans ce dernier cas, indiquer la raison et proposer une correction.
i n t main( ){ i n t &x;
f o r (x=0;x<10; x++)
s t d : :cout<< ”x = ” << x << s t d : :e n d l; return 0 ;
}
i n t main( ){ i n t x=21;
i n t * const y = &x;
*y = *y + 2000
s t d : :cout<< ”x = ” << x << s t d : :e n d l; return 0 ;
}
i n t f(const i n t & a){ b=1;
while (a>0){b++; a/=2; } }
i n t main( ){ i n t x=42;
s t d : :cout<< ” f ( ”<<x<<” ) = ” << f(x) << s t d: :e n d l; return 0 ;
}
Exercice 2. Trace d’un programme Que fournit le programme suivant ?
#i n c l u d e <i o s t r e a m>
c l a s s E n t i e r{ public:
E n t i e r (i n t nn) {n = nn;} void i n c r (i n t dn) {n += dn;}
b o o l o p e r a t o r==(E n t i e r & e){return (e.n == n) ;}
void imprime ( ) {s t d: :cout<< n <<s t d : :e n d l;} private:
i n t n ; };
i n t main ( ) { E n t i e r n1 ( 2 ) ;
s t d : :c o u t << ” n1 = ”; n1.imprime( ) ;
L3 Maths/info – TD d’algorithmique – Cl´ement Pernet Page 1/3
E n t i e r n2 ( 5 ) ;
s t d:c o u t << ” n2 = ”; n2.imprime( ) ; n1.i n c r( 3 ) ;
s t d : :cout<< ” n1 = ”; n1.imprime( ) ;
s t d : :c o u t << ” n1 == n2 e s t ” << (n1 == n2) << s t d: :e n d l; s t d : :c o u t << ”&n1 == &n2 e s t ” << (&n1 == &n2) << s t d: :e n d l; n1 = n2;
n2.i n c r( 1 2 ) ;
s t d : :c o u t << ” n2 = ”; n2.imprime( ) ; s t d : :c o u t << ” n1 = ”; n1.imprime( ) ;
s t d : :c o u t << ” n1 == n2 e s t ” << (n1 == n2) << s t d: :e n d l; ;
}
Exercice 3. Nombres complexes
a. Ecrire une classe repr´´ esentant les nombres complexes (dont les parties r´eelles et imaginaires sont des flottants double pr´ecision). On fournira des constructeurs `a partir de complexes, dedouble, des methodes retournant les parties r´eelles, imaginaires, le module et l’angle polaire.
b.En particulier, d´efinir les op´erateurs+,+=,−,−=,*,*=. Pour une meilleure modularit´e, essayer de r´eduire le nombre de m´ethodes modifiant explicitement les attributs priv´es.
c. Modifier votre classe pour utiliser d´esormais une repr´esentation polaire (rayon et angle)
Exercice 4. G´eom´etrie plane D´efinir des classes repr´esentant
1. les points de R2 (on utilisera le type flottant double pour repr´esenter une approximation d’un nombre r´eel)
2. les droites du plan (repr´esent´ees par un couple de points). Elles disposeront en outre des m´ethodes suivantes :
— test d’appartenance
— test de parall`elisme
— test d’orthogonalit´e
— une fonction retournant la droite parall`ele `a la droite courante passant par un point donn´e 3. les triangles du plan. La classe disposera en outre des m´ethodes suivantes :
— test si le triangle est isoc`ele
— test si le triangle est rectangle
— calcul de chacune des trois hauteurs, et m´ediatrices
— calcul du centre de gravit´e
Exercice 5. Conception de classes
On souhaite ´ecrire un logiciel de gestion du trafic f´errovriaire. Il faut que ce logiciel repr´esente Les voies, d´efinies par
— deux gares (marquant chaque extr´emit´e)
— une longueur en km Les gares, d´efinies par
— un nom (chaˆıne de caract`ere)
— un ensemble de voies qui lui sont connect´ees.
L3 Maths/info – TD d’algorithmique – Cl´ement Pernet Page 2/3
On souhaite pourra utiliser le conteneur vector<Voie> pour stocker l’ensemble de voies d’une gare.
a. Ecrire ces deux classes´ Voie etGare
On souhaite maintenant repr´esenter des lignes, c’est `a dire un chemin d’une gare `a une autre, passant ´eventuellement par plusieurs gares interm´ediaires en suivant des voies.
b. Ecrire une telle classe.´
c.Ecrire une classe statique´ Outilscontenant une m´ethodedistance. Cette m´ethode devra pouvoir prendre en argument
— une voie
— une ligne
— deux gares
et retourner la (meilleure) distance correspondante.
L3 Maths/info – TD d’algorithmique – Cl´ement Pernet Page 3/3