#include #include struct complexe { double re,im; complexe operator +(complexe b) const { return (complexe){re+b.re,im+b.im}; } complexe operator -(complexe b) const { return (complexe){re-b.re,im-b.im}; } complexe operator *(complexe b) const { return (complexe){re*b.re-im*b.im,re*b.im+im*b.re}; } complexe operator /(complexe b) const { double n=b.re*b.re+b.im*b.im; return (complexe){(re*b.re+im*b.im)/n, (im*b.re-re*b.im)/n}; } complexe & operator *=(double x) { re*=x, im*=x; return *this; } }; complexe c_sqrt(complexe a) { double n=sqrt(a.re*a.re+a.im*a.im), x=0, y=0; if(n) { if(a.re>0) x=sqrt((n+a.re)/2), y=a.im/(2*x); else y=sqrt((n-a.re)/2), x=a.im/(2*y); } return (complexe){x,y}; } void c_aff(complexe a) { printf("(%lf+%lfi)",a.re,a.im); } complexe c_lire() { complexe a; scanf("%lf%lf",&a.re,&a.im); return a; } void c_eq2(complexe a,complexe b,complexe c,complexe *x1,complexe *x2) // a x²+bx+c=0 { b*=-.5; complexe d=c_sqrt(b*b-a*c), bd=b.re*d.re+b.im*d.im>0?b+d:b-d; *x1=bd/a; *x2=x1->re || x1->im ? c/(a**x1) : *x1; } int main() { complexe a=c_lire(), b=c_lire(), c=c_lire(), x1, x2; c_aff(a), printf("+"), c_aff(b), printf("="), c_aff(a+b), printf("\n"); c_aff(a), printf("-"), c_aff(b), printf("="), c_aff(a-b), printf("\n"); c_aff(a), printf("*"), c_aff(b), printf("="), c_aff(a*b), printf("\n"); c_aff(a), printf("/"), c_aff(b), printf("="), c_aff(a/b), printf("\n"); printf("sqrt"), c_aff(a), printf("="), c_aff(c_sqrt(a )), printf("\n"); c_eq2(a,b,c,&x1,&x2); printf("Les deux racines de l'équation "), c_aff(a), printf("X²+"), c_aff(b), printf("X+"), c_aff(c), printf("=0 sont "); c_aff(x1), printf(" et "), c_aff(x2); return 0; }