Matriz 4: Matriz triangular inferior y superior

Continuando con las operaciones de matrices en esta ocasión veremos otras operaciones un poco más complejas, verificaremos si una matriz es triangular inferior o triangular superior.

Matriz triangular inferior

 

En una matriz triangular inferior los elementos situados por encima de la diagonal principal son 0, la matriz siempre deberá ser cuadrada, Ejemplo:

Matriz Triangular Inferior

 

Primeramente pediremos las dimensiones de la matriz y evaluaremos que sea una matriz cuadrada.

int filas=Integer.parseInt(JOptionPane.showInputDialog("Digita las filas de la matriz"));
int columnas=Integer.parseInt(JOptionPane.showInputDialog("Digita las columnas de la matriz"));
int matriz[][]=new int[filas][columnas];
if(matriz.length==matriz[0].length){
        JOptionPane.showMessageDialog(null, "Es cuadrada");
}else{
        JOptionPane.showMessageDialog(null, "No es cuadrada");
}

Nota: Es correcto también comparar las variables filas y columnas.

 

 

Procedemos a pedir los datos que se guardaran en la matriz.

for(int i=0;i<filas;i++){
    for(int j=0;j<columnas;j++){
        matriz[i][j]=Integer.parseInt(JOptionPane.showInputDialog("Digita un número para la posición: a["+i+"]["+j+"]"+" de la matriz"));
        System.out.print(matriz[i][j]+" ");
    }
    System.out.println();
}

 

Una vez identificada si es una matriz cuadrada y ya que hay datos guardados en la matriz procedemos a comparar los valores de la matriz.

int sum=0;
for(int j=1;j<columnas;j++){
        for(int i=0;i<filas;i++){
                if(i<j){
                        sum+=matriz[i][j];
                }
        }
}

Como se puede observar en este algoritmo se invierten los ciclos for, es decir, la condición del primer ciclo for en lugar de comparar con los reglones se compara con las columnas, y el segundo ciclo en lugar de comparar con las columnas se comparar con los renglones. Además de inicializar a j con 1, se hace esto ya que siempre se debe realizar la suma del primer renglón excepto el primer elemento de la matriz.

 

 

El ciclo for comienza en i=0, j=1, la celda de la matriz es la siguiente:

Matriz Triangular Inferior 1

Si i < j entonces se suma el elemento, en este caso suma 0.

 

 

Posteriormente se incrementa i, dando como resultado la siguiente posición.

Matriz triangular inferior 2

 

En esta ocasión compara que i<j La condición ya no se cumple ya que ambas variables valen 1 y no se suma nada, se vuelve a incrementar i dando como resultado la siguiente posición.

Matriz triangular inferior 3

 

Se vuelve a comparar que i<j, de nuevo es falso y no se suma nada, a este punto termina la primera iteración del segundo ciclo for e incrementa a j en 1, tomando j el valor de 2 y reiniciando el ciclo de i a 0, dando la siguiente posición.

Matriz triangular inferior 5

 

En este caso se cumple la condición de i<j y se suma el valor 0, dando la suma de 0, se incrementa i en 1.

Matriz triangular inferior 6

 

Se vuelve a comparar i<j, se vuelve a cumplir la condición y se realiza la suma siguiendo la suma en 0, se vuelve a incrementar i tomando un valor de 2.

Matriz triangular inferior 7

Ésta es la última iteración y se pregunta si i<j, la condición retorna falso puesto que i y j tienen un valor de 2, así que no se suma nada.

 

 

Como se pudo observar esta forma de inicializar y usar los ciclos solo nos recorre la mitad de la matriz así ahorrándonos procesos innecesarios para este tipo de operaciones, al final solo comparamos si el valor de la suma es 0 para saber si es una matriz triangular inferior.

if(sum==0){
        JOptionPane.showMessageDialog(null,"Es una matriz triagular inferior");
}else{
        JOptionPane.showMessageDialog(null,"No es una matriz triagular inferior");
}

Código completo utilizado - Matriz triangular inferior

package pqtMatricesTres;

import javax.swing.JOptionPane;

public class MatrizTriangularInferior {

        public static void main(String[] args) {
                int filas=Integer.parseInt(JOptionPane.showInputDialog("Digita las filas de la matriz"));
                int columnas=Integer.parseInt(JOptionPane.showInputDialog("Digita las columnas de la matriz"));
                int matriz[][]=new int[filas][columnas];
                if(matriz.length==matriz[0].length){
                        for(int i=0;i<filas;i++){
                        for(int j=0;j<columnas;j++){
                                matriz[i][j]=Integer.parseInt(JOptionPane.showInputDialog("Digita un número para la posición: a["+i+"]["+j+"]"+" de la matriz"));
                                System.out.print(matriz[i][j]+" ");
                        }
                        System.out.println();
                }
                        int sum=0;
                        for(int j=1;j<columnas;j++){
                                for(int i=0;i<filas;i++){
                                        if(i<j){
                                                sum+=matriz[i][j];
                                        }
                                }
                        }
                
                        if(sum==0){
                                JOptionPane.showMessageDialog(null,"Es una matriz triagular inferior");
                        }
                        else{
                                JOptionPane.showMessageDialog(null,"No es una matriz triagular inferior");
                        }
                        
                }else{
                        JOptionPane.showMessageDialog(null, "No es cuadrada");
                }
        }

}

Matriz Triangular Superior

 

En una matriz triangular superior los elementos situados por debajo de la diagonal principal son 0, la matriz siempre deberá ser cuadrada, Ejemplo:

Matriz triangular superior

 

 

El proceso es muy similar a el de la matriz triangular inferior solo cambia la condición de los ciclos y la suma de los elementos son los que están por debajo de la matriz, la forma en que funciona es la misma que la matriz triangular inferior.

int sum=0;
for(int i=1;i<filas;i++){
        for(int j=0;j<columnas;j++){
                if(j<i){
                        sum+=matriz[i][j];      
                }
        }
}

Código completo utilizado - Matriz triangular superior

package pqtMatricesTres;

import javax.swing.JOptionPane;

public class MatrizTriangularSuperior {

        public static void main(String[] args) {
                int filas=Integer.parseInt(JOptionPane.showInputDialog("Digita las filas de la matriz"));
                int columnas=Integer.parseInt(JOptionPane.showInputDialog("Digita las columnas de la matriz"));
                int matriz[][]=new int[filas][columnas];
                if(matriz.length==matriz[0].length){
                        for(int i=0;i<filas;i++){
                        for(int j=0;j<columnas;j++){
                                matriz[i][j]=Integer.parseInt(JOptionPane.showInputDialog("Digita un número para la posición: a["+i+"]["+j+"]"+" de la matriz"));
                                System.out.print(matriz[i][j]+" ");
                        }
                        System.out.println();
                }
                        int sum=0;
                        for(int i=1;i<filas;i++){
                            for(int j=0;j<columnas;j++){
                                if(j<i){
                                        sum+=matriz[i][j];      
                                }
                            }
                        }
                
                        if(sum==0){
                                JOptionPane.showMessageDialog(null,"Es una matriz triagular superior");
                        }
                        else{
                                JOptionPane.showMessageDialog(null,"No es una matriz triagular superior");
                        }
                        
                }else{
                        JOptionPane.showMessageDialog(null, "No es cuadrada");
                }

        }

}