LucasUFG
(usa XUbuntu)
Enviado em 21/10/2013 - 15:13h
Este é o código, meu problema e que não mostra a matriz resultante
E se mostra só mostra o primeiro elemento, porque?
me ajudem a depurar isso
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,k,c,m,t; /*Variáveis i e j são os índices da matriz, m para a ordem da matriz*/
printf("Escalonamento de matrizes quadradas\n\n\n");
printf("Digite a ordem da matriz quadrada:\n");
scanf("%d", &m);
float G[m][m]; /*Declaração da Matriz ampliada*/
float x[m]; /*Vetor para efetuar a substituição*/
for(i=0;i<=m-1;i++)
{
for(j=0;j<=m-1;j++) /*Determinado os elementos da matriz ampliada*/
{
G[i][j]=0;
}
}
for(i=0;i<=m-1;i++)
{
x[m]=0;
}
for(i=1;i<=m;i++)
{
for(j=1;j<=m;j++) /*Determinado os elementos da matriz ampliada*/
{
printf("\nDigite o elemento A[%d", i);
printf("][%d", j);
printf("]:\n");
scanf("%f", &G[i-1][j-1]);
}
}
/*Nesta parte irá se efetuar as divisões de cada linha*/
for(i=m;i<=m;i++)
{
c=i; /*A variável c será constante para o próximo for, assim conseguimos caminhar apenas numa linha, max só varia neste for*/
for(j=i+1;j<=m;j++)/*j=i+1 para caminhar na pŕoxima linha sem passar na anterior pois essa ficará inalterada*/
if(abs(G[i][j])>abs(G[c][j]))
c=j;/*Fixado índice para um próximo teste do método*/
for(k=i;i<=m+1;k++)/*Efetuando a eliminação, com uma variável auxiliar t*/
{t=G[i][k];
G[i][k]=G[c][k];
G[c][k]=t;}
for(j=i+1; j<=m;j++)/*Novamente usando i+1 para ir para a próxima linha sem passar na anterior*/
for(k=m+1;k>=i;k--)/*Usamos '>=' para caminhar na matriz pelo sentido oposto, ou seja do último elemento da linha em direção ao primeiro*/
/*O mesmo motivo e valido para usar k--*/
G[j][k]-=(G[i][k]*G[j][i])/G[i][i];
}
for(j=m;j>=1;j--)
{
t=0;
for(k=j+1;k<=m;k++)
t+=G[j][k]*x[k];
x[j]=(G[j][m+1]-t)/G[j][j];
G[j][m]=x[j];
}
/*escrevendo a matriz resultante*/
printf("\nMatriz escalonada\n\n");
for(i=0;i<=m-1;i++)
{
for(j=0;j<=m-1;j++)
{
printf("\n%f", G[i][j]);
}
}
return 0;
}