Matriz determinante de ordem 3 Erro

import java.util.Scanner;

public class Determinante {
	private static int dimensao = 0;

	static Scanner digite = new Scanner(System.in);

	public static void main(String[] args) {

		System.out.println("\n Digite a dimensão para MAT..:");
		dimensao = digite.nextInt();
		if (dimensao > 3) {
			System.out.println(" no momento so pode ser de 3 x 3 ..:");
		}

		int linha = 0, coluna;// vetor começa do zero
		double det;
		double mat[][] = new double[dimensao][dimensao];
		while (linha < 3) {
			coluna = 0;

			while (coluna < 3) {
				System.out.println("\n Digite valorespara MAT [" + (linha + 1)
						+ "] [" + (coluna + 1) + "]");

				Scanner alpha = new Scanner(System.in);
				mat[linha][coluna] = alpha.nextDouble();
				coluna++;
			}
			linha++;
		}

		det = ((mat[0][0] * mat[1][1] * mat[2][2]) - (mat[0][2] + mat[1][1] + mat[2][0]));
		System.out.println("O determinante dessa matriz é: " + det);

	}

}

minha duvida é aqui estou calculando a det de ordem 3 e se eu quiser nesse mesmo codigo calcular de ordem 2 eu teirei de fazer um else e repetir isso aqui ?
det = ((mat[0][0] * mat[1][1] * mat[2][2]) - (mat[0][2] + mat[1][1] + mat[2][0]));
System.out.println("O determinante dessa matriz é: " + det);

só que ao invés de disso diminuiria os calculo pq acima e de ordem 3 ?

olivercld, boa tarde!

Seu cálculo de determinente de matriz de 3º ordem está errado. Esse métodos que você usou é o usado para matriz de ordem 2, porém é dado pela diferença entre produto (multiplicação) dos termos da diagonal primária e produto dos termos da diagonal secundária.

Faça uma revisão ae.

Tem uma fórmula para resolver determinente de órdem arbitrária…

Abraço!

O determinante da matriz de ordem 3 é calculado assim:

Ou se achar melhor, assim:

outra dúvida:

por que você criou dois objetos do tipo Scanner ?
Um só basta! :smiley:

E porque ta usando while dentro de while?
Não é possível usar “for” não?

logo logo farei um software desses (eu acho)…
aí posto o source para mostrar
(depois que vc ter terminado o seu, claro)

:stuck_out_tongue:

obrigado galera… vou analisar melhor a forma de fazer a determinante e ai posto o codigo denovo.
vou passar a maneira de fazer no papel …

conseguindo ou nao posto aqui valeuuu

d34d_d3v1l vc me perguntou sobre o while entao la ta querendo dizer que enquanto linha for menor que 3 esta dizendo que e o maximo que posso fazer e uma matriz de 3 ordem certo ? e se o usuario digitar um numero superior exem: uma 4x4 ela nao vai aceitar so que mesmoa ssim ao eu colocar uma 4 la no começo continua pedindo para digitar os valores da matriz .

Se o Software só funciona com matriz 3x3, então pq vai pedir para o usuario digitar ? :stuck_out_tongue:

abrazz…

deu certo veja o codigo:

import java.util.Scanner;

public class Determinante {
	static int det;

	static Scanner digite = new Scanner(System.in);

	public static void main(String[] args) {

		int[][] matriz = new int[3][3];
		//int[][] mat = new int [2][2];
		//System.out.println("Qual ordem vc quer 2 ou ordem 3:");
		//digite.next();
		//if(digite == 2){
		System.out.println("\n Digite os valores para MAT..:");
		for (int linha = 0; linha <= 2; linha++) {
			for (int coluna = 0; coluna <= 2; coluna++) {
				System.out.println("Mat: [" + (linha + 1) + "][" + (coluna + 1)
						+ "]");
				matriz[linha][coluna] = digite.nextInt();
			}
		}
		

		det =     matriz[0][0] * matriz[1][1] * matriz[2][2] + matriz[0][1]
				* matriz[1][2] * matriz[2][0] + matriz[0][2] * matriz[1][0]
				* matriz[2][1] - matriz[0][0] * matriz[1][2] * matriz[2][1]
				- matriz[0][1] * matriz[1][0] * matriz[2][2] - matriz[0][2]
				* matriz[1][1] * matriz[2][0];
		System.out.println("O determinante dessa matriz é: " + det);

	}

}

