Les exercices  en  C++

Exercice 1

 Ă‰crire  un programme En  C++ permettant  d’afficher le message "Bonjour".   (Solution)                                        

Exercice 2 

Écrire  un programme en C++ permettant de saisir deux nombres et d'afficher leur produit.   (Solution)                                                                           

Exercice 3

Écrire  un programme en C++  qui  permet d'Ă©changer le contenu de deux entiers  A et B  saisis par l'utilisateur. et afficher  ces entiers  après l’Ă©change.  

(Solution)

Exercice 4                                                                                      

Écrire un un programme en C++ qui  permet d'afficher si un nombre  entier saisi au  clavier est pair ou impair.  (Solution) 

Exercice 5                                                                                      

Écrire un programme en C++  qui permet d'afficher le plus grand de trois entiers saisis  au clavier.  (Solution)

Exercice 6                                                                                      

Écrire un programme en C++  qui permet d'Ă©valuer une note saisi au  clavier (si la note supĂ©rieur Ă  10 alors il affiche validĂ© sinon non validĂ©  (NB : la note comprise entre 0 et 20 ).  (Solution)

Exercice 7                                                                                      

Écrire un programme en C++  qui demande deux nombres m et n Ă  l’utilisateur et l’informe ensuite si le produit de ces deux nombres est positif ou nĂ©gatif. On inclut dans le programme le cas oĂą le produit peut ĂŞtre nul.    (Solution)

Exercice 8                                                                                     

Écrire un programme en  C++ qui permet de calculer la valeur absolue d'un entier saisi  par l'utilisateur. (Solution)

Exercice 9

Écrire un programme en C++  qui permet de calculer la moyenne de trois entiers saisis par l'utilisateur.   (Solution)

Exercice 10

Une boutique propose Ă  ces clients, une rĂ©duction de 15% pour les montants d’achat supĂ©rieurs Ă  200 dh. Écrire un programme en C++ permettant de saisir le prix total HT et de calculer le  montant TTC en prenant en compte la rĂ©duction et la TVA=20%.   (Solution)

Exercice 11

Le centre de photocopie facture 0,25 DH  pour les 10 premières photocopies, 0,20 DH les vingt suivantes et 0,10 DH  au-delĂ . Ecrire un programme en C++ qui demande Ă  l’utilisateur de saisir le nombre de photocopies effectuĂ©es et qui affiche la facture correspondante.  (Solution)   

Exercice 12

Écrire un programme en C++ qui demande l'âge d'un enfant et permet d'informer de sa catĂ©gorie sachant que les catĂ©gories sont les suivantes: 
"poussin de 6 a 7 ans"   
"pupille de 8 a 9 ans "   
"minime de 10 a 11 ans "  
" cadet après 12 ans ".   (Solution)

Exercice 13

Écrire un programme en C++ permettant d’afficher le mois en lettre selon le numĂ©ro saisi au clavier.  (  Si l’utilisateur tape 1 le programme affiche janvier,  si 2  affiche  fĂ©vrier, si 3 affiche mars...)  (Solution)

Exercice 14

Écrire un programme en C++ qui permet  d'afficher  le message   "Bonsoir"  10 fois. Utilisant la boucle While.   (Solution)

Exercice 15

Écrire un programme en C++ permettant de calculer la somme S= 1+2+3...+ 10. Utilisant la boucle While.  (Solution)

Exercice 16

Écrire un programme en C++ qui  permet de  calculer la somme   S =1+2+3+...+ N,   oĂą N saisi par l’utilisateur.   Utilisant la boucle While.   (Solution)

Exercice 17

Écrire un programme en C++ qui permet d'afficher  le message "bonjour" 10 fois . Utilisant la  boucle For.  (Solution)

Exercice 18

Écrire un programme en C++ qui permet de  calculer  la somme  S=1+2+3+...+ 10. Utilisant la boucle For.  (Solution)

Exercice 19

Écrire un programme en C++ qui permet de calculer la somme   S=1+2+3+4+….+ N. oĂą N saisi au clavier par l'utilisateur.Utilisant la boucle For.   (Solution)

Exercice 20

Écrire un programme en C++  qui permet d'afficher la table de multiplication de 5. Utilisant la boucle For.   (Solution)

Exercice 21

Écrire un programme en C++  qui permet d'afficher la table de multiplication d’un entier saisie par l’utilisateur,  Utilisant la boucle For.  (Solution)

Exercice 22

Écrire un programme en C++   qui permet d'afficher "Bonjour" 10 fois. utilisant la boucle Do While.   (Solution)

