Você está aqui: Java ::: Java para Engenharia ::: Geometria Analítica e Álgebra Linear |
Como calcular o determinante de uma matriz usando o Teorema de Laplace em JavaQuantidade de visualizações: 592 vezes |
Como já vimos em dicas anteriores, o determinante de uma matriz de ordem 3 (três linhas e três colunas) pode ser obtido por meio da Regra de Sarrus. No entanto, quando temos matrizes de ordem 4 ou superior, a regra mais comumente aplicada é o Método dos Cofatores, ou Regra de Laplace. O Método dos Cofatores, ou Expansão de Cofatores, ou ainda Determinante por Laplace, foi um método para o cálculo de determinantes inventado por Pierre Laplace. Nesta dica mostrarei um código Java completo para calcular o determinante de uma matriz de ordem 3 usando expansão de cofatores. Note que a função calcularDeterminante() é uma função recursiva cujo caso base é a redução da matriz original em apenas uma linha e uma coluna. Veja o código completo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; public class Estudos { public static void main(String[] args){ // vamos definir a ordem da matriz int ordem = 3; // 3 linhas e 3 colunas // e agora criamos a matriz. Podemos definir os elementos // diretamente ou pedir para o usuário informar os valores int matriz[][] = {{1, 3, 0}, {0, 2, 5}, {2, 4, 4}}; // mostramos a matriz completa System.out.println("A matriz é:\n"); for (int i = 0; i < ordem; i++) { for (int j = 0; j < ordem; j++){ System.out.printf("%5d", matriz[i][j]); } System.out.print("\n"); } // vamos calcular o determinante usando o Teorema de Laplace int determinante = calcularDeterminante(matriz, ordem); // e mostramos o resultado System.out.println("\nO determinante da matriz é: " + determinante); } // função recursiva que encontra e retorna o determinante de uma // matriz de qualquer ordem public static int calcularDeterminante(int matriz[][], int ordem){ int determinante = 0; // para guardar e retornar o determinante // matriz de cofatores int cofatores[][] = new int[ordem][ordem]; // para guardar o sinal de multiplicação int sinal = 1; // caso base da recursividade: // se a matriz possuir apenas um elemento, retorna ele if (ordem == 1){ return matriz[0][0]; } // vamos percorrer cada um dos elementos da primeira linha for (int f = 0; f < ordem; f++) { // vamos obter o cofator de matriz[0][f] calcularCofator(matriz, cofatores, 0, f, ordem); determinante = determinante + (sinal * matriz[0][f] * calcularDeterminante(cofatores, ordem - 1)); // alterna o sinal sinal = -sinal; } // retorna o determinante return determinante; } // função para retornar o cofator de mat[p][q] em temp[][] // ordem é a ordem atual da matriz mat[][] public static void calcularCofator(int mat[][], int temp[][], int p, int q, int ordem){ // nos parâmetros, p indica linha e q indica coluna // variáveis auxiliares int i = 0, j = 0; // percorre cada um dos elementos da matriz recebida for (int linha = 0; linha < ordem; linha++) { // percorre as colunas for (int coluna = 0; coluna < ordem; coluna++) { // copia para a matriz temporária apenas os // elementos que não se encaixam na linha // e coluna informadas if (linha != p && coluna != q) { temp[i][j++] = mat[linha][coluna]; // preenchemos a linha. Hora de aumentar // o índice da linha e resetar o índice // da coluna if (j == ordem - 1) { j = 0; i++; } } } } } } Ao executar este código Java nós teremos o seguinte resultado: A matriz é: 1 3 0 0 2 5 2 4 4 O determinante da matriz é: 18 |
Link para compartilhar na Internet ou com seus amigos: |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Java Básico |
Exercícios Resolvidos de Java - Um programa Java que recebe o ano de nascimento de uma pessoa e o ano atual e mostra a idade da pessoa em anos, meses, dias e semanasQuantidade de visualizações: 6399 vezes |
Pergunta/Tarefa: Escreva um programa Java que recebe o ano de nascimento de uma pessoa e o ano atual, calcule e mostre: a) A idade da pessoa em anos; b) A idade da pessoa em meses; c) A idade da pessoa em dias; d) A idade da pessoa em semanas. Sua saída deverá ser parecida com: Informe o ano de seu nascimento: 1985 Informe o ano atual: 2023 A idade em anos é: 38 A idade em meses é: 456 A idade em dias é: 13680 A idade em semanas é: 1976 Veja a resolução comentada deste exercício usando Java: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; import java.util.Scanner; public class Estudos { public static void main(String[] args) { // para ler a entrada do usuário Scanner entrada = new Scanner(System.in); // vamos ler o ano de nascimento System.out.print("Informe o ano de seu nascimento: "); int ano_nascimento = Integer.parseInt(entrada.nextLine()); System.out.print("Informe o ano atual: "); int ano_atual = Integer.parseInt(entrada.nextLine()); // calcula a idade em anos int idade_anos = ano_atual - ano_nascimento; System.out.println("A idade em anos é: " + idade_anos); // calcula a idade em meses int idade_meses = idade_anos * 12; System.out.println("A idade em meses é: " + idade_meses); // calcula a idade em dias int idade_dias = idade_anos * 12 * 30; System.out.println("A idade em dias é: " + idade_dias); // calcula a idade em semanas int idade_semanas = idade_anos * 52; System.out.println("A idade em semanas é: " + idade_semanas); } } |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade) |
Exercícios Resolvidos de Java - Como resolver o problema da Torre de Hanói recursivamenteQuantidade de visualizações: 1760 vezes |
Pergunta/Tarefa: Torre de Hanói, ou The Towers of Hanoi, é um "quebra-cabeça" que consiste em uma base contendo três pinos, em um dos quais são dispostos alguns discos uns sobre os outros, em ordem crescente de diâmetro, de cima para baixo. O problema consiste em passar todos os discos de um pino para outro qualquer, usando um dos pinos como auxiliar, de maneira que um disco maior nunca fique em cima de outro menor em nenhuma situação. O número de discos pode variar sendo que o mais simples contém apenas três. A solução da Torre de Hanói (The Towers of Hanoi) pode ser feita recursivamente da seguinte forma: O caso base (parada da recursão) é quando n = 1. Se n = 1 nós podemos simplesmente mover o disco de A para B, sem precisar passar pelo pino C. Quando n > 1 nós podemos dividir o problema original em três sub-problemas e resolvê-los sequencialmente. 1) Mova os primeiros n - 1 discos de A para C com a ajuda do pino B; 2) Mova o disco n de A para B; 3) Mova n - 1 discos do pino C para o pino B com a ajuda do pino A. Além de resolver o problema, seu programa deverá informar quantas chamadas recursivas foram feitas. Sua saída deverá ser parecida com: Resposta/Solução: Veja a resolução comentada deste exercício usando Java console: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package arquivodecodigos; import java.util.Scanner; public class Estudos { static int quantChamadasRecursivas = 0; // registra as chamadas recursivas public static void main(String[] args) { Scanner entrada = new Scanner(System.in); // vamos ler a quantidade de discos a serem usados na simulação System.out.print("Informe a quantidade de discos: "); int discos = Integer.parseInt(entrada.nextLine()); // resolve o problema recusivamente System.out.println("\nOs movimentos para resolver o problema foram:\n"); moverDiscos(discos, 'A', 'B', 'C'); System.out.println("\nForam feitas " + quantChamadasRecursivas + " chamadas recursivas"); System.out.println(); } // método recursivo que resolve o problema da Torre de Hanói public static void moverDiscos(int n, char daTorre, char paraTorre, char torreAux) { quantChamadasRecursivas++; // registra mais uma chamada recursiva if(n == 1){ // condição de parada System.out.println("Movendo o disco " + n + " de " + daTorre + " para " + paraTorre); } else{ // faz mais uma chamada recursiva moverDiscos(n - 1, daTorre, torreAux, paraTorre); System.out.println("Movendo o disco " + n + " de " + daTorre + " para " + paraTorre); moverDiscos(n - 1, torreAux, paraTorre, daTorre); } } } |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade) |
Exercícios Resolvidos de Java - Um método recursivo que calcula o fatorial de um determinado número inteiroQuantidade de visualizações: 2357 vezes |
Pergunta/Tarefa: Na matemática, o fatorial de um número natural n, representado por n!, é o produto de todos os inteiros positivos menores ou iguais a n. O fatorial de um número n pode ser definido recursivamente da seguinte forma: 0! = 1; n! = n x (n - 1)!; sendo n > 0 public static long fatorial(int n){ // sua implementação aqui } Informe um número inteiro: 5 O fatorial do número informado é: 120 Veja a resolução comentada deste exercício usando Java console: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; import java.util.Scanner; public class Estudos { public static void main(String[] args) { // cria um novo objeto da classe Scanner Scanner entrada = new Scanner(System.in); // vamos solicitar o número inteiro System.out.print("Informe um número inteiro: "); // lê o número int numero = Integer.parseInt(entrada.nextLine()); // calcula o fatorial corresponde ao número informado System.out.print("O fatorial do número informado é: " + fatorial(numero)); System.out.println("\n"); } // método recursivo que calcula o fatorial de um inteiro informado public static long fatorial(int n){ if(n == 0){ // caso base....retornar return 1; } else{ return n * fatorial(n - 1); // efetua mais uma chamada recursiva } } } |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
O exercício do direito à propriedade O tema dos direitos de vizinhança tem uma série de regras no Código Civil, que delimita o que um vizinho pode realizar em relação aos limites do exercício regular de seus direitos, que terminam onde iniciam os direitos do outro. Quanto ao tema dos direitos de vizinhança, seus desdobramentos conceituais e regras existentes no Código Civil, analise as assertivas marcando a opção correta: A) Os direitos de vizinhança são obrigações ambulatórias, propter rem, pois acompanham a coisa, assim como o IPTU e as dívidas de condomínio. B) Pela teoria da anterioridade ou pré-ocupação, o vizinho que se estabeleceu depois não pode reclamar do barulho do que já estava ali antes. C) A função social da propriedade é um dos nortes da matéria dos direitos de vizinhança e é construção jurisprudencial, não estando prevista legislativamente. D) O dono das árvores que estiverem situadas em seu terreno tem direito sobre elas, seus frutos e sua poda, sendo seus os frutos que caem no terreno do vizinho, e seu direito às raízes das árvores que crescem em terreno do vizinho, pois são direitos que decorrem da sua propriedade. E) O dono ou possuidor do prédio inferior está obrigado a tolerar fluxo de águas artificialmente levadas (a exemplo de aquedutos ou captação de águas pluviais). Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil |
Locação da obra Para a fase de locação da obra, é indispensável o emprego da(o) ______________. Assinale a alternativa que completa a frase. A) Concreto. B) Instalação elétrica provisória. C) Topografia. D) Canteiro mobilizado. E) Entrada de água provisória. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Engenharia Civil - Estruturas de Aço e Madeira |
Perfil em aço À medida que os perfis de aço são utilizados para estruturar uma edificação, é fundamental que sejam conectados uns aos outros. Isso vai garantir a estabilidade da construção e permitir a criação de blocos mais resistentes. Considerando essa informação e a figura apresentada a seguir, assinale a alternativa que indica corretamente o tipo de conexão que está sendo utilizado. A) Conexão de cisalhamento com solda. B) Conexão de momento com solda. C) Conexão de cisalhamento com pinos. D) Conexão de momento com pinos. E) Conexão de tensão com solda. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Python |
Analise o seguinte código Pythonpalavra = "python" palavra.upper() print(palavra) A) PYTHON B) Um erro de execução na linha 2 C) python D) Python Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil |
Fases de uma obra Em relação aos conceitos envolvidos na elaboração de um orçamento de obras, assinale a alternativa correta. A) Custos diretos são aqueles em que é necessário estipular um fator de rateio para que sejam apropriados aos serviços. B) Devem ser incluídas no título "desmobilização" de um orçamento as despesas com locação, fechamento, tapumes, demolições e relocações. C) A administração do canteiro de obras e as despesas decorrentes da administração da empresa fazem parte dos custos diretos de uma obra. D) Como regra, orçam-se os preços na construção civil por serviço, determinando-os segundo a produção de composições unitárias. E) Em um solo, caso seja necessário escavar 1 m3 do terreno, deve-se orçar, no item referente à escavação do material, o valor 1,4 m3. Verificar Resposta Estudar Cards Todas as Questões |
Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |