Uso de matrices en Java: Producto

/* Lectura y escritura de una matriz, producto de dos matrices, y extracción de una fila o de una columna de una matriz */

package productomatrices;
import java.util.Scanner;

/*
 * @author RLR
 */

public class ProductoMatrices
{

    public static void main(String[] args)
    {
        // TODO code application logic here
        Scanner sc=new Scanner(System.in);

        System.out.print("\nPRODUCTO DE 2 MATRICES ");
        System.out.print("\nDame FILAS y COLUMNAS de la primera matriz: ");
        int n=sc.nextInt();
        int m=sc.nextInt();
        float[][] A = leerMatriz(n,m);
        escribirMatriz(A);
        System.out.print("\nDame FILAS y COLUMNAS de la segunda matriz: ");
        int k=sc.nextInt();
        int p=sc.nextInt();
        float[][] B = leerMatriz(k,p);
        escribirMatriz(B);
        System.out.print("\nLa MATRIZ PRODUCTO \n");
        escribirMatriz(multiplicarMatrices(A,B));
        System.out.print("\nDi un numero de columna: ");
        int col=sc.nextInt();
        System.out.print("\nEsta columna en la Matriz primera es:\n ");
        float[][] x = new float[1][];
        x[0] = obtenerColumna(A,col);
        escribirMatriz(x);
        System.out.print("\nDi un numero de fila: ");
        int fila=sc.nextInt();
        System.out.print("\nEsta fila en la Matriz segunda es:\n ");
        float[][] y = new float[1][];
        y[0] = obtenerFila(B,fila);
        escribirMatriz(y);

        System.out.println("\n\nPulsa Tecla+Return para acabar.\n");
        String FIN=sc.next();
    }

    public static float[][] leerMatriz(int n, int m)
    {
        float[][] A = new float[n][m];
        Scanner sc=new Scanner(System.in);

        for(int i=0;i<n;i++)
        {
          System.out.print("Elementos de la fila " + (i+1) + ": " );
          for(int j=0;j<m;j++) A[i][j]=sc.nextFloat();
        }

        return A;
    }

    public static void escribirMatriz(float[][] M)
    {
        Scanner sc=new Scanner(System.in);

        if(M==null)
        {
            System.out.print("Matriz vacia!! \n");
            return;
        }
        int n = M.length;
        int m = M[0].length;

        System.out.print("Elementos de esta matriz: ");
        for(int i=0;i<n;i++)
        {
          System.out.print("\n");
          for(int j=0;j<m;j++)
              System.out.print(M[i][j] + " ");
        }
        System.out.print("\n");
    }

    public static float[][] multiplicarMatrices(float[][] A, float[][] B)
    {
        Scanner sc=new Scanner(System.in);

        int n = A.length;
        int m = A[0].length;
        int k = B.length;
        int p = B[0].length;

        if(m!=k) return null;

        float[][] C = new float[n][p];

        for(int i=0;i<n;i++)
          for(int j=0;j<p;j++)
              for(int r=0;r<k;r++)
                C[i][j] += A[i][r]*B[r][j];

        return C;
    }

    public static float[] obtenerColumna(float[][] M, int col)
    {
        int n = M.length;
        int m = M[0].length;

          if(m<col)
          {
            System.out.print("Numero de columna no valido!! \n");
            return null;
          }

          float[] x = new float[n];
          for(int i=0;i<n;i++)
              x[i] = M[i][col-1];

          return x;
    }

    public static float[] obtenerFila(float[][] M, int fila)
    {
        int n = M.length;
        int m = M[0].length;

          if(n<fila)
          {
            System.out.print("Numero de fila no valido!! \n");
            return null;
          }

          float[] x = new float[m];
          //System.arraycopy(M[fila-1],0,x,0,m);
          for(int i=0;i<m;i++)
             x[i] = M[fila-1][i];

          return x;
    }

}
Esta entrada fue publicada en Ciencia y programación. Guarda el enlace permanente.

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.