Pr. Mohamed CHERRADI
Département de Mathématiques et Informatique
Module : Programmation Orientée Objet C++
Master Cryptologie et Sécurité Informatique
Année universitaire : 2023/2024
TD No2
Structures, Classes et objets
Exercice 1 : Les structures en C++
On propose le type structuré suivant pour représenter des vecteurs :
1) Écrire une fonction qui prend en paramètre un entier, crée un vecteur de taille égale à cet entier (faire une
allocation dynamique de la mémoire) et l’initialise à 0. Le prototype de la fonction est :
void initialise(int, t_vecteur*) ;
2) Redéfinir la fonction initialise () qui prend en paramètre un entier, un tableau des réels, crée un
vecteur de taille égale à cet entier (faire une allocation dynamique de la mémoire) et l’initialise aux valeurs
du tableau en paramètre. Le prototype de la fonction est :
void initialise(int, float *, t_vecteur*) ;
3) Écrire une fonction qui libère la mémoire dynamique allouée pour un vecteur. Le prototype de la fonction
est le suivant
void deteruit(t_vecteur) ;
4) Écrire une fonction qui calcule la somme de deux vecteurs et met le résultat dans le troisième paramètre.
Dans le cas où les deux vecteurs ne sont pas de même taille, effectuer la somme de la manière suivante :
<1,2,5,6,8> + <10,20,30> = <1,2,5,6,8> + <10,20,30,0,0> = <11,22,35,6,8>
Le prototype de la fonction est :
void somme(t_vecteur, t_vecteur, t_vecteur*)
5) Ecrire une fonction qui calcule le produit scalaire de deux vecteurs
6) Ecrire une fonction qui lit un vecteur au clavier et une autre qui affiche un vecteur à l’écran. Les prototypes
des fonctions sont :
void lire (t_vecteur)
void afficher(t_vecteur)
7) Ecrire le programme principal qui teste l’ensemble de vos fonctions :
- Initialiser un vecteur de 8 éléments
- Initialiser un vecteur de 5 éléments
- Lire les deux vecteurs
- Effectuer la somme et le produit scalaire
- Afficher les résultats
- Libérer les espaces mémoire alloués
typedef struct{
int nb ; //nb est la taille du vecteur
float* elements ;//elmts pointe vers un bloc mémoire dynamique
}t_vecteur ;
Pr. Mohamed CHERRADI
Exercice 2 : Notion de classe
1) Réalisez une classe CPoint qui possède 2 données membres privées correspondants aux coordonnées réelles
d’un point. Les méthodes qui accèdent à ces données membres sont :
- Le constructeur par défaut qui initialise les coordonnées du point zéro
- La fonction Saisie () qui permet de fixer les coordonnées du point au clavier. Son prototype est le
suivant : void saisie() ;
- La fonction afficher() qui permet d’afficher les coordonnées de ce point. Son prototype est le suivant :
void afficher()
- La fonction translate() qui permet à partir de 2 arguments réels de déplacer le point. Son prototype
est le suivant : void translate (double, double)
- La fonction getAbscisse() qui permet de retourner l’abscisse d’un point. Son prototype est le suivant :
double getAbscisse() .
- La fonction getOrdonne() qui permet de retourner l’ordonne d’un point. Son prototype est le suivant :
double getOrdonne() .
- La fonction distance() qui permet de retourner un réel correspondant à la distance séparant le point
courant à un second point qui est indiqué par ces coordonnées à la fonction. Son prototype est le suivant :
double distance(double, double)
2) Tester cette classe en déclarant dans un programme principale plusieurs instances de type CPoint.
3) Réalisez une second classe Triangle qui possède 3 données membres de type CPoint qui correspondent
aux 3 sommets d’un triangle. Ses fonctions membres sont les suivantes :
- La fonction saisie() qui permet la saisie des coordonnées des 3 sommets.
- La fonction afficher() qui permet d’afficher à l’écran les coordonnées des 3 sommets
- La fonction translate() qui permet à partir de deux arguments réels de déplacer les 3 sommets.
- Les fonctions cote1(), cote2() et cote3() qui permettent respectivement de retourner la longueur
de chacun des cotés.
- La fonction isocele() qui retourne un booléen indiquant si le triangle est isocèle.
- La fonction equilateral() qui retourne un booléen indiquant si le triangle est équilatéral
- La fonction perimetre() qui retourne le périmètre du triangle.
4) Tester le fonctionnement de ces classes en déclarant plusieurs instances.
5) Ecrire une méthode de classe compteur() qui retourne le nombre d’objets ( de type Triangle) crées et
prévoir son appel dans la fonction main().
Exercice 3 :
1) Ecrire une classe SetEntiers permettant le traitement sur des ensembles d’entiers, et comportant :
En membre privés :
- Le nombre courant d’éléments nbrelem,
- L’adresse du tableau des entiers elements
- Le nombre maximal d'éléments max
En membre publics :
- Un constructeur permettant l’initialisation d’un objet créé à vide,
- Un destructeur permettant la destruction d’un objet créé
- Une fonction afficher() permettant d’afficher le contenu d’un objet de type SetEntiers.
Pr. Mohamed CHERRADI
- Une fonction cardinal() pour calculer le cardinal d’un objet de la classe SetEntiers,
- Une fonction renverser() pour renverser les éléments d’un objet de la classe SetEntiers,
- Une fonction membre ajouter() pour ajouter un entier dans un objet de type SetEntiers.
2) Ecrire un programme qui réalise la création d’un ensemble d’entiers, et appeler les fonctions membres
affiche(), cardinal() et renverser() pour l’objet en question.
3) Surdéfinir le constructeur pour permettre l’initialisation d’un objet de la classe SetEntiers par un
seul élément lui passé en argument.
4) Définir le constructeur de recopie pour la classe SetEntiers.
5) Modifier l’implémentation de la classe précédente de façon que l’ensemble d’entiers soit maintenant
représenté par une liste chaînée. L’interface de la classe (la partie publique de sa déclaration) devra
rester inchangée.
Exercice 4 : Matrices et allocation dynamique
Dans cet exercice, on se propose de créer une classe Matrice permettant de coder une matrice
d’´éléments de type double) sous la forme d’un tableau unidimensionnel. Si M = [Mij] Avec 0 ≤ i
n − 1 et 0 ≤ 𝑗 ≤ 𝑚 1.
Pour l’ensemble de l’exercice, on utilisera un fichier en-tête Matrice.h contenant les définitions et
déclarations propres à la classe Matrice, qui sera incorporé dans le fichier principal via la directive
#include, ainsi qu’un fichier Matrice.cpp contenant le code des différentes fonctions membres de la
classe.
a) Définir la classe Matrice, avec ses constructeur et destructeur. Les dimensions de la matrice seront
fixées lors de la construction de l’objet et passées en paramètres au constructeur. Elles seront aussi
des membres données (privés) de la classe. Le constructeur pourra être appelé avec une seule
dimension, auquel cas il s’agira du nombre de lignes de la matrice, le nombre de colonnes étant fixé
à 1.
b) Définir une fonction membre getElement qui prenne en arguments deux entiers (i ; j) et renvoie le
coefficient (i ; j) de la matrice liée à l’objet pour lequel cette fonction est appelée. Définir également
une fonction membre setElement qui prenne en argument deux entiers i et j ainsi qu’une valeur v de
type double et affecte la valeur v au coefficient (i ; j) de la matrice.
c) Ecrire une fonction membre afficher permettant d’afficher le contenu d’une matrice sur la sortie
standard. L’affichage sera fait ligne par ligne.
d) Ecrire une fonction membre multiplication prenant en paramètres deux références sur des instances
de la classe Matrice, ainsi que leur nombre de colonnes (qui sera supposé être le même). La fonction
effectuera le produit de la matrice correspondant à l’objet par lequel elle est appelé avec la matrice
correspondant au premier argument de la fonction multiplication, et stockera le résultat dans la matrice
liée au second argument.
e) Ecrire une fonction nb instances qui indique combien d’objets de la classe Matrice existent au moment
où cette fonction est appelée. Ce nombre doit donc être accessible par chaque instance
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !