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 9 juin 2008 (2ème session)
Deux heures - Sans document.

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

# include < stdio >


2 # include < cmath >

4 using namespace standard ;


class Complex {
6 public :
Complex Complex ( double a = 0 , double b = 0) re ( a ) , im ( b ) {}
8 const double real () { return re ; }
const double imag () { return im ; }
10 const double module () { return sqrt ( re ^2+ im ^2); }
friend ostream operator < <( ostream &o , Complex const & z );
12 prive :
double re , im ;
14 };

16 ostream Complex :: operator < <( ostream &o , Complex const & z ) {
if ( z . imag () = 0) return o << z . real ();
18 if ( z . imag () > 0)
return o << z . real () << " + " << z . imag () << " i " ;
20 else
return o << z . real () << z . imag () << " i " ;
22 };

24 int main ( void ) {


Complex z (2);
26 cout << " z vaut : " << z << endl ;
cout << " La norme de z est : " << module ( z ) << endl ;
28

return 0;
30 }

2. Donner la commande permettant de compiler ces lignes de codes en un programme exécutable test-exo1.
Comment exécuter ce programme ? Quel est le résultat attendu ?

3. Ecrire un opérateur de conversion qui convertit un objet de classe Complex en un double. La conversion se fait
en renvoyant le module du nombre complexe.

4. Ecrire l’opérateur arithmétique + pour 2 objets de la classe Complex. Indiquer précisément où vous insérez cette
fonction dans le programme exo1.cpp.

5. Ecrire un functor (objet fonctionnel) genere_complex_unif qui renvoie un objet de classe Complex dont la partie
réelle et la partie imaginaire sont initialisées aléatoirement (uniformément) sur [0, 1].

6. Compléter le programme principal en déclarant un vector (de la librairie standard) composé de 10 objets
Complex.
Vous initialiserez ce vecteur de 2 façons différentes à l’aide du functor genere_complex_unif.
Afficher le contenu du vecteur et trier ses éléments (en appelant une fonction de la librairie standard).

1
Exercice 2
L’algorithme de tri “Quicksort” peut s’écrire simplement à l’aide de 2 fonctions : une fonction récursive “quick-
sort” dont le pseudo-code est :
fonction quicksort ( tableau , left , right )
2 si left < right
index_coupe := partition ( tableau , left , right )
4 quicksort ( tableau , left , index_coupe -1)
quicksort ( tableau , index_coupe +1 , right )

et une fonction “partition” définie comme ceci :


fonction partition ( tableau , left , right )
2 pivot := tableau [ right ]
index_coupe := left
4 pour i variant de left a right -1 faire
si tableau [ i ] <= pivot
6 echange tableau [ i ] et tableau [ index_coupe ]
index_coupe := index_coupe + 1
8 echange tableau [ index_coupe ] et tableau [ right ]
renvoie index_coupe

7. Ecrire une fonction partition et une fonction quicksort en s’inspirant de ces pseudo-codes pour trier un tableau
de double.

8. Ecrire un programme principal qui demande à l’utilisateur un entier n (positif) et qui crée (alloue) un tableau
dynamique de taille n.
Indiquer les en-têtes nécessaires à la compilation du programme.

9. Initialiser le tableau dynamique en demandant à l’utilisateur n réels, et trier ce tableau à l’aide de la fonction
quicksort.
Afficher le tableau trié et libérer l’espace alloué par le tableau.

10. Quelle fonction de la librairie standard du C code l’algorithme du quicksort. Comment l’utiliser ?

Vous aimerez peut-être aussi