En esta ocasión tendremos las siguientes operaciones de matrices:
La forma de trabajar será de la siguiente manera:
Crearemos un menú básico con JOptionPane como lo hicimos en Ciclo Do - While 1: Menú.
int op=0;
String menu="";
do{
menu="";
menu+="******** Menú ********\n";
menu+="1.- Matriz cuadrada \n";
menu+="2.- Matriz Nula \n";
menu+="3.- Matriz Diagonal \n";
menu+="4.- Matriz Escalar \n";
menu+="5.- Salir \n";
menu+="Elija una opción";
op=Integer.parseInt(JOptionPane.showInputDialog(menu));
switch(op){
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
}
}while(op!=5);
Una matriz cuadrada es aquella que tiene el mismo número de filas que de columnas, ejemplo:
Recordar que para saber el número de fila o columnas de una matriz se puede hacer con la variable pública length de cualquier arreglo.
case 1:
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, "Si es cuadrada");
else
JOptionPane.showMessageDialog(null, "No es cuadrada");
break;
Una matriz nula (también llamada matriz cero) es aquella que tienen todos sus elementos iguales a 0, ejemplo:
La forma en que se programara es de la siguiente manera:
* Crear una variable que sume todos los datos dentro de la matriz.
* Si la suma de todos los datos es igual a 0, entonces es matriz nula.
case 2:
filas=Integer.parseInt(JOptionPane.showInputDialog("Digita las filas de la matriz"));
columnas=Integer.parseInt(JOptionPane.showInputDialog("Digita las columnas de la matriz"));
matriz=new int[filas][columnas];
//Pedimos los datos
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 A"));
System.out.print(matriz[i][j]+" ");
}
System.out.println();
}
int sum=0; //variable que sumara todos los elementos
for(int i=0;i<matriz.length;i++){ //Tamaño de filas
for(int j=0;j<matriz[0].length;j++){ //Tamaño de columnas
sum+=matriz[i][j];
}
}
if(sum==0){
JOptionPane.showMessageDialog(null, "La matriz es nula");
}else{
JOptionPane.showMessageDialog(null, "La suma de los elementos es de: "+sum+", por lo tanto no es nula");
}
break;
Nota: Se modificó la declaración de variables de filas, columnas y matriz de la matriz cuadrada y pasaron a ser declaradas al inicio del programa para crearlas solo una vez y reutilizar las variables para las demás operaciones; al hacer esto ahorramos memoria.
Una matriz diagonal es una matriz cuadrada cuyos valores por encima y debajo de la diagonal principal son 0, la diagonal principal puede contener cualquier valor, ejemplo:
case 3:
filas=Integer.parseInt(JOptionPane.showInputDialog("Digita las filas de la matriz"));
columnas=Integer.parseInt(JOptionPane.showInputDialog("Digita las columnas de la matriz"));
matriz=new int[filas][columnas];
if(matriz.length==matriz[0].length){
//Pedimos los datos
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 A"));
System.out.print(matriz[i][j]+" ");
}
System.out.println();
}
//comienza proceso de suma para verificar si la matriz es diagonal
int sumDiag=0;
for(int i=0;i<matriz.length;i++){
for(int j=0;j<matriz[0].length;j++){
if(!(i==j)){ //Saltamos las posiciones de la diagonal, estas posiciones no necesitan ser sumadas
sumDiag+=matriz[i][j];
}
}
}
if(sumDiag==0){
JOptionPane.showMessageDialog(null, "Es diagonal!!!");
}else{
JOptionPane.showMessageDialog(null, "La matriz no es diagonal ya que hay valores diferentes de 0 por encima o debajo de la matriz");
}
}else{
JOptionPane.showMessageDialog(null, "No es cuadrada por lo tanto no puede haber diagonal");
}
break;
Una matriz escalar es una matriz diagonal (y a su vez cuadrada) en la que los elementos de la diagonal principal son iguales, ejemplo:
case 4:
filas=Integer.parseInt(JOptionPane.showInputDialog("Digita las filas de la matriz"));
columnas=Integer.parseInt(JOptionPane.showInputDialog("Digita las columnas de la matriz"));
matriz=new int[filas][columnas];
if(matriz.length==matriz[0].length){
//Pedimos los datos
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 A"));
System.out.print(matriz[i][j]+" ");
}
System.out.println();
}
//Verificamos si la matriz es escalar
int sumElem=0,sumDiag=0,aux=0;
/*sumElem=suma de los elementos que no son la diagonal principal
* sumDiag=suma de la diagonal principal
* aux=variable que almacena el valor que debe tener toda la diagonal
*/
for(int i=0;i<matriz.length;i++){
for(int j=0;j<matriz[0].length;j++){
//El primer elemento de la matriz es el primer elementos de la diagonal,por lo tanto debe ser igual en toda la diagonal
if((i==0)&&(j==0)){
aux=matriz[i][j];
}
if(!(i==j)){
sumElem+=matriz[i][j];
}else if(matriz[i][j]==aux){
sumDiag+=aux;
}
}
}//Fin de ciclos
if(sumElem==0){
if(sumDiag/matriz.length==aux){
JOptionPane.showMessageDialog(null, "Es matriz escalar");
}else{
JOptionPane.showMessageDialog(null, "No es matriz escalar, los elementos de la diagonal no son iguales");
}
}else{
JOptionPane.showMessageDialog(null, "La matriz no es escalar ya que hay valores diferentes de 0 por encima o debajo de la matriz");
}
}else{
JOptionPane.showMessageDialog(null, "No es cuadrada por lo tanto no puede haber matriz escalar");
}
break;
package pqtMatricesDos;
import javax.swing.JOptionPane;
public class OperacionesMatriz {
public static void main(String[] args) {
int op=0;
String menu="";
int filas;
int columnas;
int matriz[][];
do{
menu="";
menu+="******** Menú ********\n";
menu+="1.- Matriz cuadrada \n";
menu+="2.- Matriz Nula \n";
menu+="3.- Matriz Diagonal \n";
menu+="4.- Matriz Escalar \n";
menu+="5.- Salir \n";
menu+="Elija una opción";
op=Integer.parseInt(JOptionPane.showInputDialog(menu));
switch(op){
case 1:
filas=Integer.parseInt(JOptionPane.showInputDialog("Digita las filas de la matriz"));
columnas=Integer.parseInt(JOptionPane.showInputDialog("Digita las columnas de la matriz"));
matriz=new int[filas][columnas];
if(matriz.length==matriz[0].length)
JOptionPane.showMessageDialog(null, "Si es cuadrada");
else
JOptionPane.showMessageDialog(null, "No es cuadrada");
break;
case 2:
filas=Integer.parseInt(JOptionPane.showInputDialog("Digita las filas de la matriz"));
columnas=Integer.parseInt(JOptionPane.showInputDialog("Digita las columnas de la matriz"));
matriz=new int[filas][columnas];
//Pedimos los datos
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 A"));
System.out.print(matriz[i][j]+" ");
}
System.out.println();
}
int sum=0; //variable que sumara todos los elementos
for(int i=0;i<matriz.length;i++){ //Tamaño de filas
for(int j=0;j<matriz[0].length;j++){ //Tamaño de columnas
sum+=matriz[i][j];
}
}
if(sum==0){
JOptionPane.showMessageDialog(null, "La matriz es nula");
}else{
JOptionPane.showMessageDialog(null, "La suma de los elementos es de: "+sum+", por lo tanto no es nula");
}
break;
case 3:
filas=Integer.parseInt(JOptionPane.showInputDialog("Digita las filas de la matriz"));
columnas=Integer.parseInt(JOptionPane.showInputDialog("Digita las columnas de la matriz"));
matriz=new int[filas][columnas];
if(matriz.length==matriz[0].length){
//Pedimos los datos
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 A"));
System.out.print(matriz[i][j]+" ");
}
System.out.println();
}
//comienza proceso de suma para verificar si la matriz es diagonal
int sumDiag=0;
for(int i=0;i<matriz.length;i++){
for(int j=0;j<matriz[0].length;j++){
if(!(i==j)){ //Saltamos las posiciones de la diagonal, estas posiciones no necesitan ser sumadas
sumDiag+=matriz[i][j];
}
}
}
if(sumDiag==0){
JOptionPane.showMessageDialog(null, "Es diagonal!!!");
}else{
JOptionPane.showMessageDialog(null, "La matriz no es diagonal ya que hay valores diferentes de 0 por encima o debajo de la matriz");
}
}else{
JOptionPane.showMessageDialog(null, "No es cuadrada por lo tanto no puede haber diagonal");
}
break;
case 4:
filas=Integer.parseInt(JOptionPane.showInputDialog("Digita las filas de la matriz"));
columnas=Integer.parseInt(JOptionPane.showInputDialog("Digita las columnas de la matriz"));
matriz=new int[filas][columnas];
if(matriz.length==matriz[0].length){
//Pedimos los datos
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 A"));
System.out.print(matriz[i][j]+" ");
}
System.out.println();
}
//Verificamos si la matriz es escalar
int sumElem=0,sumDiag=0,aux=0;
/*sumElem=suma de los elementos que no son la diagonal principal
* sumDiag=suma de la diagonal principal
* aux=variable que almacena el valor que debe tener toda la diagonal
*/
for(int i=0;i<matriz.length;i++){
for(int j=0;j<matriz[0].length;j++){
//El primer elemento de la matriz es el primer elementos de la diagonal,por lo tanto debe ser igual en toda la diagonal
if((i==0)&&(j==0)){
aux=matriz[i][j];
}
if(!(i==j)){
sumElem+=matriz[i][j];
}else if(matriz[i][j]==aux){
sumDiag+=aux;
}
}
}//Fin de ciclos
if(sumElem==0){
if(sumDiag/matriz.length==aux){
JOptionPane.showMessageDialog(null, "Es matriz escalar");
}else{
JOptionPane.showMessageDialog(null, "No es matriz escalar, los elementos de la diagonal no son iguales");
}
}else{
JOptionPane.showMessageDialog(null, "La matriz no es escalar ya que hay valores diferentes de 0 por encima o debajo de la matriz");
}
}else{
JOptionPane.showMessageDialog(null, "No es cuadrada por lo tanto no puede haber matriz escalar");
}
break;
}
}while(op!=5);
}
}