Académique Documents
Professionnel Documents
Culture Documents
Vous pouvez télécharger ce document, ainsi que les codes sources des exercices
sur le lien ci-dessous
http://goo.gl/SOewR6
chbihi@outlook.com
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 1
Exercice 1 : Le programme suivant contient 8 erreurs.
1 #include <iostream>
2 #include namespace std;
3 float main[]{
4 float x, y; z;
5 cin << x << y;
6 if (y != 0)
7 z = x / y;
8 cout << x << " / " << y << " = " << z << endl
9 } else
10 cerr << "Division sur Zéro impossible" << endl;
11 return;
12 }
5 cin >> x >> y; L’instruction cin utilise l’opérateur de flux entrant : >>
cout << x << " / " L’instruction cout se termine toujours par un point-
8 << y << " = " << z virgule « ; »
<< endl ;
2
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 1
Exercice 2 : Les Namespaces
Ecrivez un programme C++ qui contient 8 fonctions, 4 retournant des entiers et 4 autres des
réels :
Deux fonctions portant le même nom pour additionner deux nombres (entiers pour
la première et réels pour la seconde)
Deux fonctions portant le même nom pour soustraire deux nombres (entiers pour la
première et réels pour la seconde)
Deux fonctions portant le même nom pour multiplier deux nombres (entiers pour la
première et réels pour la seconde)
Deux fonctions portant le même nom pour diviser deux nombres (entiers pour la
première et réels pour la seconde)
Utilisez les Namespaces pour différencier entre les fonctions portant le même nom.
#include <iostream>
using namespace std;
namespace entier {
int additionner(int a, int b){
return (a + b);
}
3
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 1
namespace reel {
float additionner(float a, float b){
return (a + b);
}
int main(){
cout << "2 + 5 = " << entier::additionner(2, 5) << endl;
cout << "2.2 - 5.5 =" << reel::diviser(2.2, 5.5) << endl;
return 0;
}
4
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 1
Exercice 3 : Les manipulateurs de flux
1. Ecrivez un programme C++ qui effectue la lecture d’un nombre entier au clavier et
l’affiche en octal et en hexadécimal. Utilisez les deux possibilités existantes. Aussi, les
caractères alphabétiques hexadécimaux devront être affichés en majuscules.
Proposition 1
#include <iostream>
using namespace std;
int main(){
int n;
cout << "Entrez un entier : ";
cin >> n;
Proposition 2
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
int n;
cout << "Entrez un entier : ";
cin >> n;
5
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 1
2. Ecrivez un programme C++ qui permet d’afficher une suite de chiffres et leurs
correspondances en octal ou en hexadécimal (selon le choix de l’utilisateur) sous forme
d’un tableau à deux colonnes. La colonne de gauche contient les chiffres décimaux et
celle de droite les correspondances. En plus du choix de l’utilisateur (caractère « H » ou
« O »), il faudrait lire au clavier deux entiers, le premier pour le premier chiffre de la suite
et le second pour le nombre de chiffres à afficher.
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
int n, chiffre;
char choix;
do{
cout << "Choix : ";
cin >> choix;
}while(choix != 'H' && choix != 'O');
6
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 1
Exercice 4 : Autres Ajouts
a. Ecrivez une fonction qui permet de retourner la valeur inverse d’un booléen passé en
paramètre. Proposez deux solutions en utilisant les opérateurs d’inversion logique et le
OU exclusif.
#include <iostream>
int main(){
bool b1 = true;
cout << boolalpha << b1 << "=" << inverse_1(b1) << endl;
bool b2 = false;
cout << b2 << " = " << inverse_2(b2) << endl;
return 0;
}
7
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 1
b. Ecrivez un programme C++ permettant de parcourir un tableau d’entiers et de modifier
son contenu de façon à ce que chaque élément reçoit la somme de sa valeur et celle de
l’élément qui le précède. Le tableau ainsi que sa taille devront être lus depuis l’entrée
standard.
#include <iostream>
using namespace std;
int main(){
int n;
cout << "Saisissez la taille du tableau : ";
cin >> n;
int T[n];
for(int i = 0; i < n; i++){
cout << "T[" << i << "] = ";
cin >> T[i];
}
int som = 0;
for(int &val : T){
val += som;
som = val;
}
cout << "\n\nNouvelles valeurs" << endl;
for(int i = 0; i < n; i++){
cout << "T[" << i << "] = " << T[i] << endl;
}
return 0;
}
c. Soit B une variable contenant une valeur binaire quelconque. Ecrivez un programme
C++ permettant d’afficher à l’écran son équivalent en décimal, octal et hexadécimal.
#include <iostream>
using namespace std;
int main(){
int n = 0b101010;
cout << "Valeur décimale : " << dec << n << endl;
cout << "Valeur hexadécimale : " << hex << n << endl;
cout << "Valeur octale : " << oct << n << endl;
return 0;
}
8
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
Exercice 1 : Les tableaux
a. Écrire un programme qui effectue la somme des éléments d’un tableau d’entiers dont
les éléments sont saisis au clavier.
#include <iostream>
using namespace std;
int main(){
int n, som, i;
if (n >= 0){
int E[n];
// remplissage du tableau
for(i = 0; i < n; i++){
cout << "Entez l'element " << i << " : ";
cin >> E[i];
}
// calcul de la somme
som = 0;
for(i = 0; i < n; i++){
som += E[i];
}
cout << "La somme est : " << som << endl;
}
else
cout << "Nombre invalide !" << endl;
return 0;
}
9
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
b. Écrire un programme qui recherche une valeur dans un tableau d’entiers, et affiche un
message pour dire si oui ou non la valeur a été retrouvée.
#include <iostream>
using namespace std;
int main(){
int n, r, i;
if (n >= 0){
int E[n];
// remplissage du tableau
for(i = 0; i < n; i++){
cout << "Entez l'element " << i << " : ";
cin >> E[i];
}
// Recherche
for(i = 0; i < n; i++){
if (E[i] == r){
cout << "La valeur " << r ;
cout << " existe dans le tableau." ;
return 0;
}
}
return 0;
}
10
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
c. Écrire un programme qui calcul le produit scalaire de vecteurs dont la taille et les
éléments sont saisis au clavier.
#include <iostream>
using namespace std;
int main(){
int i, n, ps;
if (n > 0){
int U[n], V[n];
// Remplissage du vecteur U
cout << "Remplissage du vecteur U : " << endl;
for(i = 0; i < n; i++){
cout << "\tU[" << i << "] = ";
cin >> U[i];
}
// Remplissage du vecteur V
cout << "Remplissage du vecteur V : " << endl;
for(i = 0; i < n; i++){
cout << "\tV[" << i << "] = ";
cin >> V[i];
}
11
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
d. Écrire un programme qui affiche Min, Max, et Moyenne d’un tableau d’entiers.
#include <iostream>
using namespace std;
int main(){
int i, n, min, max, som;
float moy;
if (n > 0){
int A[n];
// Remplissage du tableau
for(i = 0; i < n; i++){
cout << "Entrez l'element " << i << " : ";
cin >> A[i];
}
// Parcours du tableau
som = A[0];
min = A[0];
max = A[0];
for(i = 1; i < n; i++){
som += A[i];
// calcul de la moyenne
moy = (float)som / n;
12
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
e. Écrire un programme qui affiche une matrice carrée unitaire U de dimension N.
#include <iostream>
using namespace std;
int main(){
int n, i, j;
if (n > 0){
int M[n][n];
// Remplissage de la matrice
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
if (i == j)
M[i][j] = 1;
else
M[i][j] = 0;
}
}
// Affichage de la matrice
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
cout << M[i][j] << "\t";
}
cout << endl;
}
}
return 0;
}
13
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
f. Écrire un programme qui effectue la multiplication d’une matrice (composée de
nombres entiers) par un nombre réel. La taille de la matrice, ses éléments, ainsi que le
nombre réel sont saisis au clavier.
#include <iostream>
using namespace std;
int main(){
int L, C, i, j;
float R;
int M[L][C];
return 0;
}
14
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
g. Ecrire un programme qui effectue la multiplication de deux matrices A et B. Le résultat
de la multiplication sera mémorisé dans une troisième matrice C qui sera ensuite
affichée.
#include <iostream>
using namespace std;
int main(){
int L, C;
cout << "Entrez nombre de lignes : ";
cin >> L;
cout << "Entrez nombre de Colonnes : ";
cin >> C;
15
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
// Affichage MC
for(int i = 0; i < L; i++) {
for(int j = 0; j < L; j++){
cout << MC[i][j] << "\t";
}
cout << endl;
}
return 0;
}
16
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
Exercice 2 : Les chaines de caractères
a. Ecrire un programme qui permet de calculer la langueur d’une chaine de caractères
saisie au clavier. N’utilisez pas la fonction strlen de « string.h » !
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
char chaine[100];
cout << "Entrez une chaine de caracteres : ";
gets(chaine);
cout << "La chaine \"" << chaine << "\" contient " ;
cout << i << " caractères" << endl;
return 0 ;
}
b. Ecrire un programme qui inverse une chaine de caractères saisie au clavier. Le résultat
est mis dans une nouvelle chaine de caractère avant son affichage.
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int main(){
char chaine[100];
cout << "Entrez une chaine de caracteres : ";
gets(chaine);
// Inversement de la chaine
for(int i = 0; i < T; i++)
inverse[i] = chaine[T - i - 1];
17
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
c. On appelle palindrome une suite de caractères qui se lit de la même façon dans les deux
sens (exemple: ''laval'). Ecrire un programme qui permet de lire une chaine de
caractères au clavier et affiche un message pour dire si oui ou non la chaine entrée est
palindrome.
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int main(){
char chaine[100];
cout << "Entrez une chaine de caracteres : ";
gets(chaine);
/*
Déclaration d'un entier qui sera initialisé à 1 qui servira
de drapeau pour signaler si la chaine est un palindrome ou
pas
*/
short flag = 1;
return 0;
}
18
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
d. Ecrire un programme qui permet de lire un entier positif N au clavier et d’afficher sur
l’écran le nombre de chiffres contenus dans N.
Proposition 1
« Utilisation du Log base 10 »
#include <cmath>
#include <iostream>
using namespace std;
int main(){
double N;
cout << "Entrez un entier : ";
cin >> N;
long nb = (long)(log10(N) + 1);
cout << "Le nombre de caracteres est : " << N;
return 0;
}
Proposition 2
« Traiter le nombre entré comme une chaine de caractères »
#include <cstring>
#include <cstdio>
#include <iostream>
using namespace std;
int main(){
int N;
char nb[20];
return 0;
}
19
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
Exercice 3 : Les types structurés
a. Définir une structure de données Date permettant de représenter une date au
format « jj/mm/aaaa ». Ecrire un programme permettant de lire deux dates et
d’afficher sur l’écran la plus récente.
#include <iostream>
Using namespace std;
struct Date {
int jour, mois, annee;
};
void main(){
struct Date d1, d2;
cout << "Saisissez la première date : ";
cin >> d1.jour >> d1.mois >> d1.annee;
cout << "Saisissez la seconde date : ";
cin >> d2.jour >> d2.mois >> d2.annee;
20
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
21
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
Exercice 4 : Les pointeurs
a. Soit P un pointeur qui "pointe" sur un tableau A:
int A[] = {12, 23, 34, 45, 56, 67, 78, 89, 90};
int *P;
P = A;
Expression Explication
22
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
b. Soient deux tableaux d'entiers T1 et T2. Ecrire un programme en C qui permet de tester
l'égalité entre les deux tableaux : il rend VRAI si les composants des deux tableaux
correspondent position par position, et FAUX sinon. Utilisez deux pointeurs P1 et P2
pour parcourir chacun des tableaux.
#include <iostream>
using namespace std;
int main(){
int N;
cout << "Entrez le nombre des éléments du tableau : ";
cin >> N;
/*
Déclaration de deux pointeurs
Chacun des pointeur pointe sur un des tableaux
Déclaration d'un drapeau dont le changement de valeur
signalera que les tableaux sont différents
*/
int *p1, *p2, flag = 1;
p1 = T1;
p2 = T2;
23
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
/*
Parcours des deux tableaux en utilisant les pointeurs
Comparaison des valeurs renvoyées par les pointeurs :
si ces dernières sont différentes on arrête les traitements
--> tableaux differents
*/
for(int i = 0; i < N; i++){
if (*(p1+i) != *(p2+i)){
flag = 0;
break;
}
}
return 0;
}
24
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
c. Ecrire un programme qui permet de calculer le nombre d’occurrences d’un mot dans
une phrase. Utilisez un pointeur P qui va parcourir les différents mots de la phrase.
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int main(){
char PHRASE[255] ;
char MOT[30], M[30] ;
int occurs = 0;
char *p = PHRASE;
// comparaison
if (!strcmp(MOT, M))
occurs++;
25
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
Exercice 5 : Les fonctions
Soit T un tableau d’entiers. Ecrivez des fonctions qui permettent de :
Trouver la valeur maximale des éléments du tableau T,
Trouver la valeur minimale des éléments du tableau T,
Calculer la somme des éléments du tableau T,
Calculer la moyenne des éléments du tableau T,
Ecrivez un programme qui :
Effectue la lecture d’un entier N depuis l’entrée standard,
Crée un tableau Tab composé de N éléments, qui sont aussi saisis au clavier,
Affiche à l’écran : le maximum, le minimum, la somme et la moyenne.
#include <iostream>
Using namespace std ;
26
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
int somme(int *T, int taille){
int som = 0;
for(int i = 0; i < taille; i++){
som += T[i];
}
return som;
}
int main(){
int N;
cout << "Entrez le nombre des éléments du tableau : ";
cin >> N;
27
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
2. Ecrivez deux fonctions nommées successivement division et modulo, qui prennent deux
entiers comme paramètres et qui retournent respectivement un entier et un réel. Le code
des deux fonctions devra gérer le cas de la division sur 0 en utilisant le mécanisme des
exceptions (au milieu des fonctions et aussi dans le code de la fonction principale main).
#include <iostream>
using namespace std;
/*
Fonction pour le calcul du reste de la division de deux entiers
Envoi de l'exception dans le cas où la valeur de "b" est nulle
*/
int modulo(int a, int b){
if (b == 0)
throw b;
else
return a % b;
}
28
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 2
int main(){
int x, y;
return 0;
}
29
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 3
Exercice 1
a. Le code contient 10 erreurs.
Personne(char *nom, char Les paramètres par défaut sont déclarés à partir du
12 *prenom, int age, char
sexe);
dernier argument
30
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 3
b. Soit « p1, p2 et p3 » des instances de la classe Personne. Que se passera-t-il lors de
l’exécution des instructions suivantes:
Instruction Explication
Exercice 2
Ecrivez un programme C++ qui contient une classe modélisant l’heure (heures, minutes &
secondes. La classe sera appelé « Time » est devra déclarer tous ses attributs comme étant
privées. De plus, elle devra contenir les méthodes publiques suivantes :
Un constructeur avec des valeurs par défaut pour chacun des attributs,
Un constructeur avec comme paramètre une chaine de caractères, qui contient
l’heure sous la forme : « hh:mm:ss ». Par exemple : "05 :15 :56".
Un constructeur par copie,
Des getters (un pour chacun des attributs),
Des setters (un pour chacun des attributs). Le changement de valeurs doit être géré
de manière à ce que l’on puisse gérer les cas où l’utilisateur entre une valeur erronée
pour l’un des attributs (une valeur supérieur à 23 ou inférieur à 0 pour l’heure, ou
une valeur non comprise entre 0 et 59 pour les minutes et les secondes,
Une fonction amie (compare) qui permet de comparer deux objets « Time » et de
retourner un entier égal à :
o -1 si le premier objet en paramètre est le plus grand,
o 0 si les deux objets sont égaux,
o 1 si le second objet en paramètre est le plus grand,
Une méthode (changeTime) permettant d’incrémenter ou de décrémenter un objet
en secondes (seul paramètre de la méthode). L’opération doit gérer les cas de
dépassement de valeurs pour l’un des attributs de l’objet concerné.
31
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 3
#include <iostream>
#include <cstdio>
#include <iomanip>
// Déclaration de la classe
class Time{
private :
int heure;
int minute;
int seconde;
public :
Time(int h = 0, int m = 0, int s = 0);
Time(const char *t);
Time(const Time &t);
int getHeure();
int getMinute();
int getSeconde();
void setHeure(int h);
void setMinute(int m);
void setSeconde(int s);
friend int compare(const Time &t1, const Time &t2);
void changeTime(int s);
};
32
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 3
33
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 3
/*
méthode permettant d'incrémenter ou de décrémenter un
objet en secondes
*/
void Time::changeTime(int s){
int MAX = (24 * 60 * 60);
int T = (this->heure * 60 * 60) + (this->minute * 60) +
this->seconde;
int som = T + s;
if (som >= MAX)
som %= MAX;
else if (som < 0)
som += MAX;
34
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 3
/*
Fonction amie pour la comparaison de deux objets de type
Time
*/
int compare(const Time &t1, const Time &t2){
if (t1.heure > t2.heure)
return -1;
else if (t1.heure < t2.heure)
return 1;
else {
if (t1.minute > t2.minute)
return -1;
else if (t1.minute < t2.minute)
return 1;
else {
if (t1.seconde > t2.seconde)
return -1;
else if (t1.seconde < t2.seconde)
return 1;
else
return 0;
}
}
}
35
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 4
Exercice 1
Ecrivez un programme C++ qui contient une classe modélisant une période. Cette dernière
est caractérisée par :
Un nombre d’années,
Un nombre de mois,
Un nombre de jours,
Un nombre d’heures,
Un nombre de minutes,
Un nombre de secondes,
La classe sera appelée « Periode » est devra déclarer tous ses attributs comme étant privées.
De plus, elle devra contenir les méthodes publiques suivantes :
Un constructeur avec des valeurs par défaut pour chacun des attributs,
Un constructeur avec recopie
Surcharge des opérateurs « + » , « - » , « == » , « != » , « < » , « > » , « = »
Remarques :
L’opération de soustraction ne peut se faire que si la première opérande est supérieure ou
égale à la seconde,
Toutes les opérations de calcul effectuées sur les périodes devront prendre en considération
que :
60 secondes 1 minute
60 minutes 1 heure
24 heures 1 jour
30 jours 1 mois
12 mois 1 année
#include <iostream>
using namespace std;
class Periode {
private :
int annee;
int mois;
int jours;
int heures;
int minutes;
int secondes;
36
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 4
public :
Periode(int a = 0, int m = 0, int j = 0, int h = 0, int min =
0, int s =0);
void Periode::afficher(){
cout << "Annee : " << this->annee << endl;
cout << "Mois : " << this->mois << endl;
cout << "Jours : " << this->jours << endl;
cout << "Heures : " << this->heures << endl;
cout << "Minutes : " << this->minutes << endl;
cout << "Secondes : " << this->secondes << endl << endl;
}
37
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 4
return p;
}
// Mois
p.mois = p1.mois - p2.mois;
if (p.mois < 0){
p.mois = 12 + p.mois;
p.annee--;
}
// Jours
p.jours = p1.jours - p2.jours;
if (p.jours < 0){
p.jours = 30 + p.jours;
p.mois--;
}
38
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 4
// Heures
p.heures = p1.heures - p2.heures;
if (p.heures < 0){
p.heures = 24 + p.heures;
p.jours--;
}
// Minutes
p.minutes = p1.minutes - p2.minutes;
if (p.minutes < 0){
p.minutes = 60 + p.minutes;
p.heures--;
}
// Secondes
p.secondes = p1.secondes - p2.secondes;
if (p.secondes < 0){
p.secondes = 60 + p.secondes;
p.minutes--;
}
}
return p;
}
39
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 4
40
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 4
else {
if (p1.jours < p2.jours)
return false;
else if (p1.jours > p2.jours)
return true;
else {
if (p1.heures < p2.heures)
return false;
else if (p1.heures > p2.heures)
return true;
else {
if (p1.minutes < p2.minutes)
return false;
else if (p1.minutes > p2.minutes)
return true;
else {
if (p1.secondes > p2.secondes)
return true;
else
return false;
}
}
}
}
}
}
41
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 4
Exercice 2
Soit la classe Abstraite « Personne » permettant de représenter un être humain suivant les
caractéristiques suivantes :
Nom : chaine de caractères
Prénom : chaine de caractères
Age : nombre entier
La classe doit aussi posséder les méthodes suivantes :
Un constructeur permettant d’initialiser chacun des attributs de la classe,
Un constructeur par copie,
Getter pour chaque attribut,
Setter pour chaque attribut,
Une méthode pour afficher toutes les informations d’une personne,
Soient « Etudiant » et « Fonctionnaire » deux classes qui héritent de la classe abstraite
« Personne ».
La classe « Etudiant » possède un attribut CNE de type chaine de caractères, ainsi que les
méthodes suivantes :
Un constructeur permettant d’initialiser chacun des attributs de la classe,
Un constructeur par copie,
Getter pour le CNE,
Setter pour le CNE,
Une méthode pour afficher toutes les informations d’une personne (redéfinition de
la classe mère),
La classe « Fonctionnaire » possède un attribut salaire de type réel, ainsi que les méthodes
suivantes :
Un constructeur permettant d’initialiser chacun des attributs de la classe,
Un constructeur par copie,
Getter pour le salaire,
Setter pour le salaire,
Une méthode pour afficher toutes les informations d’une personne (redéfinition de
la classe mère),
Réalisez un programme permettant d’implémenter les trois classes définies précédemment,
avec une fonction principale (main) dans laquelle vous créez des instances des classes
« Etudiant » et « Fonctionnaire » et vous affichez leurs contenus.
42
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 4
Classe Personne
class Personne {
protected:
char *nom;
char *prenom;
int age;
public :
Personne(char *n, char *p, int a);
Personne(const Personne &p);
char* getNom();
char* getPrenom();
int getAge();
char* Personne::getNom(){
return this->nom;
}
char* Personne::getPrenom(){
return this->prenom;
}
int Personne::getAge(){
return this->age;
}
43
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 4
void Personne::setNom(char *n){
this->nom = n;
}
void Personne::afficher(){
cout << "Nom : " << this->nom << endl;
cout << "Prenom : " << this->prenom << endl;
cout << "Age : " << this->age << endl;
}
Classe Etudiant
class Etudiant : public Personne {
private :
char *cne;
public :
Etudiant(char *n, char *p, int a, char *cne);
Etudiant(const Etudiant &e);
char* getCNE();
void setCNE(char *cne);
void afficher();
};
char *Etudiant::getCNE(){
return this->cne;
}
44
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 4
void Etudiant::afficher(){
Personne::afficher();
cout << "CNE : " << this->cne << endl;
}
Classe Fonctionnaire
class Fonctionnaire : public Personne {
private :
float salaire;
public :
Fonctionnaire(char *n, char *p, int a, float s);
Fonctionnaire(const Fonctionnaire &s);
float getSalaire();
void setSalaire(float s);
void afficher();
};
float Fonctionnaire::getSalaire(){
return this->salaire;
}
void Fonctionnaire::afficher(){
Personne::afficher();
cout << "Salaire : " << this->salaire << endl;
}
45
Université Hassan 2
Faculté des sciences Aïn Chock de Casablanca
Département Mathématiques & Informatique
Série de TD N° 4
int main(){
Etudiant e1(e);
e1.afficher();
cout << endl;
Fonctionnaire f1(f);
f1.afficher();
cout << endl;
return 0;
}
46