solution
Transcription
solution
Printed by Vincent Granet oct. 04, 16 19:35 complexe0.cpp #include <iostream> #include <cmath> oct. 04, 16 19:35 complexe0.cpp Page 2/3 return complexe(this−>preelle−c.preelle, this−>pimg−c.pimg); } #include "complexe0.hpp" complexe complexe::operator−(complexe c) const { return this−>moins(c); } using namespace std; const double complexe::eps = 1E−05; const complexe complexe::I = complexe(0,1); /* * Construit un objet Complexe à partir de deux * paramètres double qui représentent les coordonnées * polaires (rho et theta) d’un complexe. * * @param r un double * @param t un double * @return un Complexe */ complexe complexe::polComplexe(double r, double t){ return complexe(r*cos(t),r*sin(t)); } double complexe::getPreelle(void) const { return this−>preelle; } void complexe::setPreelle(double r) { this−>preelle = r; } double complexe::getPimg(void) const { return this−>pimg; } /* * Rôle : renvoie this * c * * @param c un complexe. * @return complexe. */ complexe complexe::mult(complexe c) const { // Faire le produit des normes et la somme des phases // de this et c et construire un Complexe qui sera donc le // produit de this par c return complexe::polComplexe(this−>rho()*c.rho(), this−>theta()+c.theta()); } void complexe::setPimg(double i) { this−>pimg = i; } void complexe::ecrireComplexe(void) const { cout << "(" << this−>getPreelle() << "," << this−>getPimg() << ")"; } std::ostream& operator<< (std::ostream& f, const complexe& c) { c.ecrireComplexe(); return f; } complexe complexe::operator*(complexe c) const { return this−>mult(c); } // Les fonctions de conversion polaires /* * Renvoie la norme de l’objet complexe courant. */ double complexe::rho(void) const { return sqrt(this−>preelle*this−>preelle + this−>pimg*this−>pimg); } /* * Rôle : renvoie this / c * * @param c un complexe. * @return complexe. */ complexe complexe::div(complexe c) const { // Faire la division des normes et la différence des phases // de this et c et construire un Complexe qui sera donc le // produit de this par c return complexe::polComplexe(this−>rho()/c.rho(), this−>theta()−c.theta()); } /* * Renvoie la phase de l’objet complexe courant. */ double complexe::theta(void) const { return atan2(this−>pimg, this−>preelle); } complexe complexe::operator/(complexe c) const { return this−>div(c); } /* * Rôle : renvoie this + c */ complexe complexe::plus(complexe c) const { return complexe(this−>preelle+c.preelle, this−>pimg+c.pimg); } /* * Teste si le paramètre complexe c et * de l’objet courant sont égaux. * Le test est fait à un epsilon près. * * @param c un complexe */ bool complexe::egal(complexe c) const { return fabs(this−>preelle−c.preelle)<eps && fabs(this−>pimg−c.pimg)<eps; } complexe complexe::operator+(complexe c) const { return this−>plus(c); } /* * Rôle : renvoie this − c */ complexe complexe::moins(complexe c) const { mardi octobre 04, 2016 Printed by Vincent Granet Page 1/3 1/4 2/4 mardi octobre 04, 2016 Printed by Vincent Granet oct. 04, 16 19:35 complexe0.cpp Page 3/3 Printed by Vincent Granet complexe0.hpp oct. 04, 16 19:35 Page 1/1 #ifndef COMPLEXE_HPP #define COMPLEXE_HPP bool complexe::operator==(complexe c) const { return this−>egal(c); } #include <iostream> class complexe { private: static const double eps; static const complexe I; double preelle; double pimg; public: // constructeurs complexe(double r=0, double i=0) : preelle(r), pimg(i) {} complexe(complexe const& c) : preelle(c.preelle), pimg(c.pimg) {} // le destructeur (pédagogique) ~complexe(void) { // std::cout << "destr comp\n"; } // accesseurs double getPreelle(void) const; double getPimg(void) const; // mutateurs void setPreelle(double r); void setPimg(double i); // les méthodes double rho(void) const; double theta(void) const; /** * Teste si le paramètre complexe c et * de l’objet courant sont différents. * Le test est fait à un epsilon près. * * @param c un complexe. */ bool complexe::different(complexe c) const { return !this−>egal(c); } bool complexe::operator!=(complexe c) const { return this−>different(c); } /* Rôle : renvoie le conjugué du complexe courant. * * @return <complexe */ complexe complexe::conjugue(void) const { return complexe(this−>preelle, −this−>pimg); } complexe complexe::operator~(void) const { return this−>conjugue(); } complexe conjugue(void) const; static complexe polComplexe(double r, double t); complexe plus(complexe c) const; complexe moins(complexe c) const; complexe mult(complexe c) const; complexe div(complexe c) const ; bool different(complexe c) const; bool egal(complexe c) const; // surcharge des opérateurs complexe complexe complexe complexe operator+(complexe operator−(complexe operator*(complexe operator/(complexe c) c) c) c) const; const; const; const; complexe operator~(void) const; bool operator!=(complexe c) const; bool operator==(complexe c) const; // Entrées/Sorties void ecrireComplexe(void) const; }; #endif // mardi octobre 04, 2016 3/4 4/4 COMPLEXE_HPP mardi octobre 04, 2016