Vous êtes sur la page 1sur 2

Université Pierre et Marie Curie Master M1 "Mathématiques et Applications"

Période 2 - 2008/2009 Programmation en C/C++


Examen du 27 mai 2009 (2ème session)
Deux heures - Sans document.

Exercice 1
On considère le code suivant :

# include < iostream >


2 # include < cmath >

4 template < type T >


T milieu ( T & x const ; T & y const ) {
6 return ( x + y ) / T 2;
};
8

double f ( double x ) {
10 return x + 4 sin ( x ) + cos ( x );
};
12

int main ( void ) {


14 double g = 0 , d = 2*3.14159 , m = milieu (g , d );
double mg , md ;
16 do {
mg = milieu (g , m );
18 md = milieu (m , d );
if f ( mg ) < f ( md )
20 d = m ; m = mg ;
else
22 g = m ; m = md ;
} while ( md - mg > 1e -6);
24 std : cout << " valeur finale : " << milieu ( mg , md ) << std : endl ;
return 0;
26 }

1. Corriger les erreurs de syntaxe de ce programme (attention à ne pas corriger une instruction correcte).
Ce code provient-il d’un programme écrit en C ou en C++ ? Pourquoi ?

On suppose maintenant que toutes les erreurs de syntaxes sont corrigées.


2. Comment compiler et executer ce programme ?

3. Que fait ce programme ?

4. Que peut-on dire de la fonction milieu ? Donner des exemples d’appel de cette fonction avec différents types.

5. Ecrire les fonctions milieu et f sous forme de functor (ou objet fonctionnel).

Exercice 2
Le but est de calculer, en C, une approximation du cosinus en un point donné.
1. Ecrice une fonction cos_somme_partielle de prototype
double c os_somme_partielle ( double x , unsigned N )
N
X (−1)n x2n
qui effectue le calcul .
n=0
(2n)!

2. Ecrire un programme principal qui demande un nombre x à l’utilisateur et qui renvoie une approximation du
cosinus lorsque l’erreur relative est inférieure à 10−6 .
Indiquer les en-têtes nécessaires pour la compilation.

1
Exercice 3
Le but de l’exercice est l’écriture en C++ d’une classe permettant de manipuler simplement les points de R3 .
1. Ecrire la déclaration d’une classe Point3d qui contient :
– 3 champs privés : les 3 coordonnées x, y et z d’un point de R3 ,
– un constructeur par defaut initialisant les coordonnées à 0,
– un constructeur prenant 1, 2 ou 3 arguments pour initialiser respectivement x, x et y ou x, y et z (les coordonnées
non explicitement initialisées seront mises à 0).
2. Ecrire pour chaque coordonnée une fonction membre de lecture (accesseur) et une fonction membre d’écriture
(mutateur).
Expliquer la différence et l’usage du mot-clé const.

On souhaite effectuer les opérations suivantes avec des objets de la classe Point3d :
– addition / soustraction de 2 points (coordonnées par coordonnées),
– translation : ajouter / soustraire un réel à toutes les coordonnées d’un point,
– dilatation : multiplier / diviser toutes les coordonnées du point par un réel.

3. Surcharger les opérateurs + et - par des fonctions membres de la classe Point3d pour additionner et soustraire 2
points.

4. Surcharger les opérateurs +,-,* et / par des fonctions amies de la classe Point3d pour effectuer les opérations de
translation et de dilatation.

5. Surcharger les opérateurs d’injection << et d’extraction >>. Donner les en-têtes à inclure.

6. Ecrire un programme de test définissant les points suivants

p = (2, 3, 1), q = (1, 0, 0), r = (0, 1, 0),

et effectuant le calcul p + 8(r − q) + 1.


Donner l’instruction permettant l’affichage du résultat.

7. Initialiser un pointeur sur un Point3d à la valeur (2, 4, 5).


Initialiser un tableau dynamique de taille 10 dont chaque élément est un Point3d de valeur (2, 4, 5).
Initialiser un vector de taille 10 dont chaque élément est un Point3d de valeur (2, 4, 5).

Vous aimerez peut-être aussi