Exercice 1 : classe Rectangle 


Écrire en C++ 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 2 : classe Somme 


Écrire en C++ 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 3 : classe Etudiant 

Écrire 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 4 : classe point

Réaliser en C++  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 5 : classe Compte 

Écrire un programme en C++ 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 6 :  Classe temps 
Créer en C++ 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 7  : Classe rectangle

Écrire en C++ 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 8  :     L'héritage 

Écrivez un programme en C++ 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 9:   fonction amie 

Écrire en C++ 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 10:  polymorphisme 

1) Écrire en C++ 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 11:  Classe abstraite 

1)Écrire en C++ 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 12:   

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;
    */
}