Exercice 23

Écrire un programme en C++  qui calcule la somme  S= 1+2+3+…+ 10. Utilisant la boucle  Do While.   (Solution)

Exercice 24

Écrire un programme en C++  qui affiche la table de multiplication de 8. Utilisant la boucle  Do While.   (Solution)

Exercice 25

Écrire un programme en C++  permettant de saisir 10 entiers et de les stocker dans un tableau nommĂ© Tableau, puis les afficher.   (Solution)

Exercice 26

Écrire un programme en C++  permettant de saisir 10 notes et qui affiche la moyenne de ces notes.   (Solution)

Exercice 27

Écrire un programme en C++ permettant de saisir 10 entiers et qui affiche le maximum de ces entiers.   (Solution)

Exercice 28

Écrire un programme en C++  permettant de saisir 10 entiers dans un tableau, et de calculer le nombre d'occurrences d'un Ă©lĂ©ment N  dans ce tableau. OĂą N saisi par l’utilisateur.    (Solution)

Exercice 29

Écrire un programme en C++  permettant de saisir 10  entiers dans un tableau et de  trier ce tableau par ordre croissante. puis affiche ce tableau après le tri.   (Solution)

Exercice 30

Écrire un programme en C++  permettant de calculer le factoriel d'un entier saisi par l'utilisateur. par exemple N = 7  le factoriel de 7 Ă©gal Ă   1*2*3*4*5*6*7 =5040.    (Solution)

Exercice 31

Écrire un programme en C++ permettant d'afficher les nombres paires compris entre 0 et N, oĂą N saisi par l'utilisateur.  (Solution)

Exercice 32

Écrire  un programme en C++  qui permet de calculer la somme d'entiers  impaires de 1 jusqu'Ă  un entier N saisi par l'utilisateur.   Exemple N=8   Somme = 1 +3+5+7= 16   (Solution)

Exercice 33

Écrire un programme en C++ qui permet de calculer le plus grand diviseur commun entre deux entiers saisis par l'utilisateur.  Par exemple:  M= 15  et N=10   PGCD (15 , 10) =  5      (Solution)

Exercice 34

Ecrire un programme en C++  qui permet d'afficher  un  triangle  d'entiers, selon un entier saisi par l'utilisateur. Exemple   N=4

1

22

333

4444  

  (Solution)


Exercice 35

Écrire un programme en C++ qui permet de calculer le nombre de chiffres d'un entier N saisi  par l'utilisateur.  Exemple  N = 10843

le nombre de chiffres est : 5               (Solution)

Exercice 36

Écrire un programme en C++  qui permet d'inverser les chiffres d'un entier N saisi par l'utilisateur.   par exemple  N=35672  le rĂ©sultat affichĂ© doit ĂŞtre   27653     (Solution)

Exercice 37

Écrire un programme en C++  qui permet de saisir un entier N et d'afficher le triangle d'Ă©toiles. par exemple  N = 4

              *

            ***

          *****

         *******     

(Solution)

Exercice 38

Écrire un programme en C++  qui  permet de saisir 10 entiers dans un tableau. puis compter combien y a-t-il  d'Ă©lĂ©ments pairs et  impairs.  (Solution)

Exercice 39

Écrire un programme en C++  qui affiche si un nombre  entier N  saisi au clavier est Premier ou non.   (Solution)

Exercice 40

Ecrire  un programme en C++  qui demande la saisie d'un tableau T de 10 entiers, et de mettre les Ă©lĂ©ments pairs dans  un tableau T1 et les Ă©lĂ©ments impaires dans un tableau T2. Puis afficher T1  et  T2      (Solution)

Exercice 41

Ecrire un programme en C++ qui permet Ă  l'utilisateur de saisir une suite d'entiers se terminant par 0, et qui affiche Ă  la fin le nombre d'occurrences de 5     (Solution)

Exercice 42

Ecrire un programme en C++ permettant de saisir 10 entiers et dit si ces entiers sont consĂ©cutifs ou non.     (Solution)

Exercice 43

Ecrire un programme en C++ qui permet de saisir 10 entiers et qui permet de calculer la différence entre la somme des éléments paires et la somme des éléments impaires par exemple : 1 6 7 4 5 3 1 8 2 5

==> (6+4+8+2) - (1+7+5+3+5+1) = -2      (Solution)

Exercice 44

Ecrire un programme en C++ permettant, Ă  partir d'un rĂ©el x et d'une valeur entière positive n, de calculer x puissance n   (Solution)    

Exercice 45

Ecrire un programme en C++ qui permet de tester l'Ă©galitĂ© entre deux tableaux d'entiers (tailles 10). Le programme affiche VRAI si les composants des deux tableaux sont correspondent position par position, sinon il affiche FAUX.     (Solution)

Exercice 46

Écrire un programme en C++ qui compte le nombre d'Ă©lĂ©ments en double ( deux Ă©lĂ©ments ou plus ) dans un tableau d'entiers saisie par l'utilisateur.      (Solution)

Exercice 47

Le centre de photocopie de votre Ă©tablissement facture 0,25 DH pour les dix premières photocopies, 0,20 DH les vingt suivantes et 0,10 DH au-delĂ . Ecrire un programme en C++ qui de mande Ă  l'utilisateur le nombre de photocopies effectuĂ©es et qui affiche la facture correspondant.   (Solution)    

Exercice 48

Écrire un programme en C++ qui permet de lire un caractère et dit s'il s'agit d'une lettre ou non , en cas d'une lettre il dit s'il s'agit d'une lettre minuscule ou majuscule.     (Solution)

Exercice 49

Écrire un programme en C++ permettant de décaler les valeurs nulles vers la fin du tableau, en gardant l'ordre des éléments.
Exemple 1 2 0 6 9 0 0 8 0 3

RĂ©sultat     1  2  6  9  8  3   0   0   0   0    (Solution)

Exercice 50

Écrire un programme en C++ permet d'Ă©changer ( permuter ) et afficher les valeurs des trois entiers ( A, B et C ) saisis par l'utilisateur, selon l'ordre croissant c'est-Ă -dire (A < B < C).    (Solution)

Exercice 51

Écrire un programme C++ qui permet d'Ă©changer les valeurs de deux entiers A et B saisis par l'utilisateur, mais Ă  condition d’utiliser seulement deux variables A et B. ( sans d'utiliser la troisième variable auxiliaire )   (Solution)

< Passage par référence >

Exercice 52

Ecrire un programme C++ qui 

1)déclare un entier a

2) déclare une référence vers cet entier ref_a

3) déclare un pointeur vers cet entier p_a

4) affiche les variables, leurs adresses, la valeur pointée.

              CorrigĂ©

#include<iostream>
using namespace std;
int main()
  int i;
  int *p_i; //pointeur
 
  cout<<"Donner un entier : ";
   cin>>i;
int &ref_i=i; //Reference
p_i=&i;
cout<<"Le contenu des variables:"<<endl;
cout<<"- variable i : "<<i<<endl;
cout<<"- variable ref_i : "<<ref_i<<endl;
cout<<"- variable p_i : "<<p_i<<endl;
cout<<"Leur adresse: "<<endl;
cout<<"- adresse de i : "<<&i<<endl;
cout<<"- adresse de ref_i : "<<&ref_i<<endl;
cout<<"- adresse de p_i : "<<&p_i<<endl;
cout<<"La valeur pointee : "<<*p_i<<endl;
 
return 0;
}

Exercice 53

Écrire une fonction nommĂ©e incrementer() permettant d’incrĂ©menter la valeur d’une variable passĂ©e en paramètre et une fonction nommĂ©e permuter() permettant d’Ă©changer les contenus de 2 variables de type int fournies en argument :

1) En transmettant l’adresse des variables concernĂ©es (seule mĂ©thode utilisable en C).
2) En utilisant la transmission par référence.

            CorrigĂ©

#include<iostream>
using namespace std;
 
//Passage par adresse
void permuter(int * x,int * y)
{
int p;
p = *x;
*x = *y;
*y = p;
}
void incrementer(int * x)
{
    (*x)++;
}
 
//Passage par référence
void incrementer(int & x)
{
    x++;
}
void permuter(int & x,int & y)
{
int p;
p = x;
x = y;
  y = p;
}
 
int main()
int a, b;
 
cout<<"Donner la valeur de A : ";
cin>>a;
cout<<"Donner la valeur de B : ";
cin>>b;

//Appel par adresse
incrementer(&a);
cout<<"la valeur de A :  "<<a<<endl;
permuter(&a,&b);
cout<<"la valeur de A: "<<a<<endl;
cout<<"la valeur de B: "<<b<<endl;

// Appel par rĂ©fĂ©rence 
cout<<"la valeur de A est: "<<a<<endl;
cout<<"la valeur de B est: "<<b<<endl;

incrementer(a);
cout<<"la valeur de A: "<<a<<endl;

permuter(a,b);
cout<<"la valeur de A: "<<a<<endl;
cout<<"la valeur de B: "<<b<<endl;
return 0;
}


POO En C++

Exercice 54: Classe Rectangle 


Écrire une classe «Rectangle» ayant deux variables « a » et « b » et une fonction membre « surface() » qui retournera la surface du rectangle.

                              CorrigĂ©

#include <iostream>
using namespace std;

class Rectangle {

   public:
   int a,b;
   int surface(){
     return a*b;
   }
};

int main() {
Rectangle rectangle;
cout<<"Entrez la largeur(a) du rectangle :"<<endl;
  cin>>rectangle.a;
cout<<"Entrez la longueur(b) du rectangle:"<<endl;
  cin>>rectangle.b;
 
  cout<<"Surface : "<< rectangle.surface();
   return 0;
}


Exercice 55 : Classe Somme 


Écrire une classe « Somme » ayant deux variables « n1 » et « n2 » et une fonction membre « som() » qui calcule la somme. Dans la mĂ©thode principale main demandez Ă  l’utilisateur d’entrez deux entiers et passez-les au constructeur par dĂ©faut de la classe « Somme » et afficher le rĂ©sultat de l’addition des deux nombres.

                              CorrigĂ©


#include <iostream>
using namespace std;

class Somme{
   public:

   int n1, n2;

   Somme(int nbr1, int nbr2){
      n1=nbr1;
      n2=nbr2;
   }

   int som(){
      return n1 + n2;
   }
};

int main (){
int n1, n2;
  cout<<"Entrez le premier nombre :";
  cin>>n1;
cout<<"Entrez le deuxième nombre :";
  cin>>n2;
Somme obj(n1,n2);
cout<<"Le résultat de l'addition est :"<< obj.som() <<"\n";
return 0;
}


Exercice 56 : Classe Etudiant 

Écrire une classe C++ appelĂ©e « Etudiant » avec les membres suivant :
nom : (de type char),
note1, note2 : (de type float)
calc_moy() : calcule la note moyenne.
afficher () : affiche le nom et la note moyenne.
Le programme principal (main) demande Ă  l’utilisateur d’entrer le nom et les notes d'un Ă©tudiant. et affiche leur nom et la note moyenne.

                                            CorrigĂ©

#include <iostream>
using namespace std;
class Etudiant {

  public:
  string nom;
  float note1, note2;

Etudiant(string _nom, float _note1, float _note2){
    nom = _nom;
    note1 = _note1;
    note2 = _note2;
  }

  float calc_moy(){
    return (note1 + note2)/2;
  }

  void afficher (){
    cout << "Étudiant: " << nom << " \n moyenne: "<< calc_moy() << endl;
  }
};

int main(){
string nom;
  int note1, note2;
cout << "Entrez le nom: ";
  cin >> nom;
   cout << "Entrez la première note: ";
  cin >> note1;
  cout << "Entrez la deuxième note: ";
  cin >> note2;
Etudiant E (nom, note1, note2);
E.afficher();
return 0;

}

Exercice 57 : Classe point

Réaliser une classe point permettant de manipuler un point d'un plan.on prévoira :

1) un point est définit par ses coordonnées x et y (des membres privés)

2) un constructeur (vous pouvez également implémenter les trois types de constructeur)

3) une fonction membre déplace effectuant une translation définie par ses deux arguments dx et dy (double)

4)une fonction membre affiche se contentant d'afficher les coordonnées cartésiennes du point.

5)une fonction membre saisir se contentant de saisir les coordonnées cartésiennes du point.

6)une fonction membre distance effectuant calculant la distance entre deux point.

7)une fonction membre milieu donnant le milieu d'un segment.

on écrira séparément:

8) un ficher source constituant la déclaration et la définition de la classe.

9)un petit programme d'essai (main) gérant la classe point.

                            CorrigĂ©


#include <iostream>

#include <math.h>

using namespace std;

class point {

double x;

double y;

public:

point();

point(double,double);

point(point &);

~point();

double get_x();

double get_y();

void set_x(double x1);

void set_y(double y1);

point deplace(double dx, double dy);

void affiche();

void saisir();

double distance(point &);

point milieu(point &);

};

point::point(){   }

point::point(double a,double b) x=a;    y=b; }

point::point(point &p) {

set_x(p.get_x());

set_y(p.get_y());

}

point::~point() {}

double point::get_x() {return x; }

double point::get_y() return y; }

