Vous êtes sur la page 1sur 2

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

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


Examen du 15 mai 2008
Deux heures - Sans document.

Exercice 1
1. Corriger les erreurs de syntaxe du programme suivant (attention à ne pas corriger une instruction correcte)

# include < stdio .h >


2 # include < maths .h >

4 double f ( double x )
{
6 return ( x ^2 - 2 cos ( x ));
}
8

void secante ( double x0 , double x1 , double epsilon , double f ( double )) {


10 double xn = x1 , xn_old = x0 , update ;
do {
12 update = ( xn - xn_old )/((* f )( xn ) - (* f )( xn_old ))* f ( xn )
xn_old = xn
14 xn -= update
} while ( fabs ( update ) > epsilon );
16 retourne xn ;
}
18

int main ( void ) {


20 double y , epsilon ;

22 epsilon = 1 ,0e -4;


y = secante (0 , 0.1 , epsilon , * f );
24 print ( " Resultat :\ t % g (+/ -%.1 e )\ n " , y , epsilon );

26 return 0;
}

2. Donner la commande permettant de compiler ce programme.

3. Donner la commande permettant d’exécuter ce programme. Quel est le résultat attendu ? Ecrire mathémati-
quement l’algorithme codé dans la fonction secante.

4. Modifier la fonction secante pour avoir un affichage du déroulement de l’algorithme du type :


n=0 xn=0.100000
n=1 xn=10.004167
n=2 xn=0.289039
...

Exercice 2
Le but est de calculer une approximation du cosinus en un point donné. Vous pouvez choisir d’écrire vos
programmes en C ou en C++ mais sans mélange des langages !
5. Ecrire une fonction fact calculant la factorielle d’un nombre entier positif k passé en argument.

6. Ecrice une fonction cos_somme_partielle de prototype


double cos_somme_partielle ( double x , unsigned N )
N
X (−1)n x2n
qui effectue le calcul en appelant la fonction fact.
n=0
(2n)!

1
7. 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.

8. Proposer, en justifiant, une façon d’améliorer les performances du programme (sans changer l’algorithme d’ap-
proximation).

Exercice 3
Le but de l’exercice est l’écriture en C++ d’une classe permettant de manipuler simplement les fractions ration-
nelles.

9. Ecrire la déclaration d’une classe fraction qui contient 2 champs privés :


– num (entier)
– den (entier non nul)
un constructeur initialisant ces 2 champs, et 2 fonctions membres constantes numerateur et denominateur per-
mettant d’accéder aux champs privés.

10. Je propose de surcharger l’opérateur + par une fonction membre de la façon suivante :
class fraction {
2 ...
public :
4 fraction operator +( fraction f ) {
f . num = num * f . den + den * f . num ;
6 f . den *= den ;
return f ;
8 }
...
10 }

Le code est-il correct ? Quel est le problème avec cette approche ? Donner un exemple.
Une autre façon de surcharger un opérateur est d’utiliser une fonction amie. Utiliser cette approche pour
surcharger les opérateurs arithmétiques +, -, *, / et l’opérateur d’injection <<.

11. Ecrire un programme de test définissant les fractions suivantes


2 1 8
p= , q= , r= ,
3 5 9
et effectuant le calcul pq − 8r + 5.
Donner l’instruction permettant l’affichage du résultat. Quel en-tête doit-on inclure ?

12. Ecrire une fonction (membre ou amie) simplifie qui permet de simplifier une fraction rationnelle.

Vous aimerez peut-être aussi