Bonjour à toutes et tous
J'ai fais un petit programme qui permet de faire des additions et multiplications de nombres complexes, le programme permet également d'afficher les nombres au format cartésien ou polaire.
Le programme est fragmenté en trois fichiers le main, le h et le cpp correspondant où sont les déclarations des méthodes entre autre.
Mon problème c'est que..TOUT marche.Ce qui est vraiment étrange c'est que dans la méthode "operator*" et "puissance" je fais passé pour le troisième argument un angle qui devrait être en degré, or, dans "operator*" l'angle est en radian et dans "puissance" j'ai été obligé de le convertir sinon le compilateur me sortait des erreurs..
Donc ma question, si elle n'est pas clair, c'est pourquoi est ce que ça marche lorsque je fais passer des radians à la place de degrés un coup et pas l'autre?
Voici le main:
le header:Code:#include "complexe.h" int main(void) { cout.fixed; cout.precision(3); complexe z1(1,2,4),z2(0,5,35),z3,z4,z5(1,-0.5,0.866),z6;//Initialisation des nbs complexes z1.aff_cart("z1"); z2.aff_cart("z2"); z1.aff_pol("z1"); z2.aff_pol("z2"); z3=z1+z2;//z3=somme z1 z2 z3.aff_cart("z3"); z3.aff_pol("z3"); z4=z1*z2;//z4=produit z1 z2 z4.aff_cart("z4"); z4.aff_pol("z4"); z6=puissance(z5,2);//z6=z5^2 z6.aff_cart("z6"); z6.aff_pol("z6"); z5.aff_cart("z5"); z5.aff_pol("z5"); return 0; }
et le cpp des déclarationsCode:#include <iostream> #include <math.h> using namespace std; class complexe { private : double reel, imag, mod, arg; static const double pi; public : complexe(bool,double,double);//constructeur avec argument complexe (void);//constructeur sans argument ~complexe(void);//destructeur void conv_pol_cart(void); void conv_cart_pol(void); void aff_cart(char*); void aff_pol(char*); friend complexe operator+(complexe,complexe); friend complexe operator*(complexe,complexe); friend complexe puissance(complexe, int); };
Je rappelle que le programme fonctionne très bien!J'espère simplement que quelqu'un pourra m'aider..Code:#include "complexe.h" const double complexe::pi=3.14159265358;//Initiation de PI void complexe::conv_cart_pol(void)//conversion cartesien/polaire { mod=sqrt(pow(reel,2)+pow(imag,2)); arg=atan2(imag,reel); } void complexe::conv_pol_cart(void)//conversion polaire/cartesien { reel=mod*cos(arg); imag=mod*sin(arg); } complexe::complexe(bool b, double u, double v)//Constructeur avec parametre { if(b==1) { reel=u; imag=v; conv_cart_pol(); } else { v=v*pi/180;//conversion deg>rad mod=u; arg=v; conv_pol_cart(); } cout<<"constructeur"<<endl; } complexe::complexe(void) { reel=0; imag=0; mod=0; arg=0; cout<<"constructeur sans parametre"<<endl; } complexe::~complexe(void) { cout<<"destructeur"<<endl; } void complexe::aff_cart(char *nom)//affichage cartesien { cout<<nom<<"="<<reel<<"+"<<imag<<"i"<<endl; } void complexe::aff_pol(char *nom)//affichage polaire { arg=arg*180/pi;//conversion rad>deg cout<<nom<<"="<<mod<<"⎪_"<<arg<<"deg"<<endl; } complexe operator+(complexe a,complexe b)//somme { complexe resultat(1,a.reel+b.reel,a.imag+b.imag); return resultat; } complexe operator*(complexe a, complexe b)//produit { complexe resultat(0,a.mod*b.mod,a.arg+b.arg); return resultat; } complexe puissance(complexe a, int n)//puissance { complexe resultat(0,pow(a.mod,n),(a.arg*n)*180/complexe::pi); return resultat; }
Merci pour la lecture
PS:Il va de soit que s'il y a un problème de compréhension n'hésitez pas à me demander!
-----