Olá pessoal, tudo bem? Estou fazendo uma adaptação de um programa que resolve sistemas lineares pelo método de eliminação de gauss e estou com problema para adaptá-lo.
O programa original escrevia a matriz dentro da própria função, mas agora preciso que ele utilize uma matriz retornada por uma outra função. A parte comentada era o programa original. O executável trava logo após matriz ser recebida, e eu consegui concluir que ele dá pau quando chega em *term = fabs(mat[k]);* (fui comentando as outras linhas e compilava e executava) . O que estou fazendo errado?
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#define NMAX 50
double** inicia_matriz(int*,int*);
void main()
{
int nLinhas, nColunas;
int i, j, k, l;
int last, rev;
double **mat, x[NMAX+1];
float coef, big, term, temp, pivot, nextr, cnt, y;
mat=inicia_matriz(&nLinhas,&nColunas);
//scanf("%d", &nLinha);
//for (i = 1; i <=nLinhas; i++) {
// nColunas =nLinha+1;
// printf("");
// for (j = 1; j <=nColunas; j++) {
// scanf("%f", &coef);
// a[i][j] = coef;
// }
// }
last =nLinhas- 1;
for (i = 1; i <= last; i++) {
big = 0.f;
for (k = i; k <=nLinhas; k++) {
term = fabs(mat[k][i]);
if ((term - big) > 0.f) {
big = term;
l = k;
}
}
if (i != l) {
for (j = 1; j <=nColunas; j++) {
temp = mat[i][j];
mat[i][j] = mat[l][j];
mat[l][j] = temp;
}
}
pivot = mat[i][i];
nextr = i + 1;
for (j = nextr; j <=nLinhas; j++) {
cnt = mat[j][i] / pivot;
for (k = i; k <=nColunas; k++) {
mat[j][k] = mat[j][k] - cnt*mat[i][k];
}
}
}
for (i = 1; i <=nLinhas; i++) {
rev =nLinhas+ 1 - i;
y = mat[rev][nColunas];
if (rev !=nLinhas) {
for (j = 2; j <= i; j++) {
k =nLinhas+ 2 - j;
y -= mat[rev][k]*x[k];
}
}
x[rev] = y / mat[rev][rev];
}
//solução
for (i = 1; i <=nLinhas; i++) {
printf("\n");
printf(" x( %d ) = %f\n", i, x[i]);
}
printf("\nPrograma terminado. Tecle algo para encerrar.");
getch();
}
double** inicia_matriz(int *nLinhas, int *nColunas){
int i, j,mult;
double** mat;
//numero de linhas
scanf("%d",nLinhas);
mat=(double**) calloc(*nLinhas,sizeof(double*));
if(mat==NULL){
exit(1);
}
srand (time (NULL));
//número de colunas
scanf("%d",nColunas);
for( i=0; i<*nLinhas; i++){
mat[i]= (double *) calloc(*nColunas,sizeof(double));
if(mat[i]==NULL){
exit(1);
}
for(j=0; j<*nColunas;j++){
//entrada dos coeficientes
scanf("%lf",&mat[i][j]);
}
}
return mat;
}
o
Pergunta
Caiobrito
Olá pessoal, tudo bem? Estou fazendo uma adaptação de um programa que resolve sistemas lineares pelo método de eliminação de gauss e estou com problema para adaptá-lo.
O programa original escrevia a matriz dentro da própria função, mas agora preciso que ele utilize uma matriz retornada por uma outra função. A parte comentada era o programa original. O executável trava logo após matriz ser recebida, e eu consegui concluir que ele dá pau quando chega em *term = fabs(mat[k]);* (fui comentando as outras linhas e compilava e executava) . O que estou fazendo errado?
Link para o comentário
Compartilhar em outros sites
1 resposta 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.