Resolvendo um Sistema de Duas Equações Lineares em C

CBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a resolver um sistema de duas equações lineares em programação C. O laboratório cobre dois passos principais: ler os coeficientes das duas equações e, em seguida, calcular as soluções usando o método do determinante. Você criará um programa C que permite aos usuários inserir os coeficientes e, em seguida, o programa calculará e exibirá as soluções ou quaisquer casos especiais que possam surgir.

O primeiro passo envolve solicitar ao usuário que insira os coeficientes para as duas equações lineares na forma padrão: ax + by = c. O programa, então, imprimirá os coeficientes inseridos para verificar a entrada. No segundo passo, você estenderá o programa para calcular as soluções usando a regra de Cramer, que envolve o cálculo dos determinantes das matrizes de coeficientes. O programa exibirá as soluções ou quaisquer casos especiais, como nenhuma solução ou infinitas soluções.

Ler Coeficientes para Duas Equações

Neste passo, você aprenderá a ler os coeficientes de um sistema de duas equações lineares usando programação C. Criaremos um programa que permite aos usuários inserir os coeficientes para duas equações na forma padrão: ax + by = c.

Primeiro, vamos criar um novo arquivo C para implementar nosso solucionador de equações:

cd ~/project
nano linear_equations.c

Agora, adicione o seguinte código para ler os coeficientes:

#include <stdio.h>

int main() {
    float a1, b1, c1;  // Coeficientes para a primeira equação
    float a2, b2, c2;  // Coeficientes para a segunda equação

    // Solicitar e ler os coeficientes para a primeira equação
    printf("Digite os coeficientes para a primeira equação (ax + by = c):\n");
    printf("a1: ");
    scanf("%f", &a1);
    printf("b1: ");
    scanf("%f", &b1);
    printf("c1: ");
    scanf("%f", &c1);

    // Solicitar e ler os coeficientes para a segunda equação
    printf("Digite os coeficientes para a segunda equação (ax + by = c):\n");
    printf("a2: ");
    scanf("%f", &a2);
    printf("b2: ");
    scanf("%f", &b2);
    printf("c2: ");
    scanf("%f", &c2);

    // Imprimir os coeficientes inseridos para verificação
    printf("\nPrimeira Equação: %.2fx + %.2fy = %.2f\n", a1, b1, c1);
    printf("Segunda Equação: %.2fx + %.2fy = %.2f\n", a2, b2, c2);

    return 0;
}

Compile e execute o programa:

gcc linear_equations.c -o linear_equations
./linear_equations

Exemplo de saída:

Digite os coeficientes para a primeira equação (ax + by = c):
a1: 2
b1: 3
c1: 8
Digite os coeficientes para a segunda equação (ax + by = c):
a2: 1
b2: 4
c2: 10

Primeira Equação: 2.00x + 3.00y = 8.00
Segunda Equação: 1.00x + 4.00y = 10.00

Calcular Soluções Usando Determinantes

Neste passo, você aprenderá a resolver um sistema de duas equações lineares usando o método do determinante. Iremos estender o programa anterior para calcular as soluções usando a regra de Cramer.

Abra o arquivo existente e modifique o código:

cd ~/project
nano linear_equations.c

Atualize o código com o método de cálculo do determinante:

#include <stdio.h>

// Função para calcular o determinante
float determinant(float a1, float b1, float a2, float b2) {
    return a1 * b2 - a2 * b1;
}

int main() {
    float a1, b1, c1;  // Coeficientes para a primeira equação
    float a2, b2, c2;  // Coeficientes para a segunda equação
    float det, detX, detY;
    float x, y;

    // Solicitar e ler os coeficientes para a primeira equação
    printf("Digite os coeficientes para a primeira equação (ax + by = c):\n");
    printf("a1: ");
    scanf("%f", &a1);
    printf("b1: ");
    scanf("%f", &b1);
    printf("c1: ");
    scanf("%f", &c1);

    // Solicitar e ler os coeficientes para a segunda equação
    printf("Digite os coeficientes para a segunda equação (ax + by = c):\n");
    printf("a2: ");
    scanf("%f", &a2);
    printf("b2: ");
    scanf("%f", &b2);
    printf("c2: ");
    scanf("%f", &c2);

    // Calcular o determinante principal
    det = determinant(a1, b1, a2, b2);

    // Verificar se o sistema tem uma solução única
    if (det != 0) {
        // Calcular os determinantes para x e y
        detX = determinant(c1, b1, c2, b2);
        detY = determinant(a1, c1, a2, c2);

        // Calcular as soluções
        x = detX / det;
        y = detY / det;

        printf("\nSolução:\n");
        printf("x = %.2f\n", x);
        printf("y = %.2f\n", y);
    } else {
        // Verificar se o sistema não tem solução ou tem infinitas soluções
        if (determinant(c1, b1, c2, b2) != 0 || determinant(a1, c1, a2, c2) != 0) {
            printf("\nNão existe solução.\n");
        } else {
            printf("\nExistem infinitas soluções.\n");
        }
    }

    return 0;
}

Compile e execute o programa:

gcc linear_equations.c -o linear_equations
./linear_equations

Exemplo de saída para uma solução única:

