Vous êtes sur la page 1sur 2

Université Cadi Ayyad Année universitaire : 2021– 2022

ENSA de Marrakech

Langage C/C++
TD n°3.
Exercice 0: Le type Complexe
Ecrire une classe Complexe qui permet la manipulation des nombres complexes :
• Définir ses attributs
• 3 Constructeurs
▪ un avec arguments pour initialiser un nombre complexe quelconque,
▪ un sans arguments qui initialise le nombre complexe par i
▪ et un constructeur de recopie
• le destructeur
• une méthode pour afficher les nombres complexes sous la forme x+ iy
• une méthode pour additionner 2 nombres complexes,
• une méthode pour la multiplication de 2 nombres complexes,
• une méthode qui retourne le module d'un nombre complexe,

Exercice 1 :
Créer une classe Personne représentée par un nom, un prénom et un âge. Le nom et le prénom seront
représentés sous forme de tableaux dynamiques. On veut pouvoir créer des objets de type Personne soit en
spécifiant le nom, le prénom et l’âge, soit en ne spécifiant rien, soit en spécifiant un objet Personne
préexistant (constructeur de copie). Définir les constructeurs et destructeur associés. Afin de pouvoir tester la
validité de votre classe, implémenter une fonction d’affichage : void affiche() const.
Dans un autre fichier. Faire une fonction main permettant de tester votre classe.

Exercice 2 : Objet d’Objets


1) Ecrire une classe en C++ permettant de représenter des cercles qui se caractérisent par un rayon et un
centre de type point (cf. le cours pour la classe Point)
Les opérations possibles sur un cercle sont :
 l’affichage des caractéristiques du cercle (méthode affiche()).
 l'obtention de son rayon,
 le changement de son rayon,
 l'obtention de son centre,
 la translation de son centre,
 le calcul de sa surface,
 le calcul de son périmètre,
 le test de l'égalité du cercle avec un autre cercle,
 la vérification de l'appartenance d'un point au cercle,
Prévoir deux constructeurs :
 Constructeur avec deux paramètres correspondant au rayon et au point centre
 Constructeur avec 3 paramètres correspondant au rayon et aux coordonnées du point centre
2) Pour tester la classe, écrire un programme principal effectuant les opérations suivantes :
 création d'un cercle de rayon 1 et de centre (10,10)
 affichage de ses caractéristiques
 calcul et affichage de son périmètre et de sa surface
 doublement de son rayon
 à nouveau calcul et affichage de son périmètre et de sa surface
 déplacement du cercle pour ramener son centre à l'origine
 vérification que le point (1,1) est bien à l'intérieur du cercle
 vérification que le point (3,3) est bien à l'extérieur du cercle
 test de l'égalité du cercle avec un autre cercle de centre (0,0) et de rayon 2

Exercice 3 :
On veut réaliser le produit d’une matrice avec un vecteur. Les classes Matrice et Vecteur sont définies de la
manière suivante :
#define TAILLE 3
class Vecteur
{
private:
double vect[TAILLE];
public:
Vecteur(double t[TAILLE]){
for(i=0;i<TAILLE;i++)
vect[i]=t[i];
}
};
class Matrice
{
private:
double mat[TAILLE][TAILLE];
public:
Matrice(double t[TAILLE][TAILLE]){
int i,j;
for(i=0;i<TAILLE;i++)
for(j=0;j<TAILLE;j++)
mat[i][j]=t[i][j]; }
};
1. Où peut-on déclarer la fonction Vecteur produit(Matrice mat, Vecteur vect) faisant le produit de mat par
vect ? Comment faire pour que la fonction produit puisse accéder au données membres des objets mat et vect

2. On souhaite implémenter une fonction Vecteur produit(Vecteur vect) dans la classe matrice.
Comment faire pour que la fonction produit puisse accéder au données membres de l’objet vect ?

Exercice 4:
Reprendre la classe Vecteur3D de l’exercice 5 TD2 et surchargez les opérateurs suivants :
1. + pour additionner 2 vecteurs.
2. + pour additionner un réel avec un vecteur, sous la forme : r +V ; r un réel et V un Vecteur3D.
3. * pour le produit scalaire de 2 vecteurs.
4. = = pour tester si 2 vecteurs sont égaux.
5. [ ] pour accéder et modifier les coordonnées d’un vecteur par leurs indices (1, 2 ou 3).
6. Surchargez l'opérateur de pré-incrémentation (++) pour la classe Vecteur3D qui fait augmenter de +1
l’abscisse, l'ordonné et la cote d’un vecteur?
7. Même question pour l'opérateur de post-incrémentation?
Remarque : pour les différencier le C++ a défini les prototypes comme suit :
..… operator++() et …..operator++(int)

Exercice 5 :
Reprendre la classe Personne de l’exercice 8 TD2 et surchargez l’opérateur d’affectation.

Exercice 6:
Réaliser une classe nommée Set_int permettant de manipuler des ensembles de nombres entiers. Le nombre
maximal d’entiers que pourra contenir l’ensemble sera précisé au constructeur qui allouera dynamiquement
l’espace nécessaire. On prévoira les opérateurs suivants (e désigne un élément de type Set_int et n un entier :
• <<, tel que e<<n ajoute l’élément n à l'ensemble e;
• %, tel que n % e vale 1 si n appartient à e et 0 sinon;
• <<, tel que flot << e envoie le contenu de l’ensemble e sur le flot indiqué, sous la forme : [entier1,
entier2, ... entiern]
La fonction membre cardinal fournira le nombre d’éléments de l’ensemble. Enfin, on s’arrangera pour que
l’affectation ou la transmission par valeur d’objets de type Set_int ne pose aucun problème (on acceptera la
duplication complète d’objets).

Vous aimerez peut-être aussi