package narzedzia ;

/*************************************************************
 * Klasa <b>LZesp</b> reprezentuje liczbę zespoloną.
 * Obiekty tej klasy są niemodyfikowalne.
 * @author Paweł Rzechonek
 * @version 1.3
 *************************************************************/
public class LZesp
{
    /** Część rzeczywista liczby zespolonej. */
    public final double re ;
    /** Część urojona liczby zespolonej. */
    public final double im ;

    /**
    Konstruktor dla części rzeczywistej i urojonej.
    @param re Wartość rzeczywista liczby zespolonej.
    @param im Wartość urojona liczby zespolonej.
    */
    public LZesp (double re, double im)
    {
        this.re = re ;
        this.im = im ;
    }
    /**
    Konstruktor dla części rzeczywistej (część urojona jest równa 0).
    @param re Wartość rzeczywista liczby zespolonej.
    */
    public LZesp (double re)
    {
        this(re,0) ;
    }

    /**
    Statyczne pole <b>zero</b> to liczba zespolona reprezentująca zero
    (element neutralny dodawania).
    */
    public static LZesp zero = new LZesp(0) ;
    /**
    Statyczne pole <b>jeden</b> to liczba zespolona reprezentująca jedynkę
    (element neutralny mnożenia).
    */
    public static LZesp jeden = new LZesp(1) ;

    /**
    Statyczna metoda dodająca liczby zespolone.
    @param x Składnik w dodawaniu liczb zespolonych.
    @param y Składnik w dodawaniu liczb zespolonych.
    @return Funkcja zwraca sumę dwóch liczb zespolonych.
    */
    public static LZesp suma (LZesp x, LZesp y)
    {
        return new LZesp(x.re+y.re,x.im+y.im) ;
    }
    /**
    Statyczna metoda mnożąca liczby zespolone.
    @param x Czynnik w mnożeniu liczb zespolonych.
    @param y Czynnik w mnożeniu liczb zespolonych.
    @return Funkcja zwraca iloczyn dwóch liczb zespolonych.
    */
    public static LZesp iloczyn (LZesp x, LZesp y)
    {
        return new LZesp(x.re*y.re-x.im*y.im,x.re*y.im+x.im*y.re) ;
    }

    /**
    Metoda przedstawia liczbę zespolona w postaci łańcucha znaków.
    @return Funkcja zwraca łańcuch znaków reprezentujących liczbę zespoloną
      w postaci czytelnej dla człowieka.
    */
    public String toString ()
    {
        return "("+re+','+im+")" ;
    }
}
