sábado, 14 de julio de 2012

3.2.2 Operaciones con Matrices


Operaciones con Matrices
Utilizar una matriz para hacer operaciones con ella, en la mayoría de las veces implica el uso de la instrucción for anidada, pues para poder tomar o actualizar cada elemento de la matriz, es necesario utilizar índice por renglón y el índice por columna, y es por esto que el for es la instrucción ideal, un for para el renglón y otro para la columna.
Por ejemplo como lo vimos en el tema pasado, para inicializar una matriz ya una vez definida podemos utilizar
int arreglo[][] = new int [2][5];
for (int i=0; i<2; i++) {
for (int j=0; j<5; j++) {
arreglo [i][j] = i*5 + j + 1;
}
}
Pero también podemos utilizar la variable length, la cual es definida para todo arreglo en Java, y esta representa el número máximo de renglones, así como para cada renglón representa el número máximo de columnas en la matriz, es decir para el ejemplo anterior quedaría como:
int arreglo[] = new int [2][5];
for (int i=0; i<arreglo.length; i++) {
for (int j=0; j<arreglo[0].length; j++) {
arreglo [i][j] = i*arreglo[0].length + j + 1;
}
}
Al hacer operaciones con arreglos es muy común que utilicemos también una constante para definir el máximo valor a utilizar en la matriz, es decir para el ejemplo anterior quedaría como:
final int REN = 2;
final int COL = 5;
int arreglo[] = new int [REN][COL];
for (int i=0; i<REN; i++) {
for (int j=0; j<COL; j++) {
arreglo [i][j] = i*COL + j + 1;
}
}
Donde REN y COL son constantes (definidas así al usar la cláusula final) que valdrán 2 y 5 correspondientemente durante la ejecución del método, clase o parte donde se encuentre definida.
Sacando el mayor de una matriz
Cuando deseamos obtener el valor mayor de todos los valores definidos en una matriz, debemos recorrer toda la matriz y utilizar una variable que nos ayude en esta comparación. La mejor manera de inicializar esta variable es utilizar el primer valor de la matriz, por ejemplo (asumiendo que la matriz ya tiene valores):
int mayor = arreglo[0][0]; // se toma el primer valor como el mayor
// se revisa cada elemento en la matriz
for (int i=0; i < arreglo.length; i++) {
for (int j=0; j<arreglo[0].length; j++) {
// si el elemento de la matriz es mayor
if (arreglo[i][j] > mayor) {
// cambiamos el valor del mayor
mayor = arreglo[i][j];
}
}
}
System.out.println(“El valor mayor es “ + mayor);


Tomando el índice en el que se encuentra

Para hacer esto definimos otra variable, la cual debe empezar con 0 y si el valor de la matriz es mayor, además de hacer el cambio de mayor, actualizamos la posición del renglón y la columna de donde se encontró el mayor, el ejemplo quedaría como sigue (asumiendo que la matriz ya tiene valores):

int posicioni = 0;
int posicionj = 0;
int mayor = arreglo[0][0]; // se toma el primer valor como el mayor
// se revisa cada elemento en la matriz desde el segundo
for (int i=0; i < arreglo.length; i++) {
for (int j=0; j<arreglo[0].length; j++) {
// si el elemento de la matriz es mayor
if (arreglo[i][j] > mayor) {
// cambiamos el valor del mayor
mayor = arreglo[i][j];
posicioni = i;
posicionj = j;
}
}
}
System.out.println(“El valor mayor es “ + mayor);
System.out.println(“Y esta en el renglón “ + (posicioni +1));
System.out.println(“columna “ + (posicionj +1));


