Resolvendo Equações Quadráticas em C

CBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a resolver equações quadráticas em programação C. O laboratório cobre todo o processo, desde a leitura dos coeficientes da equação quadrática, o cálculo do discriminante e a determinação das raízes reais ou complexas. Você escreverá um programa C que solicita os coeficientes ao usuário, realiza os cálculos necessários e imprime as soluções.

O laboratório é dividido em duas etapas principais. Primeiro, você aprenderá a ler os coeficientes a, b e c do usuário. Em seguida, você modificará o programa para calcular o discriminante e usar a fórmula quadrática para encontrar as raízes da equação, lidando com soluções reais e complexas.

Ler a, b, c

Nesta etapa, você aprenderá a ler valores de entrada para uma equação quadrática em C. Criaremos um programa que aceita os coeficientes a, b e c do usuário.

Primeiro, crie um novo arquivo para seu solucionador de equações quadráticas:

cd ~/project
nano quadratic_solver.c

Agora, adicione o seguinte código ao arquivo:

#include <stdio.h>

int main() {
    double a, b, c;

    // Solicitar entrada ao usuário
    printf("Digite o coeficiente a: ");
    scanf("%lf", &a);

    printf("Digite o coeficiente b: ");
    scanf("%lf", &b);

    printf("Digite o coeficiente c: ");
    scanf("%lf", &c);

    // Imprimir os coeficientes inseridos
    printf("Coeficientes inseridos:\n");
    printf("a = %.2f\n", a);
    printf("b = %.2f\n", b);
    printf("c = %.2f\n", c);

    return 0;
}

Compile o programa:

gcc quadratic_solver.c -o quadratic_solver

Execute o programa:

./quadratic_solver

Exemplo de saída:

Digite o coeficiente a: 1
Digite o coeficiente b: -5
Digite o coeficiente c: 6
Coeficientes inseridos:
a = 1.00
b = -5.00
c = 6.00

Vamos analisar as partes principais do código:

  • scanf() é usado para ler a entrada do usuário para cada coeficiente
  • %lf é o especificador de formato para números de ponto flutuante de precisão dupla
  • Armazenamos os coeficientes nas variáveis a, b e c
  • O programa imprime os coeficientes inseridos para confirmar a entrada

Calcular o Discriminante e Determinar as Raízes

Nesta etapa, você modificará o programa anterior para calcular o discriminante e determinar as raízes da equação quadrática usando a fórmula quadrática.

Abra o arquivo existente e atualize o código:

cd ~/project
nano quadratic_solver.c

Substitua o código anterior pelo seguinte:

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

int main() {
    double a, b, c;
    double discriminant, root1, root2;

    // Solicitar entrada ao usuário
    printf("Digite o coeficiente a: ");
    scanf("%lf", &a);

    printf("Digite o coeficiente b: ");
    scanf("%lf", &b);

    printf("Digite o coeficiente c: ");
    scanf("%lf", &c);

    // Calcular o discriminante
    discriminant = b * b - 4 * a * c;

    // Verificar o discriminante para determinar os tipos de raízes
    if (discriminant > 0) {
        // Duas raízes reais distintas
        root1 = (-b + sqrt(discriminant)) / (2 * a);
        root2 = (-b - sqrt(discriminant)) / (2 * a);
        printf("Duas raízes reais distintas:\n");
        printf("Raiz 1 = %.2f\n", root1);
        printf("Raiz 2 = %.2f\n", root2);
    } else if (discriminant == 0) {
        // Uma raiz real (repetida)
        root1 = -b / (2 * a);
        printf("Uma raiz real (repetida):\n");
        printf("Raiz = %.2f\n", root1);
    } else {
        // Raízes complexas
        double realPart = -b / (2 * a);
        double imaginaryPart = sqrt(-discriminant) / (2 * a);
        printf("Raízes complexas:\n");
        printf("Raiz 1 = %.2f + %.2fi\n", realPart, imaginaryPart);
        printf("Raiz 2 = %.2f - %.2fi\n", realPart, imaginaryPart);
    }

    return 0;
}

Compile o programa com a biblioteca matemática:

gcc quadratic_solver.c -o quadratic_solver -lm

Execute o programa com diferentes cenários:

./quadratic_solver

Exemplo de saída (duas raízes reais):

Digite o coeficiente a: 1
Digite o coeficiente b: -5
Digite o coeficiente c: 6
Duas raízes reais distintas:
Raiz 1 = 3.00
Raiz 2 = 2.00

Exemplo de saída (uma raiz real):

