TD3C 2022
TD3C 2022
TD3C 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 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).