// Clase para manipular Matrices
// Antonio Carrillo Ledesma


public class Matriz {

   // Coeficientes de la Matriz
   private double [][] M;

   // Numero de Renglones
   private int ren;
   // Numero de Columnas
   private int col;

   // Constructor de la clase
   public Matriz() {
      col = 0;
      ren = 0;
   }


   // Asigna coeficientes
   public Matriz(double [][]coef) {
      int i, j;
      ren = coef.length;
      col = coef[0].length;
      M = new double[ren][col];
      for (i = 0; i < ren; i++) {
         for (j = 0; j < col; j++) {
            M[i][j]  = coef[i][j];
         }
      }
   }


   // Retorna los coeficientes
   public double coeficiente(int i, int j) {
      if (i < 0 || i >= ren || j < 0 || j >= col)  System.out.print("Error");
      return M[i][j];
   }


   // Retorna el numero de renglones
   public int renglones() {
      return ren;
   }

   // Retorna el numero de columnas
   public int columnas() {
      return col;
   }


   // Visualiza la Matriz
   public void visualiza() {
      int i, j;
      for (i = 0; i < ren; i++) {
         for (j = 0; j < col; j++) {
            System.out.print(M[i][j]);
            System.out.print(" ");
         }
         System.out.println("");
      }
   }

   // Visualiza la Matriz
   public void visualizaLN() {
      visualiza();
      System.out.println("");
   }


   // Suma con dos operandos
   public void suma(Matriz a, Matriz b) {
      int i, j;
      ren = 0;
      col = 0;

      // Revisa el tamano de las Matrices a sumar
      if(a.renglones() != b.renglones() || a.columnas() != b.columnas()) {
         System.out.println("Error, las dimensiones no son iguales");
      } else {
         // Solicita memoria para los coeficientes
         ren = a.renglones();
         col = a.columnas();
         M = new double[ren][col];

         for (i = 0; i < ren; i++) {
            for (j = 0; j < col; j++) {
               M[i][j] = a.coeficiente(i, j) + b.coeficiente(i, j);
            }
         }
      }
   }


   // Suma con un operando
   public void suma(Matriz a) {
      int i, j;

      // Revisa el tamano de las Matrices a sumar
      if(renglones() != a.renglones() || columnas() != a.columnas()) {
         System.out.println("Error, las dimensiones no son iguales");
      } else {
         // Solicita memoria para los coeficientes

         for (i = 0; i < ren; i++) {
            for (j = 0; j < col; j++) {
               M[i][j] += a.coeficiente(i, j);
            }
         }
      }
   }


   // Funcion Principal ....
   public static void main(String[] args) {

      double a[][] = {{3.0, 1.5}, {3.2, 3.7}};
      double b[][] = {{1.0, 1.0}, {2.0, -7.4}};
      double c[][] = {{1.0, 3.0, 4.5}, {5.6, 4.3, 5.3}};

      Matriz A = new Matriz(a);
      Matriz B = new Matriz(b);
      Matriz C = new Matriz(c);
      Matriz D = new Matriz();
      System.out.println("Suma:");
      A.visualizaLN();
      C.visualizaLN();
      D.suma(A, C);


      A.visualizaLN();
      B.visualizaLN();
      D.suma(A, B);
      D.visualizaLN();

   }
}


