Obtener matriz transpuesta en Java

Cómo trasponer una matriz en Java

Programa Java para obtener la matriz transpuesta de una matriz. 

Dada una matriz A su transpuesta AT se obtiene intercambiando las filas por columnas y las columnas por filas. 

Por ejemplo, si tenemos la matriz A de 2 filas y 4 columnas:

  1  2  3  4
  5  6  7  8

Su matriz transpuesta AT es una matriz de 4 filas y 2 columnas con este contenido: 

  1  5
  2  6
  3  7
  4  8

La primera fila de A se convierte en la primera columna de la matriz transpuesta y la segunda fila de A se convierte en la segunda columna de la matriz transpuesta.

Si la dimensión de la matriz A es 2 x 3 (2 filas y 3 columnas) la dimensión de su matriz transpuesta será 3 x 2 (3 filas y 2 columnas).

En general si la matriz A se ha creado de tamaño A[filas][columnas] su matriz transpuesta se debe crear de tamaño AT[columnas]filas]

Solución:

Para obtener la matriz transpuesta de una matriz escribiremos un método que vamos a llamar matrizTranspuesta que reciba una matriz de enteros y devuelva su transpuesta.

El método para transponer una matriz lo podemos escribir así:

public static int[][] matrizTranspuesta(int[][] a) {
        //creamos la matriz transpuesta
        //el número de filas será igual al número de columnas de la matriz original
        //el número de columnnas será igual al número de filas de la matriz original                              
        int[][] t = new int[a[0].length][a.length];
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                t[j][i] = a[i][j];
            }
        }
        return t;
}

Programa completo para obtener una matriz transpuesta usando este método:

import java.util.Scanner;

public class ObtenerMatrizTranspuesta {

    public static void main(String[] args) {
         //crear matriz original de 2 filas y 3 columnas
        int[][] M = new int[2][3];  

        //lectura de datos por teclado
        leerDatos(M);

        //mostrar matriz original
        System.out.println("Matriz original");
        mostrarMatriz(M);

        //calcular la matriz transpuesta
        int [][] T = matrizTranspuesta(M);

        //mostrar matriz transpuesta
        System.out.println("Matriz transpuesta");
        mostrarMatriz(T);

    }

    //método para introducir datos a la matriz desde teclado
    public static void leerDatos(int[][] M) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Lectura de datos de la matriz:");
        for (int i = 0; i < M.length; i++) {
            for (int j = 0; j < M[i].length; j++) {
                System.out.print("Elemento[" + i + "][" + j + "]=");
                M[i][j] = sc.nextInt();
            }
        }
    }

    //método para obtener la transpuesta de una matriz
    public static int[][] matrizTranspuesta(int[][] a) {
        //creamos la matriz transpuesta
        //el número de filas será igual al número de columnas de la matriz original
        //el número de columnnas será igual al número de filas de la matriz original                              
        int[][] t = new int[a[0].length][a.length];
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                t[j][i] = a[i][j];
            }
        }
        return t;
    }

    //método para mostrar una matriz por pantalla
    public static void mostrarMatriz(int[][] A) {
        for (int i = 0; i < A.length; i++) {
            for (int j = 0; j < A[i].length; j++) {
                System.out.printf("%5d", A[i][j]);
            }
            System.out.println();
        }
    }
}

No hay comentarios:

Publicar un comentario