Skip to content

helderpgoncalves/Exercise-Sistemas_de_Equacoes_Lineares

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sistemas de Equacoes Lineares - Exercício em C

Método de Eliminação de Gauss

Gauss Gauss2 Gauss3 Gauss4

Enunciado

Enunciado1 Enunciado2

Código

#include <stdio.h>
#include <stdlib.h>

double *substituicaoRegressiva(double **m, size_t dim)
{
    double *root = (double*)malloc(dim * sizeof(double));
    double sum;
    int i,j,n;

    n = dim - 1;
    root[n] = m[n][dim]/(double)m[n][n];

    for(i = n - 1; i >= 0; i--)
    {
        sum = 0;

        for(j = i + 1; j <= n; j++ )
        {
            sum += m[i][j] * root[j];
        }

        root[i] = (m[i][dim] - sum)/(double)m[i][i];
    }
    return root;
}

void triangularSuperior(double **m, size_t dim)
{
    int i,j,k;
    double n;

    for(i = 0; i < dim; i++)
    {
        for(j = i + 1; j < dim; j++)
        {
            n = m[j][i]/(double)m[i][i];

            for(k = 0; k < dim + 1; k++)
            {
                m[j][k] = m[j][k] - n * m[i][k];
            }
        }
    }
}

double **lerMatrizCompleta(const char *arg, size_t *dim)
{
    double **m;
    int i,j;

    FILE *arq = fopen(arg,"r");

    if(arq == NULL)
    {
        printf("arquivo nao encontrado\n");
        exit(1);
    }

    fscanf(arq,"%d",dim);

    m = (double**)malloc((*dim) * sizeof(double*));

    for(i = 0; i< *dim; i++)
    {
        m[i] = (double*)malloc((*dim + 1) * sizeof(double));
    }

    for(i = 0; i < *dim; i++)
    {
        for(j = 0; j < *dim + 1; j++)
        {
            fscanf(arq,"%lf", &m[i][j]);
        }
    }
    fclose(arq);
    return m;

}

void imprimeMatrizCompleta(double **m, size_t dim)
{
    int i,j;

    for(i = 0; i < dim; i++)
    {
        for(j = 0; j < dim + 1; j++)
        {
            (j == dim)? printf("| %5.2lf\t",m[i][j]): printf("%5.2lf\t",m[i][j]);
        }
        puts("");
    }
    puts("________");
}

void imprimeRaiz(double *r, size_t dim)
{
    int i;

    puts("\n__Raízes__\n");

    for(i = 0; i < dim; i++)
    {
        printf("x[%d] = %6.3lf\n",i + 1,r[i]);
    }

    puts("________");
}

int main(int argc, char **argv)
{
    double **matriz;
    double *root;
    size_t dim;

    matriz = lerMatrizCompleta(argv[1],&dim);
    printf("MATRIX\n");
    imprimeMatrizCompleta(matriz,dim);
    triangularSuperior(matriz,dim);
    printf("\nMATRIX ESCALONADA\n");
    imprimeMatrizCompleta(matriz,dim);

    root = substituicaoRegressiva(matriz,dim);
    imprimeRaiz(root,dim);

    return 0;
}

Usage

Escrever num ficheiro .txt a matrix tal e como como está nesta foto. A primeira linha do ficheiro significa o numero de equações lineares neste caso é 4. As restantes linhas são as próprias equações. Deverá seguir o mesmo formato que na foto (x1, x2, x3 ,x4 : ? ). Como correr o programa:

  • Ir para o diretorio onde se encontra o ficheiro "trabalho"
  • Correr o mesmo através de um terminal e chamando o ficheiro .txt onde está a equação - "./trabalho matrix.txt"
  • Verificar o resultado

Exemplo do Sistema Escrito num Ficheiro .txt

Matrix

Resultado

Resultado

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingEscalonamentoNovo')
  4. Push to the Branch (git push origin feature/AmazingEscalonamentoNovo)
  5. Open a Pull Request

License

Distributed under the MIT License. See LICENSE for more information.

Contacto

Your Name - @heldinhoshotgun - helderpimentaxc@gmail.com

Github: Hélder Gonçalves

Releases

No releases published

Packages

No packages published

Languages