void point::set_x(double a) x=a;  }

void point::set_y(double a) y=a;  }

point point::deplace(double dx,double dy) {

set_x(get_x()+dx);

set_y(get_y()+dy);

return *this;

}

double point::distance (point &p) {

double p1,x1,x2;

x1=(get_x()-p.get_x())*(get_x()-p.get_x());

x2=(get_y()-p.get_y())*(get_y()-p.get_y());

//p1=sqrt(((get_x()-p.x)*((get_x()-p.x))+((get_y()-p.y)*(get_y()-p.y)));

p1=sqrt(x1+x2);

return p1;

}

void point::affiche()

{

cout<<"les coordonnées sont:"<<endl;

cout<<"x="<<get_x()<<endl;

cout<<"y="<<get_y()<<endl;

}

void point::saisir()

{

cout<<"donnĂ©e les coordonnĂ©es:"<<endl;

cout<<"x="<<endl;

  cin>>x;

cout<<"y="<<endl;

  cin>>y;

}

point point::milieu(point &p)

{

point p1;

p1.x=(get_x()+p.get_x())/2;

p1.y=(get_y()+p.get_y())/2;

return p1;

}



int main()

 {

point p(1,1);

point x(5,5);

point c;

p.affiche();

p.deplace(5,5);

p.affiche();

cout<<"la distance est : "<<p.distance(x)<<endl;

c=p.milieu(x);

c.affiche(); 

}


Exercice 58 : Classe Compte 

Écrire un programme qui simule la gestion d’un simple compte bancaire. Le compte est crĂ©Ă© avec un solde initial. Il est possible de dĂ©poser et de retirer des fonds, d’ajouter des intĂ©rĂŞts et de connaĂ®tre le solde actuel. Cela devrait ĂŞtre implĂ©mentĂ© dans une classe nommĂ©e Account qui comprend:


1) Un constructeur par défaut qui met le solde initial à zéro.
2) Un constructeur qui accepte une balance initial comme paramètre.
3) Une fonction getBalance qui renvoie le solde actuel.
4) Une méthode deposer pour déposer un montant spécifié.
5) Une méthode retirer pour retirer un montant spécifié.
6) Une mĂ©thode ajouter_Interet pour ajouter de l’intĂ©rĂŞt au compte.
La mĂ©thode  ajouter_Interet  prend le taux d’intĂ©rĂŞt comme paramètre et modifie le solde du compte en solde * (1 + taux d’intĂ©rĂŞt).

                          CorrigĂ©

#include <iostream>

using namespace std;


class Compte {
private:
  double balance = 0;
public:
Compte() : balance(0) {}
Compte(double initial_balance) :  balance(initial_balance) {}
double getBalance() const { return balance; }
void deposer(double amount) { balance += amount; }
void retirer (double amount) { balance -= amount; }
void  ajouter_Interet (double rate) { balance = balance*(1 + rate); }
};

int main() {
  Compte compte1;
  Compte  compte2(3000);
  compte1.deposer(100);
  compte2.retirer(1000);
  compte1.ajouter_Interet (0.3);
  cout << compte1.getBalance() << "\n";
  cout << compte2.getBalance();           
  return 0;

}


Exercice 59 :  Classe temps 
Créer une classe appelée Temps, qui a des membres de type int tels que heures, minutes et secondes.(rendez-les private)
1) Un constructeur doit initialiser ces données à 0
2) Un autre constructeur devrait l’initialiser Ă  des valeurs fixes.
3) Une fonction membre devrait l’afficher, au format 17h 59min 59s.
4) Une autre fonction pour renvoyer les données de chaque membre nommez-les getheurs, getMin et getSec
5) Une fonction membre doit ajouter deux objets de type Temps passĂ© en arguments.


                             
Corrigé


#include <iostream>
using namespace std;

class Temps {
  private:
     int heures;
     int minutes;
     int seconds;
  
  public:
    Temps() { setTemps(0, 0, 0); }
    Temps(int h, int m, int s) { setTemps(h, m, s); }
   
void setTemps(int h, int m, int s) {
heures = h; minutes = m; seconds = s;
}
   
void getTemps(void) const {
cout <<heures << "h "<<minutes << "min "
    <<seconds <<"s"<< endl;      
}

int getHours() const { return heures; }
int getMin() const { return minutes; }
int getSec() const { return seconds; }

void ajouterTemps(Temps t1, Temps t2) {
this->seconds= t1.seconds + t2.seconds;
this->minutes = t1.minutes + t2.minutes + (this->seconds/60);
this->heures = t1.heures + t2.heures + (this->minutes/60);
      this->minutes %= 60;
      this->seconds %= 60;
    }
};

