import java.util.Vector;

/**
 * @author Dimitri
 */
class Komplex
{
	double reel,imanigaer;
	
	//Konstruktor
	public Komplex(){} 
	
	public Komplex(double x,double y)
	{
		reel=x;
		imanigaer=y;
	}

		
	//Addieren
	public Komplex add(Komplex b)
	{
		reel +=b.reel;
		imanigaer += b.imanigaer;
		return this;
	}
	
	//Subtrahieren
	public Komplex sub(Komplex b)
	{

		reel -= b.reel;
		imanigaer -= b.imanigaer;
		return this;
	}
	
	//Multiplizieren
	public Komplex mult(Komplex b)
	{
		reel= b.reel*reel-b.imanigaer*imanigaer;
		imanigaer= b.reel*imanigaer+b.imanigaer*reel;
		return this;
	}
	
	public Komplex mult(double x) 
	{
      reel *= x ; 
      imanigaer *= x ;
      return this ;
   }
   
	//Dividieren
	public Komplex div(Komplex b)
	{
		reel= (reel*b.reel+b.imanigaer*imanigaer)/(b.reel*b.reel+b.imanigaer*b.imanigaer);
		imanigaer= (imanigaer*b.reel-reel*b.imanigaer)/(b.reel*b.reel+b.imanigaer*b.imanigaer);
		return this;
	}
	
	
	//liefert den Betrag
	public double betrag(Komplex a)
	{
		return Math.sqrt(a.reel*a.reel+a.imanigaer*a.imanigaer);
	}
	
	// liefert e^{ix} als komplexe Zahl, x ist reell 

   public static Komplex expi(double x) 
   {
      return new Komplex(Math.cos(x),Math.sin(x));
   }
   
   // Liefert die N-te Einheitswurzel^x als komplexe Zahl
   public static Komplex omega(double x, int N) 
   {
   		double a = (2*Math.PI*x)/(double)N;
   		return new Komplex(Math.cos(a), Math.sin(a));
   }
   
   // entspricht dem Zuweisungsoperator =
   public Komplex setTo(Komplex x) 
   {
      reel = x.reel;
      imanigaer = x.imanigaer;
      return this;
   }
   
   // swap
   public static void swap(Komplex x, Komplex y) {
      double h ;
      h = x.reel;
      x.reel = y.reel;
      y.reel = h;
      h = x.imanigaer;
      x.imanigaer = y.imanigaer;
      y.imanigaer = h;
   }


	//toString Methode
	public String toString()
  	{
    		return "("+reel+"/"+imanigaer+")";
  	}
	
	public static void main(String argv[])
	{
		
		
	}
	
	/**
	 * Berechnet die Fast Fourier Transformation oder die
	 * inverse FFT
	 * @param z Vector, wo die Eingabedaten(komplexe Zahlen)
	 *  gespeichert sind
	 * @param boolean inverse zum Invertieren
	 * @return Vector mit den transformierten Zahlen
	 */
	public static Vector FFT(Vector z, boolean inverse) 
	{
     	return null;
  	}
}
	