Digite os coeficientes para a primeira equação (ax + by = c):
a1: 2
b1: 3
c1: 8
Digite os coeficientes para a segunda equação (ax + by = c):
a2: 1
b2: 4
c2: 10

Solução:
x = 2.00
y = 2.00

Exemplo de saída para nenhuma solução:

Digite os coeficientes para a primeira equação (ax + by = c):
a1: 2
b1: 3
c1: 8
Digite os coeficientes para a segunda equação (ax + by = c):
a2: 4
b2: 6
c2: 16

Não existe solução.

Imprimir Soluções ou Casos Especiais

Neste passo final, você aprimorará o programa para fornecer uma saída mais detalhada para diferentes tipos de soluções em um sistema de duas equações lineares.

Abra o arquivo existente e faça as modificações finais:

cd ~/project
nano linear_equations.c

Atualize o código com formatação de saída aprimorada:

#include <stdio.h>
#include <math.h>

// Função para calcular o determinante
float determinant(float a1, float b1, float a2, float b2) {
    return a1 * b2 - a2 * b1;
}

int main() {
    float a1, b1, c1;  // Coeficientes para a primeira equação
    float a2, b2, c2;  // Coeficientes para a segunda equação
    float det, detX, detY;
    float x, y;
    float EPSILON = 1e-6;  // Pequeno valor para comparação de ponto flutuante

    // Solicitar e ler os coeficientes para a primeira equação
    printf("Solucionador de Equações Lineares\n");
    printf("Digite os coeficientes para a primeira equação (ax + by = c):\n");
    printf("a1: ");
    scanf("%f", &a1);
    printf("b1: ");
    scanf("%f", &b1);
    printf("c1: ");
    scanf("%f", &c1);

    // Solicitar e ler os coeficientes para a segunda equação
    printf("Digite os coeficientes para a segunda equação (ax + by = c):\n");
    printf("a2: ");
    scanf("%f", &a2);
    printf("b2: ");
    scanf("%f", &b2);
    printf("c2: ");
    scanf("%f", &c2);

    // Imprimir as equações de entrada
    printf("\nEquações de Entrada:\n");
    printf("Equação 1: %.2fx + %.2fy = %.2f\n", a1, b1, c1);
    printf("Equação 2: %.2fx + %.2fy = %.2f\n", a2, b2, c2);

    // Calcular o determinante principal
    det = determinant(a1, b1, a2, b2);

    // Determinar e imprimir o tipo de solução
    if (fabs(det) > EPSILON) {
        // Caso de solução única
        detX = determinant(c1, b1, c2, b2);
        detY = determinant(a1, c1, a2, c2);

        x = detX / det;
        y = detY / det;

        printf("\n--- Tipo de Solução: Solução Única ---\n");
        printf("Solução:\n");
        printf("x = %.2f\n", x);
        printf("y = %.2f\n", y);
    } else {
        // Verificar se não há solução ou infinitas soluções
        detX = determinant(c1, b1, c2, b2);
        detY = determinant(a1, c1, a2, c2);

        if (fabs(detX) > EPSILON || fabs(detY) > EPSILON) {
            printf("\n--- Tipo de Solução: Sem Solução ---\n");
            printf("O sistema de equações não possui solução.\n");
            printf("As equações são inconsistentes e paralelas.\n");
        } else {
            printf("\n--- Tipo de Solução: Infinitas Soluções ---\n");
            printf("O sistema de equações possui infinitas soluções.\n");
            printf("As equações são equivalentes e dependentes.\n");
        }
    }

    return 0;
}

Compile e execute o programa:

gcc linear_equations.c -o linear_equations
./linear_equations

Exemplo de saída para solução única:

Solucionador de Equações Lineares
Digite os coeficientes para a primeira equação (ax + by = c):
a1: 2
b1: 3
c1: 8
Digite os coeficientes para a segunda equação (ax + by = c):
a2: 1
b2: 4
c2: 10

Equações de Entrada:
Equação 1: 2.00x + 3.00y = 8.00
Equação 2: 1.00x + 4.00y = 10.00

--- Tipo de Solução: Solução Única ---
Solução:
x = 2.00
y = 2.00

Exemplo de saída para nenhuma solução:

Solucionador de Equações Lineares
Digite os coeficientes para a primeira equação (ax + by = c):
a1: 2
b1: 3
c1: 8
Digite os coeficientes para a segunda equação (ax + by = c):
a2: 4
b2: 6
c2: 16

Equações de Entrada:
Equação 1: 2.00x + 3.00y = 8.00
Equação 2: 4.00x + 6.00y = 16.00

--- Tipo de Solução: Sem Solução ---
O sistema de equações não possui solução.
As equações são inconsistentes e paralelas.

Resumo

Neste laboratório, você aprendeu inicialmente como ler os coeficientes de um sistema de duas equações lineares em programação C. Você criou um programa que solicita ao usuário a entrada dos coeficientes (a, b, c) para as duas equações e, em seguida, imprime as equações para verificar a entrada. Em seguida, você aprenderá como resolver o sistema de equações usando o método do determinante e a regra de Cramer para calcular as soluções.

O programa estenderá a funcionalidade anterior para calcular as soluções para o sistema de equações. Ele determinará o determinante da matriz de coeficientes e usará a regra de Cramer para encontrar os valores das variáveis x e y que satisfazem o sistema.