Choisissez votre style : colorisé, impression

Correction 19
Surcharge des opérateurs.


Exercice 1 : encore un peu plus de polynômes

Cet exercice est de niveau 2 principalement en raison de sa longueur.

Pour la première partie, voir l'exercice 0.

Concernant la seconde partie :

  1. Ajoutez les opérateurs pour l'addition et la soustraction :

    À ajouter à la classe Polynome :

    Polynome& operator+=(const Polynome&);
    Polynome& operator-=(const Polynome&);
    Polynome operator+(const Polynome&) const;
    Polynome operator-(const Polynome&) const;
    

    Les opérateurs + et - sont effectivement const puisqu'il ne modifient pas la classe concernée mais crée un nouveau résultat.

    Pour la définition des opérateurs, écrire hors de la classe :

    La méthode simplifie est une méthode privée :

    void Polynome::simplifie()
    {
      while ((!p.empty()) && (top() == 0.0)) p.pop_back();
      if (p.empty()) p.push_back(0.0);
    }
    
  2. Ajoutez les opérateurs de comparaison == et !=

    bool Polynome::operator==(const Polynome& q) const {
      return p == q.p;
    }
    
    bool Polynome::operator!=(const Polynome& q) const {
      return p != q.p;
    }
    
  3. Ajoutez une méthode top qui retourne la valeur du coefficient de plus haut degré du polynôme.

     double top() const { return p[degre()]; }
    
  4. Ajoutez maintenant la méthode (publique) divise()

    void Polynome::divise(const Polynome& denominateur,
    		      Polynome& quotien, Polynome& reste) const
    {
      quotien = 0;
      reste = *this;
      for (Degre dq(reste.degre() - denominateur.degre());
           (dq >= 0) // il est important ici que dq soit signé
    	 && (reste != 0);
           dq = reste.degre() - denominateur.degre()) {
        quotien.met_coef(reste.top() / denominateur.top(), dq);
        reste -= Polynome(dq, quotien.p[dq]) * denominateur;
      }
    }
    
  5. Terminer en implémentant les opérateurs de division et modulo

    Aucune surprise ici : prototypes :

      Polynome& operator/=(const Polynome&);
      Polynome operator/(const Polynome&) const;
      Polynome operator%(const Polynome&) const;
    
    et définitions :
    Polynome Polynome::operator/(const Polynome& q) const {
      Polynome r,s;
      divise(q,r,s);
      return r;
    }
    
    Polynome Polynome::operator%(const Polynome& q) const {
      Polynome r,s;
      divise(q,r,s);
      return s;
    }
    
    Polynome& Polynome::operator/=(const Polynome& q) {
      return *this = *this / q;
    }
    

Vous trouverez ici le code complet (et même un peu plus).


Dernière mise à jour : 2025/03/13 08:47