Académique Documents
Professionnel Documents
Culture Documents
3. Qu’est-ce qu’un itérateur et quelle est la différence entre l’itérateur d’une liste et l’itérateur d’un vecteur ?
Exercice 2
Vous trouvez le code suivant non documenté :
typedef double (* f )( double x , void * params );
2
3. Ecrire une fonction puiss compatible avec f qui calcule xp où x est le premier argument et p est un entier donné
par le second argument.
Vous souhaitez maintenant utiliser cette fonction g pour des fonctions existentes d’un programme C++. Le
problème est que vos fonctions existentes ne sont pas compatibles avec f. Un ami vous propose la solution
(partielle) suivante :
template < typename Obj >
2 struct ptr_fun {
ptr_fun ( Obj const &o , double ( Obj ::* f )( double ) const ) : o ( o ) , f ( f ) {}
4 double operator ()( double x ) { return ( o .* f )( x ); };
private :
6 Obj const & o ;
double ( Obj ::* f )( double ) const ;
8 };
5. Que sont Obj et ptr_fun ? Expliquer brièvement le rôle de ses fonctions membres.
Pour quel type de fonctions existentes votre ami a-t-il écrit ptr_fun.
1
6. Compléter la fonction pour_g.
7. Ecrire une petite classe P contenant un entier p en champ privé initialisé par le constructeur et une fonction
membre constante puiss qui prend en argument un réel x et qui renvoie xp .
8. Appliquer la fonction g à la fonction membre puiss de la classe P, c’est à dire la fonction P::puiss.
Exercice 3
On rappelle que la décomposition p-adique (pour un entier p ≥ 2 donné) d’un entier naturel n est donnée par
une suite de coefficients (ak )k≥0 telle que
r−1
X 0 ≤ ak < p pour 0 ≤ k ≤ r − 1,
n= ak pk , où ar−1 6= 0,
k=0
ak = 0 pour k ≥ r.
3. Définir le constructeur qui permet de créer un objet p_adic à partir d’un entier p ≥ 2 et d’un entier n ≥ 0
donnés.
4. On suppose qu’il existe une fonction membre increment qui incrémente de 1 la valeur du p-adique (c’est à dire
n) défini dans l’objet courant. Cette fonction membre a pour prototype :
void increment ();
En utilisant cette fonction, surcharger les opérateurs ++ : donner précisément les prototypes de ces fonctions et
les endroits où elles doivent être déclarées puis définies.