Ayuda! Calcular determinante en Java

Iniciado por juancaa, 3 Marzo 2012, 15:59 PM

0 Miembros y 1 Visitante están viendo este tema.

juancaa

Pues veran, mi intencion es lograr un codigo recursivo en java que calcule el determinante de una matriz de orden N, el caso es que ya logre dicho codigo en C y ahora que estoy aprendiendo Java se me ocurrio traducirlo pero a la hora de compilarlo me tira algunos errores que no comprendo dado que todavia no estoy familiarizado con Java, aqui les enseño mi codigo:


import java.util.Scanner;

public class det_matrix {
    public static void main (String args[]) {
        Scanner in=new Scanner(System.in);
int i, j, dim, det;

         /* Leo matriz */
        System.out.print("Introduzca dimension matriz : ");
        dim=in.nextInt();
        int matrix[][]=new int[dim][dim];
        for (i=0; i<dim; i++) {
            System.out.print("Elementos fila "+i+" : ");
            for (j=0; j<dim; j++) {
                matrix[i][j]=in.nextInt();                                             
            }                       
        }
        System.out.println();

         /* Intento calcular determinante */
        System.out.print("Determinante = ");
        if (dim==1)
            System.out.print(matrix[0][0]);
        else
            System.out.print(det_matrix_N(matrix)); /* ERROR */
        System.out.println();
    }
   
    private static int sgn (int x) {
        if (x%2==0) return(1);
        else return(-1);           
    }
    private static int matrix_adj (int matrix[][], int matrix_aux[][], int dim, int m, int n) {
        int i, j, p, q;
        for (j=0, q=0; j<dim; j++)
            if (j!=n) {
                for (i=0, p=0; i<dim; i++)
                    if (i!=m) {
                        matrix_aux[p][q]=matrix[i][j];
                        p++;
                    }
                q++;               
            }
        return(dim-1);
    }
    private static int det_matrix_N (int matrix[][], int dim) {
        int i, j, dim_aux, det;
        for (i=0, j=0, det=0, dim_aux=dim; i<dim; i++) {
            det+=sgn(i+j)*matrix[i][j]*det_matrix_adj(matrix,dim_aux,i,j);
        }       
        return(det);
    }
    private static int det_matrix_adj (int matrix[][], int dim, int m, int n) {
        int matrix_aux[][]=new int[dim][dim];
        if ( (matrix_adj(matrix,matrix_aux,dim,m,n))==1 )
            return(matrix_aux[0][0]);
        return(det_matrix_N(matrix_aux,dim-1));
    }       
}


Segun el compilador de NetBeans, el error se encuentra al llamar a la funcion det_matrix_N(matrix) y no entiendo que hago mal ni tampoco como arreglarlo, este es el mensaje de error :

Codigo de error:
Citarmethod det_matrix_N in class det_matrix.det_matrix cannot be applied to given tipes;
required: int[][], int
found: int[][]
reason: actual and formal argument lists differ in length

Cualquier idea o suggerencia es bien recibida.
Gracias de antemano!
Que tengas un buen dia!

camaleonh

System.out.print(det_matrix_N(matrix)); /* ERROR */

Estás pasando solo 1 argumento a la función, ahí lo dicen claramente en los errores, , deberias pasarle tambien dim, puesto que es el otro argumento faltante.

det_matrix_N(matrix, dim)

juancaa

Muchisimas gracias camaleonh, tienes toda la razon del mundo!!

Que fallo tan estupido OMG!!

Problema solucionado!
Que tengas un buen dia!

allop

disculpa! y esto se puede aplicar para Java applet? esque soy nuevo en esto... Jeje :)

adwind

Cita de: allop en 14 Agosto 2012, 08:09 AM
disculpa! y esto se puede aplicar para Java applet? esque soy nuevo en esto... Jeje :)

Claro que si comapañero.