Foros-FIUBA Foros HostingPortal
 FAQ  •  Buscar  •  Wiki  •  Apuntes  •  Planet  •  Mapa  •  Eyeon  •  Chat
Preferencias  •  Grupos de Usuarios
Registrarse  •  Perfil  •  Entrá para ver tus mensajes privados  •  Login
Ver tema siguiente
Ver tema anterior

Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente
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
blank.gif
MensajePublicado: Dom Sep 18, 2005 7:24 pm  Asunto:  [75.07] Algoritmos y Programacion III - Catedra Fontela Responder citandoFin de la PáginaVolver arriba

*****************

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
Aquario Género:Masculino Rata OfflineGalería Personal de FhranVer perfil de usuarioEnviar mensaje privado
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
blank.gif
MensajePublicado: Mie Sep 21, 2005 10:08 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

***************

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;
   }

}


*******************


Aquario Género:Masculino Rata OfflineGalería Personal de FhranVer perfil de usuarioEnviar mensaje privado
Fidim
Nivel 5


Edad: 40
Registrado: 22 Ago 2005
Mensajes: 171
Ubicación: Pilar, Buenos Aires
Carrera: Informática
argentina.gif
MensajePublicado: Sab Sep 24, 2005 2:41 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Buenisimo. En que turno estas?

_________________
¿Sabías que el atún mide entre 2 y 3 metros?

Capricornio Género:Masculino Chancho OfflineGalería Personal de FidimVer perfil de usuarioEnviar mensaje privado
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
blank.gif
MensajePublicado: Sab Sep 24, 2005 4:07 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

***********

Jueves a la noche.

************


Aquario Género:Masculino Rata OfflineGalería Personal de FhranVer perfil de usuarioEnviar mensaje privado
Mostrar mensajes de anteriores:      
Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente

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 CrackerTracker
365 Attacks blocked.

Powered by phpBB2 Plus, phpBB Styles and Kostenloses Forum based on phpBB © 2001/6 phpBB Group :: FI Theme :: Mods y Créditos

Foros-FIUBA está hosteado en Neolo.com Cloud Hosting

[ Tiempo: 0.5018s ][ Pedidos: 20 (0.4127s) ]