agora eu tentei fazer tipo um menu, pra escolher se o usuario quer uma 2x2 ou a 3x3, tntei fazer mais nao estou sabendo, queria assim se usuario qeur uma 2x2 digite tal se ele quer uma 3x3 digite tal. tem como fazer ? poderiam me dar uma ajuda

ha sim o exercicio funcionou direito em uma 3x3 peguei estes numeros de um exercicio conferi

saida:


 Digite os valores para MAT..:
Mat: [1][1]
-1
Mat: [1][2]
2
Mat: [1][3]
3
Mat: [2][1]
0
Mat: [2][2]
1
Mat: [2][3]
4
Mat: [3][1]
-2
Mat: [3][2]
-3
Mat: [3][3]
5
O determinante dessa matriz é: -27

parabens…

ta e agora caso eu queira fazer dentro do msmo codigo uma 2x2 , eu nao estou acertando fazer tipo um menu pra o usuario escolher qual ele quer a 2x2 ou a 3x3. ? tentei fazer no codigo so que nao ta saindo

Usei o seu codigo e fiz so algumas modificações. Ainda poderia melhorar o codigo mas ficaria mais difícil o entendimento da lógica.



import java.util.Scanner;


public class Determinantes {

 
    public static int det;
    public static Scanner ler = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.println("Escolha a ordem da matriz que deseja calcular 2 ou 3 :");
        int ordem = ler.nextInt();
        int[][] matriz = new int[ordem][ordem]; 
        //if(digite == 2){  
        System.out.println("\n Digite os valores para MAT..:");
        for (int linha = 0; linha < ordem; linha++) {
            for (int coluna = 0; coluna < ordem; coluna++) {
                System.out.println("Mat: [" + (linha + 1) + "][" + (coluna + 1)
                        + "]");
                matriz[linha][coluna] = ler.nextInt();
            }
        }

        if (ordem==3){
        det = matriz[0][0] * matriz[1][1] * matriz[2][2] + matriz[0][1]
                * matriz[1][2] * matriz[2][0] + matriz[0][2] * matriz[1][0]
                * matriz[2][1] - matriz[0][0] * matriz[1][2] * matriz[2][1]
                - matriz[0][1] * matriz[1][0] * matriz[2][2] - matriz[0][2]
                * matriz[1][1] * matriz[2][0];
        System.out.println("O determinante dessa matriz é: " + det);

    }
             
        if (ordem==2){
         det= matriz[0][0]*matriz[1][1]-matriz[0][1]*matriz[1][0];
         System.out.println("O determinante dessa matriz é: " + det);
        }
    }
}

troque isso:



if (ordem==3){ 
det = matriz[0][0] * matriz[1][1] * matriz[2][2] + matriz[0][1] 
* matriz[1][2] * matriz[2][0] + matriz[0][2] * matriz[1][0] 
* matriz[2][1] - matriz[0][0] * matriz[1][2] * matriz[2][1] 
- matriz[0][1] * matriz[1][0] * matriz[2][2] - matriz[0][2] 
* matriz[1][1] * matriz[2][0]; 
System.out.println("O determinante dessa matriz é: " + det); 

} 

if (ordem==2){ 
det= matriz[0][0]*matriz[1][1]-matriz[0][1]*matriz[1][0]; 
System.out.println("O determinante dessa matriz é: " + det); 
} 

por isso


metodo ordem2(parametros){
det= matriz[0][0]*matriz[1][1]-matriz[0][1]*matriz[1][0]; 
return det
}

metodo ordem3(parametros){
det = matriz[0][0] * matriz[1][1] * matriz[2][2] + matriz[0][1] 
* matriz[1][2] * matriz[2][0] + matriz[0][2] * matriz[1][0] 
* matriz[2][1] - matriz[0][0] * matriz[1][2] * matriz[2][1] 
- matriz[0][1] * matriz[1][0] * matriz[2][2] - matriz[0][2] 
* matriz[1][1] * matriz[2][0]; 
return det
}