int main() {

 Temps t1(4,43, 59), t2(1, 20, 32);
    Temps t3;

    t1.getTemps();
    t2.getTemps();

    t3.ajouterTemps(t1, t2);
    t3.getTemps();
}


Exercice 60: Classe rectangle

Écrire un programme utilisant une classe rectangle dont le constructeur prend deux paramètres, largeur et hauteur et qui offre les fonctions suivantes :

1) calcul du périmètre

2) calcul de la surface

3)  affichage

ainsi que les accesseurs et mutateurs triviaux (lecture et modification de la largeur et de la hauteur).

                                  CorrigĂ©


#include<iostream>

#include <cstdlib>

using namespace std;

class Rectangle {

private:

int largeur;

int hauteur;

public:

Rectangle(int initLargeur,int initHauteur);

~Rectangle();

int getLargeur() const { return largeur; };

int getHauteur() const { return hauteur; };

int perimetre() const { return 2*(largeur+hauteur); };

int surface() const { return largeur * hauteur; };

void setLargeur(int newLargeur) { largeur = newLargeur; };

void setHauteur(int newHauteur) { hauteur = newHauteur; };

void afficher();

};


Rectangle::Rectangle(int initLargeur, int initHauteur)

{

largeur = initLargeur;

hauteur = initHauteur;

}


Rectangle::~Rectangle(){ }


void Rectangle::afficher() {

for( int i=0; i < hauteur; i++)

{

for(int j=0; j < largeur; j++)

cout << "*";

cout << endl;

}

}



int main()

{

Rectangle monRectangle(0,0);

char choix = '0';

int value;

while(true)

{

do

{

cout << " Rectangle - Menu" << endl;

cout << "1 - Modifier largeur du rectangle" << endl;

cout << "2 - Modifier hauteur du rectangle" << endl;

cout << "3 - Calculer les propriétés du rectangle" << endl;

cout << "4 - Afficher le rectangle" << endl;

cout << "5 - Quitter" << endl;

cin >> choix;

}while(choix < '1' || choix > '5');

switch(choix)

{

case '1':

cout << "Nouvelle largeur : "; cin >> value;

monRectangle.setLargeur(value);   break;

case '2':

cout << "Nouvelle hauteur : "; cin >> value;

monRectangle.setHauteur(value);  break;

case '3':

cout << "Périmètre : " << monRectangle.perimetre() << endl;

cout << "Surface : " << monRectangle.surface() << endl;   break;

case '4':

monRectangle.afficher();   break;

case '5':

exit(0);    break;

default:

cout << "Erreur ! Choix invalide." << endl;

exit(1);

}

}

return 0;

}


Exercice 61  :   L'hĂ©ritage 

Écrivez un programme qui dĂ©finit une classe appelĂ©e Forme avec un constructeur qui donne de la valeur Ă  la largeur(x) et Ă  la hauteur(y). DĂ©finir la mĂ©thode aire() dans les deux sous-classes Triangle et Rectangle, qui calculent l’aire. Dans la mĂ©thode principale main, dĂ©finissez deux variables, un triangle et un rectangle, puis appelez la fonction aire() dans ces deux variables.
Notez que:

 l’aire du triangle est = largeur * hauteur / 2 

l’aire du rectangle est = largeur * hauteur.

                       CorrigĂ©

#include <iostream>
using namespace std;
class Forme {
protected:
  float x, y;
public:
  Forme(float  x, float y)
  {
    this->x =  x;
    this->y =  y;
  }
};

class Rectangle: public Forme
{
public:
  Rectangle(float  x, float  y) : Forme (x, y) {}

  float aire()
  {
    return (x * y);
  }
};

class Triangle: public Forme
{
public:
  Triangle(float x, float y): Forme (x, y) {}

  float aire()
  {
    return (x * y / 2);
  }
};


int main (){
  Rectangle rectangle(2,3);
  Triangle triangle(2,3);
  cout << rectangle.aire() << endl;
  cout << triangle.aire() << endl;
  return 0;
}


Exercice 62:   fonction amie 

Écrire une classe «Personne» ayant deux variables « nom » et « Ă˘ge » sont privĂ©es et un constructeur avec paramètres, Puis Ă©crire une fonction amie (fonction Friend) Ă  l'extĂ©rieur de la classe qui permet  d'afficher les informations d'une personne (nom et l'âge).

                   CorrigĂ©

