Pablos Postado Maio 29, 2010 Denunciar Share Postado Maio 29, 2010 (editado) 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 calcularde qualquer ordem..Se alguém puder me falar a lógica.Se quiserem ver meu código, eu posto.Grato Editado Maio 30, 2010 por Jonathan Queiroz Modificar título para descrever melhor a dúvida conforme regra 3.6 (Jonathan) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Pablos Postado Maio 30, 2010 Autor Denunciar Share Postado Maio 30, 2010 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... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Maio 30, 2010 Denunciar Share Postado Maio 30, 2010 (editado) 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 Maio 30, 2010 por RonaldoRG Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Gabriel Sardinha Colicigno Postado Outubro 4, 2018 Denunciar Share Postado Outubro 4, 2018 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Pablos
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 QueirozModificar 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
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.