Ir ao conteúdo

Posts recomendados

Postado
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Calculadora de Anti-base</title>
  <style>
    /* Estilo para a fonte do textarea */
    textarea {
      font-family: monospace;
    }
  </style>
</head>
<body>
  <h1>Calculadora de Anti-base</h1>

  <!-- Entrada da matriz de adjacência -->
  <label for="matriz">Insira a matriz de adjacência:</label><br>
  <textarea id="matriz" rows="5" cols="50"></textarea><br><br>

  <!-- Botão para calcular a anti-base -->
  <button onclick="calcularAntiBase()">Calcular Anti-base</button><br><br>

  <!-- Exibição do resultado -->
  <div id="resultado"></div>

  <!-- Script JavaScript -->
  <script>
    function calcularAntiBase() {
      // Obtém a matriz de adjacência a partir da entrada do usuário
      const matrizStr = document.getElementById("matriz").value;
      const matrizLinhas = matrizStr.trim().split("\n");
      const matrizAdjacencia = matrizLinhas.map(linha => linha.trim().split(" ").map(num => parseInt(num)));

      // Calcula a anti-base da matriz de adjacência
      const antiBase = encontrarAntiBase(matrizAdjacencia);

      // Exibe o resultado
      const resultadoStr = "Anti-base: " + antiBase.join(", ");
      document.getElementById("resultado").innerText = resultadoStr;
    }

    function encontrarAntiBase(matrizAdjacencia) {
      const numLinhas = matrizAdjacencia.length;
      const numColunas = matrizAdjacencia[0].length;

      // Inicializa matriz aumentada com os mesmos valores da matriz de adjacência
      const matrizAumentada = [];
      for (let i = 0; i < numLinhas; i++) {
        matrizAumentada[i] = [];
        for (let j = 0; j < numColunas; j++) {
          matrizAumentada[i][j] = matrizAdjacencia[i][j];
        }
      }

      // Aplica eliminação gaussiana para obter matriz escalonada
      for (let k = 0; k < numLinhas; k++) {
        // Encontra a linha com o maior valor absoluto na coluna k
        let maxLinha = k;
        for (let i = k + 1; i < numLinhas; i++) {
          if (Math.abs(matrizAumentada[i][k]) > Math.abs(matrizAumentada[maxLinha][k])) {
            maxLinha = i;
          }
        }

        // Troca a linha atual com a linha com o maior valor absoluto na coluna k
        const temp = matrizAumentada[k];
        matrizAumentada[k] = matrizAumentada[maxLinha];
        matrizAumentada[maxLinha] = temp;

        // Aplica eliminação gaussiana para tornar zeros abaixo da diagonal principal
        // Aplica eliminação gaussiana para tornar zeros abaixo da diagonal principal
        for (let i = k + 1; i < numLinhas; i++) {
          const fator = matrizAumentada[i][k] / matrizAumentada[k][k];
          matrizAumentada[i][k] = 0;
          for (let j = k + 1; j < numColunas; j++) {
            matrizAumentada[i][j] = matrizAumentada[i][j] - fator * matrizAumentada[k][j];
          }
        }
      }

      // Encontra a anti-base da matriz de adjacência
      const antiBase = [];
      for (let i = 0; i < numLinhas; i++) {
        let naoNulo = false;
        for (let j = 0; j < numColunas; j++) {
          if (matrizAumentada[i][j] !== 0) {
            naoNulo = true;
            break;
          }
        }
        if (!naoNulo) {
          antiBase.push(i);
        }
      }
      return antiBase;
    }
  </script>
</body>
</html>

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...