#include <iostream>
using namespace std;
class Personne {
private:
string nom;
int age;
public:
Personne (string n,int a)
{ nom=n ; age=a; }
friend void affiche (Personne p);
};

void affiche (Personne p)
{
cout<<"votre nom est: "<<p.nom<<endl;
cout<<"votre âge est:"<<p.age;
}

int main()
{  Personne p("mohamed",32);
   affiche(p);
}


Exercice 63:  Polymorphisme 

1)Écrire une classe Forme ayant une fonction  aire ()
2) Écrire la classe triangle qui hĂ©rite de la classe Forme et comporte les attributs 
(base et  hauteur de type rĂ©el) et les mĂ©thodes ( constructeur et  aire() ).
3) Écrire la classe Cercle qui hérite de la classe Forme et comporte l'attribut rayon
 de type rĂ©el et les mĂ©thodes ( constructeur et  aire() ).
4) Écrire la classe Rectangle qui hĂ©rite de la classe Forme et comporte les attributs 
(Longueur et largeur de type réel) et les méthodes ( constructeur et aire() ).
4) Écrire la classe Carre qui hérite de la classe Forme et comporte l'attribut
(côté de type réel) et les méthodes ( constructeur et aire() ).
6) Écrire une fonction main()  qui permet de dĂ©clarer un tableau des pointeurs de type Forme puis remplir ce tableau avec les  instances de types (Cercle, Rectangle, Triangle, CarrĂ©) et après afficher la surface de chaque objet.

                      CorrigĂ©

#include <iostream> 
using namespace std; 
class Forme{
  public:
virtual void aire() {cout<<"Forme"<<endl;}
};


class Triangle : public Forme
{ int base;
  int hauteur ;
  public:
  Triangle (int b,int h){ base=b; hauteur=h;}
  void aire() {cout<<"aire de triangle"<<endl;}
};

class Cercle : public Forme
{ int rayon ;
  public:
  Cercle (int r){ rayon=r;}
  void aire() {cout<<"aire de cercle"<<endl;}
};

class Carre : public Forme
{ int cote;
  public:
  Carre(int c){ cote=c;}
  void aire() {cout<<"aire de CarrĂ©"<<endl;}
};

class Rectangle : public Forme
{ int longueur;
  int largeur;
  public:
  Rectangle (int l,int L){ longueur=l; largeur=L;}
  void aire() {cout<<"aire de rectangle"<<endl;}
};



int main()
   Forme * T[4];
  T[0]= new Triangle(6,5);
  T[1]= new Carre(5);
  T[2]= new Cercle(6);
  T[3]= new Rectangle(3,4) ;
  T[0]->aire();
  T[1]->aire();
  T[2]->aire();
  T[3]->aire();
   return 0;
}

Exercice 64:  Classe abstraite 

1)Écrire une classe A abstraite ayant 3 mĂ©thodes:  deux mĂ©thodes sont des fonctions virtuelles purs (afficher1() et afficher2() et la troisième bien dĂ©finie s'appelle afficher3().
2) Écrire une classe B qui hĂ©rite de la classe A dans cette classe  redĂ©finir les deux fonctions virtuelles prĂ©cĂ©dentes.
2) Écrire une fonction main()  qui permet de dĂ©clarer un objet (b) de la classe B, puis tester les trois mĂ©thodes sur cet objet.

                          CorrigĂ©

#include <iostream> 
using namespace std; 

// Classe abstraite
class A {
  public:
    virtual void afficher1()=0; //Fonction virtuelle pure
     virtual void afficher2()=0; //Fonction virtuelle pure

    void afficher3()
    {
      cout << " C'est la mĂ©thode afficher3 de la classe mĂ©re" << endl;
    }
};


class B : public A
{
  public:
    void afficher1()
    {
      cout << " C'est la mĂ©thode afficher1 de la classe fille" << endl;
    }

    void  afficher2()
    {
      cout << " C'est la mĂ©thode afficher2 de la classe fille" << endl;
    }
};

int main()
{
  B b;
  b.afficher1();
  b.afficher2();
  b.afficher3();
  return 0;
}

Exercice 65:   Surcharge des opĂ©rateurs   

L'objectif de cet exercice corrigĂ© en C++ est de dĂ©finir les opĂ©rateurs de comparaisons et les opĂ©rateurs arithmĂ©tiques d'une classe Fraction en utilisant les fonctions membres et les fonctions amies

1) CrĂ©er la classe Fraction possĂ©dant deux donnĂ©es membres « numĂ©rateur » et « dĂ©nominateur » qui correspondent respectivement au numĂ©rateur et au dĂ©nominateur de la fraction

2) DĂ©finir un constructeur d'initialisation

3) DĂ©finir une fonction membre afficher()

4) DĂ©finir les opĂ©rateurs arithmĂ©tiques (+, - , * et /) entre deux fractions

5) DĂ©finir les opĂ©rateurs arithmĂ©tiques (+, - , * et /) entre une fraction et un nombre

6) DĂ©finir les opĂ©rateurs de comparaison (==, !=, <, >, <=, >=) sur deux fractions

7) Créer un programme de test

                CorrigĂ©


#include <iostream>
using namespace std;

class fraction {
    int num;
    int den;

public:
    fraction(int a = 1, int b = 1)
    {
        num = a;
        den = b;
    }

    void afficher()
    {
        cout << num << "/" << den << endl;
    }
    
    
    fraction inverse()
    {
        fraction r;
        r.num = den;
        r.den = num;
        return r;
    }
    
   
    fraction operator+(fraction f)
    {
        fraction s;
        s.num = num * f.den + den * f.num;
        s.den = den * f.den;
        return s;
    }

    fraction operator-(fraction f)
    {
        fraction s;
        s.num = num * f.den - den * f.num;
        s.den = den * f.den;
        return s;
    }

    fraction operator*(fraction f)
    {
        fraction s;
        s.num = num * f.num;
        s.den = den * f.den;
        return s;
    }


    fraction operator/(fraction f)
    {
        return *this * (f.inverse());
    }
    
    
    fraction operator+(int x)
    {
        fraction r(x, 1);
        return *this + r;
        
        /* Ou
        fraction s;
        s.num = num + den * x;
        s.den = den;
        return s;
        */
    }

    fraction operator-(int x)
    {
        fraction r(x, 1);
        return *this - r;
    }

    fraction operator*(int x)
    {
        fraction r(x, 1);
        return *this * r;
    }

    fraction operator/(int x)
    {
        fraction r(x, 1);
        return *this / r;
    }
    
   
friend fraction operator+(int, fraction);
friend fraction operator-(int, fraction);
friend fraction operator*(int, fraction);
friend fraction operator/(int, fraction);
    
   
    bool operator>(fraction f)
    {
      return (num * f.den > den * f.num);
    }

    bool operator>=(fraction f)
    {
     return (num * f.den >= den * f.num);
    }

    bool operator==(fraction f)
    {
       return (num * f.den == den * f.num);
    }

    bool operator<(fraction f)
    {
        return !(*this >= f);
    }

    bool operator<=(fraction f)
    {
        return !(*this > f);
    }

    bool operator!=(fraction f)
    {
        return !(*this == f);
    }
};


fraction operator+(int x, fraction f)
{
    return f + x;
}
fraction operator-(int x, fraction f)
{
    return f - x;
}
fraction operator*(int x, fraction f)
{
    return f * x;
}
fraction operator/(int x, fraction f)
{
    return f / x;
}


int main()
{
    fraction f1(1, 2), f2(2, 3);
    cout << "Fraction F1 : ";
    f1.afficher();
    cout << "Fraction F2 : ";
    f2.afficher();
    
    cout << "F1 + F2 = ";
    (f1 + f2).afficher();
    
    cout << "F1 - F2 = ";
    (f1 - f2).afficher();
    
    cout << "F1 * F2 = ";
    (f1 * f2).afficher();
    
    cout << "F1 / F2 = ";
    (f1 / f2).afficher();
    
    cout << "F1 + 5 = ";
    (f1 + 5).afficher();
    
    cout << "3 * F2 = ";
    (3 * f2).afficher();
    
    if (f1 == f2)
        cout << "Les deux fractions sont egales" << endl;
    else
        cout << "Les deux fractions ne sont pas egales" << endl;
        
    if (f1 > f2){
     cout << "La fraction la plus grande est : ";
        f1.afficher();
}
    else if(f1 < f2){
     cout << "La fraction la plus grande est : ";
        f2.afficher();
}
    
    /*    
    cout << "La fraction la plus petite: ";    
    if (f1 < f2)
        f1.afficher();
    else if(f1 > f2)
        f2.afficher();
        
    if (f1 != f2)
        cout << "les deux fractions ne sont pas egales" << endl;
    else
        cout << "Les deux fractions sont egales" << endl;
    */
}