Ir para conteúdo
Fórum Script Brasil

Caiobrito

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre Caiobrito

Caiobrito's Achievements

0

Reputação

  1. 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
×
×
  • Criar Novo...