// Bosquejo de un programa para manipular ComplejoFraccionario
// Autor: Antonio Carrillo Ledesma
// http://mmc.geofisica.unam.mx/acl/


//~ public class ComplejoFraccionario {
public class ComplejoFraccionario extends Numero {
   // Parte real del complejo
   private Fraccion R;
   // Parte imaginaria del complejo
   private Fraccion I;


   // Constructores
   public ComplejoFraccionario() {
      R = new Fraccion();
      I = new Fraccion();
   }

   // Constructores
   public ComplejoFraccionario(long r, long i) {
      R = new Fraccion(r);
      I = new Fraccion(i);
   }


   // Constructores
   public ComplejoFraccionario(long r) {
      R = new Fraccion(r);
      I = new Fraccion();
   }

   public ComplejoFraccionario(long rn, long rd, long in, long id) {
      R = new Fraccion(rn, rd);
      I = new Fraccion(in, id);
   }


   // Constructores
   public ComplejoFraccionario(ComplejoFraccionario a) {
      R = a.parteReal();
      I = a.parteImaginaria();
   }

   // Genera un nuevo miembro de la clase
   public Numero nuevo() {
      Numero c = new ComplejoFraccionario();
      return c;
   }

   // Retorna la parte real del complejo
   public Fraccion parteReal() {
      return R;
   }

   // Retorna la parte imaginaria del complejo
   public Fraccion parteImaginaria() {
      return I;
   }

   // Regresa verdadero si el complejo es cero
   public boolean esCero() {
      if (parteReal().numerador() == 0.0 && parteImaginaria().numerador() == 0.0) return true;
      return false;
   }

   // Suma de dos operandos
   public void suma(Numero A, Numero B) {
      ComplejoFraccionario a = new ComplejoFraccionario( (ComplejoFraccionario) A);
      ComplejoFraccionario b = new ComplejoFraccionario( (ComplejoFraccionario) B);

      R.suma(a.parteReal(), b.parteReal());
      I.suma(a.parteImaginaria(), b.parteImaginaria());
   }

   // Suma con un operando
   public void suma(Numero A) {
      ComplejoFraccionario a = new ComplejoFraccionario( (ComplejoFraccionario) A);

      R.suma(parteReal(), a.parteReal());
      I.suma(parteImaginaria(), a.parteImaginaria());
   }


   // Visualiza el complejo
   public void visualiza() {
      R.visualiza();
      System.out.print("+");
      I.visualiza();
      System.out.print("i");
   }

   // Ejemplito de uso ...
   public static void main(String[] args) {
      ComplejoFraccionario a, b, c;
      a = new ComplejoFraccionario(2, 4, 7, 5);
      b = new ComplejoFraccionario(5, 2);
      c = new ComplejoFraccionario();


      c.suma(a, b);

      a.visualizaLN();
      b.visualizaLN();
      c.visualizaLN();
   }


};


