domingo, 13 de mayo de 2012

Suma, multiplicación y traspuesta de una matriz en JAVA


Calculos con matrices en Java.


public class Matriz {
 
    //almacena los datos de la matriz usada en los calculos
    int [][] maDatos;

    public Matriz(int f, int c){

        //if anidados que verifican si la matriz es cuadrada para evitar matrices
        //rectangulares.
     
        //si las filas son igual a la columna
        if (f  ==  c){
            maDatos = new int [f][c];
        }
        //si las filas son menores que las columnas usar las columnas
        else if(f < c){
            maDatos = new int [c][c];
        }
        //si las filas son mayores que las columnas usar las filas
        else {
            maDatos = new int [f][f];
        }
    }

    //permite insertar un arreglo al instanciar el objeto
    public Matriz (int [][] d){
        maDatos  = d;
    }

    //metodo que suma dos matrices
    public Matriz sumar(Matriz m){
        int laRes[][] = new int [maDatos.length][maDatos[0].length];
        //instrucciones for que permiten sumar una matriz elemento
        //por elemento
        for(int i = 0; i < maDatos.length; i++){
            for (int j = 0; j < maDatos[0].length; j++){
                laRes [i][j] = maDatos[i][j] + m.maDatos[i][j];
            }
        }

        return new Matriz (laRes);
    }

    //metodo que genera la traspuesta de una matriz
    public Matriz traspuesta(){
        int laRes[][] = new int [maDatos[0].length][maDatos.length];
        for(int i = 0; i < maDatos.length; i++){
            for (int j = 0; j < maDatos[0].length; j++){
                laRes [j][i] = maDatos[i][j];
            }
        }

        return new Matriz (laRes);
    }

    //metodo que multiplica dos matrices
    public Matriz multiplicar(Matriz m){
        int laRes[][] = new int [maDatos.length][maDatos[0].length];

        //se necesitan tres instrucciones for para multiplicar cada
        //fila de la una matriz por las columnas de la otra
        for(int i = 0; i < maDatos.length; i++){
            for (int j = 0; j < maDatos[0].length; j++){
                for (int k = 0; k < maDatos[0].length; k++){
                    laRes [i][j] += maDatos[i][k] * m.maDatos[k][j];
                }
            }
        }

        return new Matriz (laRes);
    }

   //permite visualizar la matriz
    public void mostrar(){
        for(int i = 0; i < maDatos.length; i++){
            for (int j = 0; j < maDatos[0].length; j++){
                System.out.print("|" + maDatos[i][j]);
            }
            System.out.print("|\n");
        }
        System.out.print("\n");
    }
}

10 comentarios:

  1. hola, quisiera saber como puedo sumar la matriz si la matriz esta en un archivo .txt gracias muy buen codigo

    ResponderEliminar
  2. Puedes intentar con el siguiente código:

    File archivoEntrada = new File("datos.txt");
    miarchivo = new FileInputStream(archivoEntrada);
    byte arr1[] = new byte[(int)archivoEntrada.length()];
    miarchivo.read(arr1);
    cadena = new String(arr1);
    System.out.println(cadena);
    StringTokenizer st = new StringTokenizer(cadena,";");
    while(st.hasMoreTokens()){
    st.nextToken();
    }
    Debes tener en cuenta como tienes los datos en el .txt para que obtengas los datos, en este caso los datos del archivo se encuentran separados por coma, lo cual en la linea st.nextToken() se van a ir obteniendo cada registro.

    En esta liena File archivoEntrada = new File("datos.txt") debes colocar con la ruta donde se encuentra el archivo.

    ResponderEliminar
  3. hola ,quisiera saber como puedo hacer para sumar,resta una matriz

    ResponderEliminar
    Respuestas
    1. la suma ya está, y la resta revisa la función de la suma y cambiar el signo, public Matriz sumar(Matriz m) {....

      Eliminar
  4. hola wilmer estoy sumando y restando una matriz bajo tus parametros pero al dar le run no me genera nada me puedes decir el por que
    public class Matriz {

    public static void main(String[] args) {
    }

    private Object[] maDatos;
    // TODO Auto-generated method stub

    //almacena los datos de la matriz usada en los calculos
    public Matriz(int f, int c){

    //if anidados que verifican si la matriz es cuadrada para evitar matrices
    //rectangulares.

    int[][] maDatos;
    //si las filas son igual a la columna
    if (f == c){
    maDatos = new int [3][3];
    }
    //si las filas son menores que las columnas usar las columnas
    else if(f < c){
    maDatos = new int [3][3];
    }
    //si las filas son mayores que las columnas usar las filas
    else {
    maDatos = new int [3][3];
    }
    }

    //permite insertar un arreglo al instanciar el objeto
    public Matriz (int [][] d){
    int maDatos = 3;
    }

    //metodo que suma dos matrices
    public Matriz sumar(Matriz m){
    Object maDatos;
    int laRes[][] = new int [maDatos.length][maDatos[0].length];
    //instrucciones for que permiten sumar una matriz elemento
    //por elemento
    for(int i = 0; i < maDatos.length; i++){
    for (int j = 0; j < maDatos[].length; j++){
    laRes [i][j] = maDatos[i][j] + m.maDatos[i][j];
    }
    }

    return new Matriz (laRes);
    }
    public Matriz resta(Matriz m){
    Object maDatos;
    int laRes[][] = new int [maDatos.length][maDatos[0].length];
    //instrucciones for que permiten sumar una matriz elemento
    //por elemento
    for(int i = 0; i < maDatos.length; i++){
    for (int j = 0; j < maDatos[].length; j++){
    laRes [i][j] = maDatos[i][j] - m.maDatos[i][j];
    }
    }

    ResponderEliminar
  5. Hola muy bueno :), Pero quisiera saber como hacer para que el usuario ingrese cierta cantidad x de columnas por cierta cantidad de x por filas por cada matriz, Me gustaría saber como :/. Gracias

    ResponderEliminar
    Respuestas
    1. haz un metodo q la capture y luego la seteas.

      Eliminar
  6. //metodo en java para multiplicar dos matrices
    public static void Multiplicacion(int[][] m1,int [][] m2){


    if (m1[0].length!=m2.length)
    {JOptionPane.showMessageDialog(null,"no se pude multiplicar la matriz");}

    else{

    int m3[][]=new int [m1.length][m1.length];
    for(int i=0;i<m1.length;i++){
    for(int j=0;j<m1.length;j++){
    int sum=0;
    for (int k=0;k<m1[0].length;k++){
    sum=m1[i][k]*m2[k][j];

    }
    m3 [i] [j] =sum;
    }
    Mostrar(m3);
    }
    }
    }

    ResponderEliminar