Si queremos saber en que posición se encontró el mayor valor, entonces utilizamos dos variables, como se observó en la aplicación, una para la posición del renglón (posicioni) y otra para la posición de la columna (posicionj).
Sacando el menor de una matriz y su posición
Para obtener el valor menor, solo se cambia la comparación y en lugar de comparar contra mayor, solo se compara contra menor, el ejemplo lo vemos como sigue (asumiendo que la matriz ya tiene valores):
int posicioni = 0;
int posicionj = 0;
int menor = arreglo[0][0]; // se toma el primer valor como el mayor
// se revisa cada elemento en la matriz desde el segundo
for (int i=0; i < arreglo.length; i++) {
for (int j=0; j<arreglo[0].length; j++) {
// si el elemento de la matriz es menor
if (arreglo[i][j] < menor) {
// cambiamos el valor del menor
menor = arreglo[i][j];
posicioni = i;
posicionj = j;
}
}
}
System.out.println(“El valor menor es “ + mayor);
System.out.println(“Y esta en el renglón “ + (posicioni +1));
System.out.println(“columna “ + (posicionj +1));
Obteniendo el promedio de la matriz
Para obtener el promedio de una matriz, se debe de sumar los elementos y dividir entre cuantos sean, el ejemplo lo vemos como sigue (asumiendo que la matriz ya tiene valores):
double promedio;
double suma = 0; // se inicializa la suma en cero
// se tomara cada elemento para sumarlo
for (int i=0; i < arreglo.length; i++) {
for (int j=0; j<arreglo[0].length; j++) {
suma += arreglo[i][j];
}
}
promedio = suma / arreglo.length;
System.out.println(“El promedio es “ + promedio);
A continuación se presenta una aplicación que utiliza todos estos conceptos para su visualización:

Esta aplicación se muestra a continuación:

import java.io.*;

public class AplicacionMatrices5 {
public static void main(String[] args) throws IOException {
int arreglo[][] = new int[3][3];
// definiendo un objeto de entrada para tomar datos del teclado
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
// pidiendo los datos del teclado
for (int i=0; i<arreglo.length; i++) {
for (int j=0; j<arreglo[0].length; j++) {
System.out.print("Da elemento " + (i+1)+ " , " + (j+1) + " : ");
arreglo[i][j] = Integer.parseInt(in.readLine());
}
System.out.println();
}
//desplegando los valores por renglon
for (int i=0; i<arreglo.length; i++) {
for (int j=0; j<arreglo[0].length; j++) {
System.out.print(" " + arreglo[i][j] + " ");
}
System.out.println();
}
System.out.println();
// sacando el mayor
int posicioni = 0;
int posicionj = 0;
int mayor = arreglo[0][0]; // se toma el primer valor como el mayor
// se revisa cada elemento en la matriz desde el segundo
for (int i=0; i < arreglo.length; i++) {
for (int j=0; j<arreglo[0].length; j++) {
// si el elemento de la matriz es mayor
if (arreglo[i][j] > mayor) {
// cambiamos el valor del mayor
mayor = arreglo[i][j];
posicioni = i;
posicionj = j;
}
}
}
System.out.println("El valor mayor es " + mayor);
System.out.println("Y esta en el renglon " + (posicioni +1));
System.out.println("columna " + (posicionj +1));
System.out.println();
//sacando el menor
int menor = arreglo[0][0]; // se toma el primer valor como el mayor
// se revisa cada elemento en la matriz desde el segundo
for (int i=0; i < arreglo.length; i++) {
for (int j=0; j<arreglo[0].length; j++) {
// si el elemento de la matriz es mayor
if (arreglo[i][j] < menor) {
// cambiamos el valor del mayor
menor = arreglo[i][j];
posicioni = i;
posicionj = j;
}
}
}
System.out.println("El valor menor es " + menor);
System.out.println("Y esta en el renglon " + (posicioni +1));
System.out.println("columna " + (posicionj +1));
System.out.println();
//obteniendo el promedio de la matriz
double promedio;
double suma = 0; // se inicializa la suma en cero
// se tomara cada elemento para sumarlo
for (int i=0; i < arreglo.length; i++) {
for (int j=0; j<arreglo[0].length; j++) {
suma += arreglo[i][j];
}
}
promedio = suma / (arreglo.length * arreglo[0].length);
System.out.println("El promedio es " + promedio);

}

}

No hay comentarios:

Publicar un comentario