switch(ordem){
case:2; chama o metodo ordem2;break;
case: 3; chama o metodo ordem3; break 
}

System.out.println("O determinante dessa matriz é: " + det); 

} 

hum. entendi…

não sei se posso postar aqui mais estou fazendo essa transposta e so que nao ta saindo transposta veja:


import java.util.Scanner;

public class Transposta {

	static Scanner digite = new Scanner(System.in);

	public static void main(String[] args) {

		int[][] matriz = new int[4][4];

		System.out.println("Leitura dos valores da matriz");
		for (int linha = 0; linha < 4; linha++) {
			for (int coluna = 0; coluna < 4; coluna++) {
				System.out.println("matriz. :[" + (linha + 1) + "] ["
						+ (coluna + 1) + "]");
				matriz[linha][coluna] = digite.nextInt();

			}
		}
		System.out.println("Matriz Transposta\n");
		for (int linha = 0; linha < 4; linha++) {
			// System.out.print("|");
			for (int coluna = 0; coluna < 4; coluna++)

				System.out.println(" Ressult " + matriz[coluna][linha]);
			System.out.println();
		}

	}

}

olivercld, boa tarde!

Testa assim pra ver se fica bom:[code] System.out.println(“Matriz Transposta:”);

for (int coluna = 0; coluna < 4; coluna++) {
	System.out.print("\n|");
	for (int linha = 0; linha < 4; linha++) { 
		System.out.print(matriz[coluna][linha]+"|");
	}
	System.out.println("");
}[/code]Abraço!

sim desse jeito ta saindo uma embaixo da outra. só que quero a trasposta e nao e isso que acontece oprof falou que era assim so que o que aconteceno esta sendo transposta. veja:

Leitura dos valores da matriz
matriz. :[1] [1]
1
matriz. :[1] [2]
2
matriz. :[1] [3]
3
matriz. :[1] [4]// fim da linha 1
4
matriz. :[2] [1]
5
matriz. :[2] [2]
6
matriz. :[2] [3]
7
matriz. :[2] [4]// fim da linha 2
8
matriz. :[3] [1]
9
matriz. :[3] [2]
1
matriz. :[3] [3]
2
matriz. :[3] [4]// fim da linha 3
3
matriz. :[4] [1]
4
matriz. :[4] [2]
5
matriz. :[4] [3]
6
matriz. :[4] [4]//
7
Matriz Transposta


|1|2|3|4| // deveria linha se tornar coluna 

|5|6|7|8|

|9|1|2|3|

|4|5|6|7|

assim: 
1 5
2 6
3 7
4 8

é dessa forma e nao esta da maneira de como ele falou para ser transposta

nao estou conseguindo criar o metodo há um monte de erros poderia me explicar. alguem ou cleyvison

	//if(ordem == 3){
		public int  TerceiraOrdem(int i){

		det =     matriz[0][0] * matriz[1][1] * matriz[2][2] + matriz[0][1]
				* matriz[1][2] * matriz[2][0] + matriz[0][2] * matriz[1][0]
				* matriz[2][1] - matriz[0][0] * matriz[1][2] * matriz[2][1]
				- matriz[0][1] * matriz[1][0] * matriz[2][2] - matriz[0][2]
				* matriz[1][1] * matriz[2][0];
		//System.out.println("O determinante dessa matriz é: " + det);
		return det;
		}
		//if(ordem == 2)
		 public SegundaOrdem(int ){
			det = matriz[0][0]* matriz[1][1] - matriz[0][1] * matriz[1][0];
			//System.out.println("O determinante dessa matriz é: " + det);
		return det;
		 }
	
		
	
		switch(ordem){  
		case 2: 
		
		break;  
		case 3:
			
			break ;  
		}  
		  
		System.out.println("O determinante dessa matriz é: " + det);   
		  
		}

Opa, eu inverti os índices, é que fiz correndo não tive tempo de testar. Testa assim:[code] System.out.println(“Matriz Transposta:”);

for (int coluna = 0; coluna < 4; coluna++) {
	System.out.print("\n|");
	for (int linha = 0; linha < 4; linha++) { 
		System.out.print(matriz[linha][coluna]+"|");
	}
	System.out.println("");
}[/code]Abraço!

ha agora sim Vingdel