Ir para conteúdo
Fórum Script Brasil
  • 0

Calcular determinante de matriz de qualquer ordem


Pablos

Pergunta

Boa tarde,

Preciso criar um código em C que calcule o determinante de uma matriz quadrada de qualquer ordem.

O problema é que só posso usar o que aprendi até hoje, ou seja,

somente até matrizes e vetores, não posso usar funções nem ponteiros por exemplo.

Consegui fazer calcular matriz de ordem 2, 3 e 4, porém não sei a lógica para calcular

de qualquer ordem..

Se alguém puder me falar a lógica.

Se quiserem ver meu código, eu posto.

Grato

Editado por Jonathan Queiroz
Modificar título para descrever melhor a dúvida conforme regra 3.6 (Jonathan)
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Estou postando meu código para vocês tentarem achar onde está meu erro.

O determinante só retorna valores -1.

#include<stdio.h>
#define LIMITE 10

int main(void)
{
      float matriz[LIMITE][LIMITE],valor;
      int i,j,k,ordem;
      
      printf("Entre com a ordem da matriz:");
      scanf("%d",&ordem);
      
      for(i=0;i<ordem;i++)
      {
        for(j=0;j<ordem;j++)
        {
              printf("Entre com o elemento (%d,%d) da matriz:",i+1,j+1);
              scanf("%f",&matriz[i][j]);
        }
      }    

          
      // Encontrando a determinante
      int fdr = ordem;
      float mult;
      float deter=1;
      for(i=0;i<fdr;i++)
      {
        for(j=0;j<fdr;j++)
        {
              mult=matriz[j][i]/matriz[i][i];
              for(k=0;k<fdr;k++)
             {
                if(i==j) break;
                matriz[j][k]=matriz[j][k]-matriz[i][k]*mult;
              }
        }
      }
      for(i=0;i<fdr;i++)
      {
        deter=deter*matriz[i][i];
      }
      
      // Imprimindo a determinante
      printf("O valor da determinante e: %.0f \n",deter);
      system("pause");
      return (0);
}

Respostas são bem vindas...

Link para o comentário
Compartilhar em outros sites

  • 0

Eu testei seu código aqui com algumas matrizes e aparentemente tá dando certo.

Agora quando o determinante é zero ele mostra com resultado um "nan", deve tá ocorrendo alguma indeterminação em algum lugar.

Tem que ter cuidado com essa parte:

mult=matriz[j][i]/matriz[i][i];

tem que prever no caso de algum elemento da diagonal for zero.

Editado por RonaldoRG
Link para o comentário
Compartilhar em outros sites

  • 0

Primeiro voce precisa escalonar a matriz, quando você troca as linhas e colunas muda o determinante... ou seja aplicar isso ao seu codigo.
Quando a matriz estiver escalonada voce so precisa multiplicar a diagonal principal e acabou seu problem, vou colocar uma parte do codigo aqui se for ajudar

nt main(int argc, char *argv[]) {
    int e,k,j,i,l,c,M[10][10],Z[10],P[10],mdc[10],senha;
    double detn,detd,aux;
    senha=1;
    double Re;
    
    while(senha!=0)
    {
    
    detn=1;
    detd=1;
    
    printf("Escreva as Dimensoes da Matrix a ser escalonada");

    scanf("%d%d",&l,&c);
    while(l<1||c<1)
    {
            printf("Escreva as Dimensoes da Matrix a ser escalonada Maior que zero e menor que 10");scanf("%d%d",&l,&c);
    }
        while(l>10||c>10)
    {
            printf("Escreva as Dimensoes da Matrix a ser escalonada Maior que zero e menor que 10");scanf("%d%d",&l,&c);
    }
    Ler_matrix(l,c,M);
k=1;
while(k<l)
{//printf("k0=%d",k);
    //system("pause");
    Imprimir_matrix(l,c,M);//system("pause");
    printf("\n");
    //contar zero
    i=1;
    while(i<l)
    {Contar_zeros(l,c,M,Z);
        if(Z>Z[i+1])
        {
        Trocar_linhas(l,c,M,i);    
        detn=detn*-1;
        
        Imprimir_matrix(l,c,M);
        printf("\n");
        i=0;
        }
        i=i+1;
    }
    i=1;
    while(i<l)
    {
        Procurar_Pivos(l,c,M,P);
        if(Z==Z[i+1]&&P!=0&&P<P[i+1])
        {
            Trocar_linhas(l,c,M,i);    
            detn=detn*-1;
            Imprimir_matrix(l,c,M);
            printf("\n");
        i=0;
        }
        i=i+1;
    }
    
    Procurar_Pivos(l,c,M,P);
    Contar_zeros(l,c,M,Z);
    //printf("Zeros[%d]=%d Zeros[%d]=%d\n",k,Z[k],k+1,Z[k+1]);
    if(Z[k]==Z[k+1]&&Z[k+1]!=c&&k<l)
    {//printf("k=%d",k);system("pause");
        Procurar_Pivos(l,c,M,P);
        if(l==c)
            {
                detd=detd*(P[k]);
                if(detd<1)
                {
                    detd=detd*-1;
                    detn=detn*-1;
                }
            }
        soma_linhas(l,c,M,P,k);
        
        
        k=1;//printf("K=%d\n",k);
    }
    else
    {
        k=k+1;//printf("K=%d\n",k);
    }
    
    
    for(i=1;i<=l;i++)
    {
        MDC(c,M,i,mdc);
        
    }
    Imprimir_matrix(l,c,M);
    for(i=1;i<=l;i++)
    {//printf("erro");
        for(j=1;j<=c;j++)
        {    //printf("MDC=%d",mdc);system("pause");
            if(mdc!=0)
            {
            
            M[j]=M[j]/mdc;//printf("erro%d\n",mdc);printf("M[%d][%d]/%d",i,j,M[j],mdc);
            }
        
        }
        if(mdc!=0&&l==c)
        {    
        detn=detn*mdc;
        //detn=det/mdc[i+1];printf("determinante=%d",det);system("pause");
        }
    }
    printf("\n");
    
    Imprimir_matrix(l,c,M);    
    printf("\n");
    //system("pause");

}
e=Ler_Matrix_Escalonada(l,c,M,e);
if(l==c&&e==1)
{
    detn=detn*determinante(l,c,M,detn);
    //tirar mdc de detn e detd;
    aux=MDC2(detn,detd);
    detn=detn/aux;
    detd=detd/aux;
    if(detd==1)
    {
            printf("Determinante=%f ",detn);
    }
    else
    {
    printf("Determinante=(%f/%f) ",detn,detd);
    }
    Re=detn/detd;
    printf("Determinante%f",Re);
}

        printf("0-SAIR");
    scanf("%d",&senha);
}
    printf("Fim Algoritmo");
    return 0;
}

.espero ter ajudado.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...