viernes, 13 de mayo de 2022

23 - Matrices (cantidad de filas y columnas)


 

Como hemos visto para definir y crear la matriz utilizamos la siguiente sintaxis:

int[][] mat;

Creación:

mat=new int[3][4];

Como las matrices son objetos en Java disponemos por un lado del atributo length que almacena la cantidad de filas de la matriz:

System.out.println("Cantidad de filas de la matriz:" + mat.length);

También podemos preguntarle a cada fila de la matriz la cantidad de elementos que almacena:

System.out.println("Cantidad de elementos de la primer fila:" + mat[0].length);

Problema 1:

Crear una matriz de n * m filas (cargar n y m por teclado) Imprimir la matriz completa y la última fila.

Programa:

Ver video
import java.util.Scanner;
public class Matriz5 {
private Scanner teclado;
private int[][] mat;

public void cargar() {
teclado=new Scanner(System.in);
System.out.print("Cuantas fila tiene la matriz:");
int filas=teclado.nextInt();
System.out.print("Cuantas columnas tiene la matriz:");
int columnas=teclado.nextInt();
mat=new int[filas][columnas];
for(int f=0;f<mat.length;f++) {
for(int c=0;c<mat[f].length;c++) {
System.out.print("Ingrese componente:");
mat[f][c]=teclado.nextInt();
}
}
}

public void imprimir() {
for(int f=0;f<mat.length;f++) {
for(int c=0;c<mat[f].length;c++) {
System.out.print(mat[f][c]+" ");
}
System.out.println();
}
}

public void imprimirUltimaFila() {
System.out.println("Ultima fila");
for(int c=0;c<mat[mat.length-1].length;c++) {
System.out.print(mat[mat.length-1][c]+" ");
}
}

public static void main(String[] ar) {
Matriz5 ma=new Matriz5();
ma.cargar();
ma.imprimir();
ma.imprimirUltimaFila();
}
}

En este ejemplo cada vez que se ejecute el programa el tamaño de la matriz lo define el usuario, para ello ingresamos por teclado dos enteros y seguidamente procedemos a crear la matriz con dichos valores:

        System.out.print("Cuantas fila tiene la matriz:");
int filas=teclado.nextInt();
System.out.print("Cuantas columnas tiene la matriz:");
int columnas=teclado.nextInt();
mat=new int[filas][columnas];

Ahora las estructuras repetitivas las acotamos preguntando a la misma matriz la cantidad de filas y la cantidad de elementos de cada fila(mat.length almacena la cantidad de filas de la matriz y mat[f].length cuando f vale cero accedemos a la cantidad de elementos de la fila cero y así sucesivamente para cada valor de f):

        for(int f=0;f<mat.length;f++) {
for(int c=0;c<mat[f].length;c++) {
System.out.print("Ingrese componente:");
mat[f][c]=teclado.nextInt();
}
}

El algoritmo de impresión es idéntico al visto anteriormente con la modificación de las condiciones de los for:

    public void imprimir() {
for(int f=0;f<mat.length;f++) {
for(int c=0;c<mat[f].length;c++) {
System.out.print(mat[f][c]+" ");
}
System.out.println();
}
}

Para imprimir la última fila debemos disponer un valor fijo en el subíndice de la fila (en este caso no podemos disponer un número fijo sino preguntarle a la misma matriz la cantidad de filas y restarle uno ya que las filas comienzan a numerarse a partir de cero: mat[mat.length-1][c])

También la condición del for debemos acceder al atributo length de la última fila mat[mat.length-1].length

        for(int c=0;c<mat[mat.length-1].length;c++) {
System.out.print(mat[mat.length-1][c]+" ");
}

Problema 2:

Crear una matriz de n * m filas (cargar n y m por teclado) Imprimir el mayor elemento y la fila y columna donde se almacena.

Programa:

Ver video
import java.util.Scanner;
public class Matriz6 {
private Scanner teclado;
private int[][] mat;

public void cargar() {
teclado=new Scanner(System.in);
System.out.print("Cuantas fila tiene la matriz:");
int filas=teclado.nextInt();
System.out.print("Cuantas columnas tiene la matriz:");
int columnas=teclado.nextInt();
mat=new int[filas][columnas];
for(int f=0;f<mat.length;f++) {
for(int c=0;c<mat[f].length;c++) {
System.out.print("Ingrese componente:");
mat[f][c]=teclado.nextInt();
}
}
}

public void imprimirMayor() {
int mayor=mat[0][0];
int filamay=0;
int columnamay=0;
for(int f=0;f<mat.length;f++) {
for(int c=0;c<mat[f].length;c++) {
if (mat[f][c]>mayor) {
mayor=mat[f][c];
filamay=f;
columnamay=c;
}
}
}
System.out.println("El elemento mayor es:"+mayor);
System.out.println("Se encuentra en la fila:"+filamay+ " y en la columna: "+columnamay);
}

public static void main(String[] ar) {
Matriz6 ma=new Matriz6();
ma.cargar();
ma.imprimirMayor();
}
}

Para obtener el mayor elemento de la matriz y la fila y columna donde se ubica debemos inicializar una variable mayor con el elemento de la fila cero y columna cero (esto lo hacemos suponiendo que en dicha posición se almacena el mayor):

    	int mayor=mat[0][0];
int filamay=0;
int columnamay=0;

Luego mediante dos for recorremos todos los elementos de la matriz y cada vez que encontramos un elemento mayor al actual procedemos a actualizar la variable mayor y la posición donde se almacena:

        for(int f=0;f<mat.length;f++) {
for(int c=0;c<mat[f].length;c++) {
if (mat[f][c]>mayor) {
mayor=mat[f][c];
filamay=f;
columnamay=c;
}
}
}

Problemas propuestos

  1. Crear una matriz de n * m filas (cargar n y m por teclado) Intercambiar la primer fila con la segundo. Imprimir luego la matriz.Ver video
  2. Crear una matriz de n * m filas (cargar n y m por teclado) Imprimir los cuatro valores que se encuentran en los vértices de la misma (mat[0][0] etc.)Ver video
import java.util.Scanner;
public class Matriz7 {
private Scanner teclado;
private int[][] mat;

public void cargar() {
teclado=new Scanner(System.in);
System.out.print("Cuantas fila tiene la matriz:");
int filas=teclado.nextInt();
System.out.print("Cuantas columnas tiene la matriz:");
int columnas=teclado.nextInt();
mat=new int[filas][columnas];
for(int f=0;f<mat.length;f++) {
for(int c=0;c<mat[f].length;c++) {
System.out.print("Ingrese componente:");
mat[f][c]=teclado.nextInt();
}
}
}

public void intercambiar() {
for(int c=0;c<mat[0].length;c++) {
int aux=mat[0][c];
mat[0][c]=mat[1][c];
mat[1][c]=aux;
}
}

public void imprimir() {
for(int f=0;f<mat.length;f++) {
for(int c=0;c<mat[f].length;c++) {
System.out.print(mat[f][c]+" ");
}
System.out.println();
}
}

public static void main(String[] ar) {
Matriz7 ma=new Matriz7();
ma.cargar();
ma.intercambiar();
ma.imprimir();
}
}




import java.util.Scanner;
public class Matriz8 {
private Scanner teclado;
private int[][] mat;

public void cargar() {
teclado=new Scanner(System.in);
System.out.print("Cuantas fila tiene la matriz:");
int filas=teclado.nextInt();
System.out.print("Cuantas columnas tiene la matriz:");
int columnas=teclado.nextInt();
mat=new int[filas][columnas];
for(int f=0;f<mat.length;f++) {
for(int c=0;c<mat[f].length;c++) {
System.out.print("Ingrese componente:");
mat[f][c]=teclado.nextInt();
}
}
}

public void imprimirVertices() {
System.out.println("Vértice superior izquierdo:");
System.out.println(mat[0][0]);
System.out.println("Vértice superior derecho:");
System.out.println(mat[0][mat[0].length-1]);
System.out.println("Vértice inferior izquierdo:");
System.out.println(mat[mat.length-1][0]);
System.out.println("Vértice inferior derecho:");
System.out.println(mat[mat.length-1][mat[mat.length-1].length-1]);
}

public static void main(String[] ar) {
Matriz8 ma=new Matriz8();
ma.cargar();
ma.imprimirVertices();
}
}

No hay comentarios:

Publicar un comentario