eae galera, blz? estou tentando construir um metodo que retorne o derterminante de uma matriz de ordem nxn usando de recursividade utilizando o metodo de laplace, a minha dificuldade esta em ir acumulando o valor a cada interação, em linguagem c basta passar uma variavel como referencia e ir acumulando nesta, por ser novo em java, não consegui encontrar uma alternativa que se equivale a variaveis passadas por refencia em linguagem funcional, e uma linguagem como java deve haver uma saida bem mais pratica e eficiente, segue abaixo o que conseguir fazer ate agora:
[code]public int DetMatriz(int mat[][], int ord) {
if (ord == 1)
return (mat[0][0]);
if (ord == 2) return ( mat[0][0] * mat[1][1] - mat[1][0] * mat[0][1] );
else {
int[][] matAux = new int[ord - 1][ord - 1];
int colAux = 0;
for (int controle = 0; controle < ord; controle++) {
for (int linha = 1; linha < ord; linha++) {
for (int coluna = 0; coluna < ord; coluna++)
if (controle != coluna)
matAux[linha - 1][colAux++] = mat[linha][coluna];
colAux = 0;
}
return ( (int) Math.pow((-1), controle) * mat[0][controle] * DetMatriz(
matAux, ord - 1) );
}
}
}[/code]
espero que alguem possa me ajudar, desde ja agradeço. Mario.
você pode criar uma variável que pertença à classe e não ao método.
basta declarar a variável fora do método e acessála dentro do método usando a sintaxe this.nomeVariável. ex:
public class Ftabah{
private int variavel;
public void divideEImprimeAteUm(){
if(this.variavel/2 >= 1){
System.out.println(this.variavel);
this.variavel = this.variavel/2;
divideEImprimeAteUm();
}
else
System.out.println("fim");
}
}
[quote=ftabah]você pode criar uma variável que pertença à classe e não ao método.
basta declarar a variável fora do método e acessála dentro do método usando a sintaxe this.nomeVariável. ex:
public class Ftabah{
private int variavel;
public void divideEImprimeAteUm(){
if(this.variavel/2 >= 1){
System.out.println(this.variavel);
this.variavel = this.variavel/2;
divideEImprimeAteUm();
}
else
System.out.println("fim");
}
}
[/quote]
entao ftabah dei uma modificada no codigo e ficou assim:
[code]private int DET;
public int DetMatriz(int mat[][], int ord) {
if (ord == 1)
return (mat[0][0]);
if (ord == 2) return (mat[0][0] * mat[1][1] - mat[1][0] * mat[0][1]);
else {
int[][] matAux = new int[ord - 1][ord - 1];
int colAux = 0;
for (int controle = 0; controle < ord; controle++) {
for (int linha = 1; linha < ord; linha++) {
for (int coluna = 0; coluna < ord; coluna++)
if (controle != coluna)
matAux[linha - 1][colAux++] = mat[linha][coluna];
colAux = 0;
}
if (mat[0][controle] != 0) this.DET += (int) Math.pow((-1), controle)
* mat[0][controle] * DetMatriz(matAux, ord - 1);
}
}
return (this.DET);
}[/code]
para as matrizes :
1 0 0 0
1 1 1 1
2 3 4 9
2 4 10 28
e
1 0 0
1 1 1
2 3 5
o determinante da certo, mais por exemplo para a matriz:
é só pra matrizes quadradas esse método ou ele é válido para outros tipos de matrizes?
vc tá fazendo a regra de Sarrus né? eu não manjo mto essa regra pra analisar seu código… faz tempo que eu não vejo conceitos matemáticos, hehehe…
Agora eu lembro que tinha uma somatória na fórmula, você está fazendo somatória? (mals a preguiça de tentar entender seu código)
[quote=ftabah]é só pra matrizes quadradas esse método ou ele é válido para outros tipos de matrizes?
vc tá fazendo a regra de Sarrus né? eu não manjo mto essa regra pra analisar seu código… faz tempo que eu não vejo conceitos matemáticos, hehehe…
Agora eu lembro que tinha uma somatória na fórmula, você está fazendo somatória? (mals a preguiça de tentar entender seu código)
abs[/quote]
kkk então eu to usando laplace, mais vlw pela ajuda, antes nem dava resultado algum kk, ja é um começo…vlw