#include #include #include float **alocaomatriz(int m, int n) /* Funcao Especial para alocação do sistema */ /* Variaveis : pointtemp -> Ponteiro temporário*/ /* index, variável auxiliar para contagem*/ /* m - linhas , n - colunas */ { int index; float **pointtemp; if ( (m<1) || (n<0)) { printf("Valores de M x N invalidos"); return(NULL); } /* Alocação das linhas */ pointtemp = (float **) calloc(m , sizeof (float *)); if ( pointtemp == NULL ) { printf("**Erro , memoria Insuficiente.**"); return (NULL); } /* Alocação das colunas*/ for (index = 0 ; index < m ; index++) { pointtemp[index] = (float *) calloc(n , sizeof(float)); if ( pointtemp[index] == NULL ) { printf("**Erro , memoria Insuficiente.**"); return (NULL); } } return(pointtemp); } float **leitormatriz(int m, int n) /* Programa de leitura da matrix*/ /* Variavies: m - linhas , n - colunas */ /* index1, index2, variaveis auxiliare de contagem*/ /* sistema => ponteiro de ponteiros, matriz*/ { int index1, index2; float **sistema; sistema = alocaomatriz(m,n); for (index1 = 0 ; index1 < m ; index1++) { for ( index2 = 0 ; index2 < n ; index2++) { printf("\nDigite X (%d) (%d): ", index1 + 1, index2 + 1); scanf("%f",&sistema[index1][index2]); } } return (sistema); } void liberarmatriz(float **matriz , int m, int n) { int index; if ( (m < 1) || (n < 0)) { printf("Valores de M x N invalidos"); return; } for (index = 0 ; index < m ; index++) free(matriz[index]); free(matriz); } void impressaomatriz(float **sistema ,int m,int n) /*Funcao de impressao da matriz*/ { int index1, index2; for (index1 = 0 ; index1 < m ; index1++) { for (index2=0 ; index2< n ; index2++) { printf(" %f*X(%d)",sistema[index1][index2], index2+1); if (index2 < n-2) { printf(" + "); } else if (index2 == n-2) { printf(" = "); } } //quebrea de linha printf("\n"); } } float arredondamento(float f) { if ((f < 0.0001 && f > 0) || (f > -0.0001 && f < 0)) { return(0); } else return(f); } int continuar() { int a; a=0; while ((a!= 1) || (a!= 2)) { printf("Deseja continuar? (1-Sim 2-Nao)"); scanf("%d",&a); if ( a == 1) { return (0); } if ( a == 2) { return (1); } } } void trocadelinha(float **sistema , int l1, int l2,int n) //m - > números de linhas //n - > números de colunas //sistema -> matriz do sistema //vetorcopia -> vetor temporário //l1 e l2 linhas a serem permutadas { int index; float vetorcopia; for (index=0;index < n; index++) { vetorcopia = sistema[l1][index]; sistema[l1][index] = sistema[l2][index]; sistema[l2][index] = vetorcopia; } } void metgaus(float** sistema, int m, int n) { int i, j, k; float c; for (i = 0; i < m-1; i++) { for (j = i+1; j < m; j++) { c = -(sistema[j][i]/sistema[i][i]); for (k = i; k < n; k++) sistema[j][k] = arredondamento(sistema[j][k] + c*sistema[i][k]); } printf("Iteracao numero: %d\n", i + 1 ); impressaomatriz(sistema, m, n); if (continuar() == 1) { return; } } } int main() { /* Sistema = matriz dos sistema n x m*/ /* a -> m, b-> n */ float **sistema ; int a,b; printf("Digite o tamanho do seu sistema: Linhas x Colunas \n"); scanf("%d",&a); scanf("%d",&b); sistema = leitormatriz(a,b); printf("\n"); impressaomatriz(sistema,a,b); printf("**\n"); metgaus(sistema,a,b); printf("\n**\n"); // impressaomatriz(sistema,a,b); liberarmatriz(sistema,a,b); getch(); return(0); }