Digite o coeficiente a: 1
Digite o coeficiente b: -2
Digite o coeficiente c: 1
Uma raiz real (repetida):
Raiz = 1.00

Exemplo de saída (raízes complexas):

Digite o coeficiente a: 1
Digite o coeficiente b: 2
Digite o coeficiente c: 5
Raízes complexas:
Raiz 1 = -1.00 + 2.00i
Raiz 2 = -1.00 - 2.00i

Pontos-chave no código:

  • Usa a fórmula quadrática para calcular as raízes
  • Verifica o discriminante para determinar os tipos de raízes
  • Trata três cenários: duas raízes reais, uma raiz real e raízes complexas
  • Usa a função sqrt() da biblioteca math.h
  • Compila com o sinalizador -lm para vincular a biblioteca matemática

Imprimir Soluções Reais ou Complexas

Nesta etapa, você aprimorará o solucionador de equações quadráticas para fornecer uma saída mais detalhada e lidar com diferentes tipos de soluções com formatação melhorada.

Abra o arquivo existente e atualize o código:

cd ~/project
nano quadratic_solver.c

Substitua o código anterior pelo seguinte:

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

void printQuadraticSolutions(double a, double b, double c) {
    double discriminant = b * b - 4 * a * c;

    printf("Equação Quadrática: %.2fx² + %.2fx + %.2f = 0\n", a, b, c);
    printf("Discriminante: %.2f\n", discriminant);

    if (discriminant > 0) {
        double root1 = (-b + sqrt(discriminant)) / (2 * a);
        double root2 = (-b - sqrt(discriminant)) / (2 * a);

        printf("Tipo de Solução: Duas Raízes Reais Distintas\n");
        printf("Raiz 1: %.2f\n", root1);
        printf("Raiz 2: %.2f\n", root2);
    } else if (discriminant == 0) {
        double root = -b / (2 * a);

        printf("Tipo de Solução: Uma Raiz Real (Repetida)\n");
        printf("Raiz: %.2f\n", root);
    } else {
        double realPart = -b / (2 * a);
        double imaginaryPart = sqrt(-discriminant) / (2 * a);

        printf("Tipo de Solução: Raízes Conjugadas Complexas\n");
        printf("Raiz 1: %.2f + %.2fi\n", realPart, imaginaryPart);
        printf("Raiz 2: %.2f - %.2fi\n", realPart, imaginaryPart);
    }
}

int main() {
    double a, b, c;

    printf("Solucionador de Equações Quadráticas\n");
    printf("------------------------------------\n");

    printf("Digite o coeficiente a: ");
    scanf("%lf", &a);

    printf("Digite o coeficiente b: ");
    scanf("%lf", &b);

    printf("Digite o coeficiente c: ");
    scanf("%lf", &c);

    printf("\n");
    printQuadraticSolutions(a, b, c);

    return 0;
}

Compile o programa:

gcc quadratic_solver.c -o quadratic_solver -lm

Execute o programa com diferentes cenários:

./quadratic_solver

Exemplo de saída (duas raízes reais):

Solucionador de Equações Quadráticas
------------------------------------
Digite o coeficiente a: 1
Digite o coeficiente b: -5
Digite o coeficiente c: 6

Equação Quadrática: 1.00x² + -5.00x + 6.00 = 0
Discriminante: 1.00
Tipo de Solução: Duas Raízes Reais Distintas
Raiz 1: 3.00
Raiz 2: 2.00

(Exemplos de saída para uma raiz real e raízes complexas omitidos para manter o formato original)

Melhorias-chave:

  • Criou uma função separada printQuadraticSolutions() para melhor organização do código.
  • Adicionou uma saída mais descritiva com o tipo de solução e detalhes da equação.
  • Manteve a mesma lógica de cálculo da raiz da etapa anterior.
  • Melhorou a interface do usuário com um título e formatação clara.

Resumo

Neste laboratório, você aprenderá a ler valores de entrada para uma equação quadrática em C, calcular o discriminante e determinar as raízes reais ou complexas usando a fórmula quadrática. O programa solicita ao usuário que insira os coeficientes a, b e c e, em seguida, calcula o discriminante para determinar a natureza das raízes. Finalmente, o programa imprime as soluções reais ou complexas.

Os passos-chave abordados neste laboratório incluem a leitura da entrada do usuário para os coeficientes, o cálculo do discriminante e a aplicação da fórmula quadrática para encontrar as raízes. O programa também confirma os coeficientes de entrada e fornece as soluções calculadas.