Autor |
Mensaje |
Fhran
Administrador
Edad: 39
Registrado: 25 Ago 2005
Mensajes: 3123
Ubicación: En la rama de un árbol... entre locos.
Carrera: Electrónica y Informática
|
|
*****************
Les dejo la resolucion que hice al ejercicio nº 1 del Capitulo nº 1 de la Guia de ejercicios...
Se me complico la parte de calcular el determinante de una matriz... les agradeceria cualquier sugerencia sobre eso u otro aspecto.
Aclaracion: la mayoria de los metodos no estan preparados para reaccionar coherentemente ante parametros erroneos.
Matriz.java
Código:
|
import java.lang.reflect.*;
public class Matriz {
private int[][] matriz;
public Matriz(int f,int c){
matriz=new int[f][c];
llenar(0);
}
public int cantidadFilas(){ return Array.getLength(matriz); }
public int cantidadColumnas(){ return Array.getLength(matriz[0]); }
public void set(int i, int j,int valor){ matriz[i][j]=valor; }
public int get(int i, int j){ return matriz[i][j]; }
public void llenar(int n){
for(int i=0;i<cantidadFilas();i++){
for(int j=0;j<cantidadColumnas();j++){
set(i,j,0);
}
}
}
public Matriz opuesta(){
Matriz m=new Matriz(cantidadFilas(),cantidadColumnas());
for(int i=0;i<cantidadFilas();i++){
for(int j=0;j<cantidadColumnas();j++){
m.set(i,j,-this.get(i,j));
}
}
return m;
}
public Matriz subMatrizBloque(int filaInicio, int columnaInicio,int filaFinal,int columnaFinal){
Matriz m=new Matriz(filaFinal-filaInicio+1,columnaFinal-columnaInicio+1);
for(int i=filaInicio;i<filaFinal+1;i++){
for(int j=columnaInicio;j<columnaFinal+1;j++){
m.set(i-filaInicio,j-columnaInicio,this.get(i,j));
}
}
return m;
}
public Matriz subMatrizSinFila(int fila){
Matriz m=new Matriz(cantidadFilas()-1,cantidadColumnas());
for(int i=0,a=0;i<cantidadFilas();i++){
if(i!=fila){
for(int j=0;j<cantidadColumnas();j++){
m.set(a,j,this.get(i,j));
}
a++;
}
}
return m;
}
public Matriz subMatrizSinColumna(int columna){
Matriz m=new Matriz(cantidadFilas(),cantidadColumnas()-1);
for(int j=0,a=0;j<cantidadColumnas();j++){
if(j!=columna){
for(int i=0;i<cantidadFilas();i++){
m.set(i,a,this.get(i,j));
}
a++;
}
}
return m;
}
public boolean esCuadrada(){
return(cantidadFilas()==cantidadColumnas());
}
public int traza(){
int resultado=0;
if(cantidadFilas()==cantidadColumnas()){
for(int i=0;i<cantidadColumnas();i++){
resultado+=get(i,i);
}
}
return resultado;
}
/*
a11 | a22 a23 | - a12 | a21 a23 | + a13 | a21 a22 |
| a32 a33 | | a31 a33 | | a31 a32 |
*/
// ESTE METODO NO FUNCIONA
public int determinante(){
int resultado=0;
if(esCuadrada()){
for(int i=0;i<cantidadFilas();i++){
Matriz aux=subMatrizSinColumna(0).subMatrizSinFila(i);
resultado += get(i,0)*Math.pow(-1,i)*aux.determinante();
}
}
return resultado;
}
}
|
CalculadoraDeMatrices.java
Código:
|
public class CalculadoraDeMatrices {
public Matriz sumar(Matriz m1, Matriz m2){
Matriz resultado;
if((m1.cantidadFilas()==m2.cantidadFilas())&&(m1.cantidadColumnas()==m2.cantidadColumnas())){
resultado=new Matriz(m1.cantidadFilas(),m1.cantidadColumnas());
for(int i=0;i<m1.cantidadFilas();i++){
for(int j=0;j<m1.cantidadColumnas();j++){
resultado.set(i,j,m1.get(i,j)+m2.get(i,j));
}
}
}else{
resultado=new Matriz(0,0);
}
return resultado;
}
public Matriz restar(Matriz m1,Matriz m2){
return sumar(m1,m2.opuesta());
}
public void imprimirMatriz(Matriz m){
for(int i=0;i<m.cantidadFilas();i++){
for(int j=0;j<m.cantidadColumnas();j++){
System.out.print(m.get(i,j)+" ");
}
System.out.println("");
}
}
}
|
Principal.java
Código:
|
public class Principal {
static int F=3;
static int C=3;
public static void main(String[] args) {
Matriz m1=new Matriz(F,C);
Matriz m2=new Matriz(F,C);
CalculadoraDeMatrices calc=new CalculadoraDeMatrices();
for(int i=0;i<F;i++){
for(int j=0;j<C;j++){
m1.set(i,j,i+j);
m2.set(i,j,i*3+j*2);
}
}
Matriz suma=calc.sumar(m1,m2);
calc.imprimirMatriz(suma);
System.out.println("");
System.out.println("Traza: " + suma.traza());
Matriz bloque=suma.subMatrizBloque(2,0,3,2);
calc.imprimirMatriz(bloque);
System.out.println("");
Matriz sub=m1.subMatrizSinColumna(2).subMatrizSinFila(2);
calc.imprimirMatriz(sub);
}
}
|
******************
|
|
|
|
Última edición por Fhran el Dom Mar 25, 2007 5:20 pm, editado 1 vez
|
|
|
|
|
Fhran
Administrador
Edad: 39
Registrado: 25 Ago 2005
Mensajes: 3123
Ubicación: En la rama de un árbol... entre locos.
Carrera: Electrónica y Informática
|
|
***************
Aca dejo la ultima version. Ahora hay una nueva clase MatrizCuadrada que hereda de MAtriz y se encarga de asuntos propios de matrices cuadradas como por ejemplo el bendito determinante... que luego de romperme un buen rato la cabeza... logre hacer andar.
Matriz.java
Código:
|
import java.lang.reflect.*;
public class Matriz {
private int[][] matriz;
public Matriz(int f,int c){
matriz=new int[f][c];
llenar(0);
}
public int cantidadFilas(){ return Array.getLength(matriz); }
public int cantidadColumnas(){ return Array.getLength(matriz[0]); }
public void set(int i, int j,int valor){ matriz[i][j]=valor; }
public int get(int i, int j){ return matriz[i][j]; }
public void llenar(int n){
for(int i=0;i<cantidadFilas();i++){
for(int j=0;j<cantidadColumnas();j++){
set(i,j,0);
}
}
}
public Matriz opuesta(){
Matriz m=new Matriz(cantidadFilas(),cantidadColumnas());
for(int i=0;i<cantidadFilas();i++){
for(int j=0;j<cantidadColumnas();j++){
m.set(i,j,-this.get(i,j));
}
}
return m;
}
public Matriz subMatrizBloque(int filaInicio, int columnaInicio,int filaFinal,int columnaFinal){
Matriz m=new Matriz(filaFinal-filaInicio+1,columnaFinal-columnaInicio+1);
for(int i=filaInicio;i<filaFinal+1;i++){
for(int j=columnaInicio;j<columnaFinal+1;j++){
m.set(i-filaInicio,j-columnaInicio,this.get(i,j));
}
}
return m;
}
public Matriz subMatrizSinFila(int fila){
Matriz m=new Matriz(cantidadFilas()-1,cantidadColumnas());
for(int i=0,a=0;i<cantidadFilas();i++){
if(i!=fila){
for(int j=0;j<cantidadColumnas();j++){
m.set(a,j,this.get(i,j));
}
a++;
}
}
return m;
}
public Matriz subMatrizSinColumna(int columna){
Matriz m=new Matriz(cantidadFilas(),cantidadColumnas()-1);
for(int j=0,a=0;j<cantidadColumnas();j++){
if(j!=columna){
for(int i=0;i<cantidadFilas();i++){
m.set(i,a,this.get(i,j));
}
a++;
}
}
return m;
}
}
|
MatrizCuadrada.java
Código:
|
public class MatrizCuadrada extends Matriz {
public MatrizCuadrada(int fc){
super(fc,fc);
}
public int traza(){
int resultado=0;
for(int i=0;i<cantidadColumnas();i++){
resultado+=get(i,i);
}
return resultado;
}
/*
a11 | a22 a23 | - a12 | a21 a23 | + a13 | a21 a22 |
| a32 a33 | | a31 a33 | | a31 a32 |
*/
public int orden(){
return cantidadFilas();
}
public MatrizCuadrada subMatrizSinFilaSinColumna(int f, int c){
Matriz m=subMatrizSinFila(f).subMatrizSinColumna(c);
MatrizCuadrada mc=new MatrizCuadrada(orden()-1);
for(int i=0;i<orden()-1;i++){
for(int j=0;j<orden()-1;j++){
mc.set(i,j,m.get(i,j));
}
}
return mc;
}
public int determinante(){
int resultado=0;
if(orden()==1){
resultado=get(0,0);
}else{
for(int i=0;i<cantidadFilas();i++){
MatrizCuadrada aux=subMatrizSinFilaSinColumna(0,i);
resultado += get(i,0)*Math.pow(-1,i)*aux.determinante();
}
}
return resultado;
}
}
|
*******************
|
|
|
|
|
|
|
|
|
Fidim
Nivel 5
Edad: 40
Registrado: 22 Ago 2005
Mensajes: 171
Ubicación: Pilar, Buenos Aires
Carrera: Informática
|
|
Buenisimo. En que turno estas?
|
|
|
|
_________________ ¿Sabías que el atún mide entre 2 y 3 metros?
|
|
|
|
|
Fhran
Administrador
Edad: 39
Registrado: 25 Ago 2005
Mensajes: 3123
Ubicación: En la rama de un árbol... entre locos.
Carrera: Electrónica y Informática
|
|
***********
Jueves a la noche.
************
|
|
|
|
|
|
|
|
|
|
|
Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro No podés responder a temas en este foro No podés editar tus mensajes en este foro No podés borrar tus mensajes en este foro No podés votar en encuestas en este foro No Podéspostear archivos en este foro No Podés bajar archivos de este foro
|
Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker365 Attacks blocked.
|