public class ComplexNumber{ private double real_part, im_part; public ComplexNumber(double re, double im){ real_part = re; im_part = im; } public double getRealPart(){ return real_part; } public double getImaginaryPart(){ return im_part; } public ComplexNumber conjugate(){ return new ComplexNumber (real_part, -im_part); } public double norm(){ return Math.sqrt (real_part * real_part + im_part * im_part); } public ComplexNumber add(ComplexNumber w){ double x,y; x = this.real_part + w.real_part; y = this.im_part + w.im_part; return new ComplexNumber (x,y); } public ComplexNumber subtract(ComplexNumber w){ double x,y; x = this.real_part - w.real_part; y = this.im_part - w.im_part; return new ComplexNumber (x,y); } public ComplexNumber multiply(ComplexNumber w){ double x,y; x = this.real_part * w.real_part - this.im_part * w.im_part; y = this.real_part * w.im_part + this.im_part * w.real_part; return new ComplexNumber (x,y); } public ComplexNumber divide(ComplexNumber w){ ComplexNumber p = this.multiply(w.conjugate()); double n = Math.pow(w.norm(),2); return new ComplexNumber (p.real_part / n , p.im_part / n); } public String toString(){ if (im_part==0) return real_part + ""; if (real_part==0) return im_part + "i"; if (im_part > 0) return real_part + " + " + im_part + "i"; if (im_part < 0) return real_part + " - " + (-im_part) + "i"; } public double argument(){ if (real_part>0) return Math.atan(im_part / real_part); if (im_part > 0 && real_part == 0) return Math.PI/2; if (real_part<0 && im_part>=0) return Math.PI + Math.atan(im_part/real_part); if (real_part<0 && im_part<0) return -Math.PI + Math.atan(im_part/real_part); if (im_part<0 && real_part==0) return - Math.PI/2; } }