class Complex {

	private double real;
	private double imaginary;

	double im()
   {
      return imaginary;
   }

   public double re()
   {
      return real;
   }

	public double mag()
   {
      return Math.sqrt(imaginary*imaginary + real*real);
   }

	public double phase()
   {
      return Math.atan(imaginary / real);
   }

   public void setReIm(double r, double i)
   {
      real = r;
      imaginary = i;
   }

   public void setMagPhase(double m, double p)
   {
      real = m * Math.cos(p);
      imaginary = m * Math.sin(p);
   }

   public Object clone()
   {
      Complex result = new Complex();
      result.setReIm(re(), im());
      return result;
   }

   public static void main(String args[])
   {
      Complex c = new Complex();

      c.setReIm(1.0, 1.0);
      System.out.println("Real: " + c.re() + " Imaginary: " + c.im());
      System.out.println("Magnitude: " + c.mag() + " Phase: " + c.phase());

      c.setMagPhase(1.414, 0.785);
      System.out.println("Real: " + c.re() + " Imaginary: " + c.im());
      System.out.println("Magnitude: " + c.mag() + " Phase: " + c.phase());

      Complex c2 = (Complex)c.clone();
      System.out.println("Clone Real: " + c2.re() + " Imaginary: " + c2.im());
   }
}
