Resolver ecuaciones cuadráticas en C

CCBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio (lab), aprenderás cómo resolver ecuaciones cuadráticas en el lenguaje de programación C. El laboratorio cubre el proceso completo, desde la lectura de los coeficientes de la ecuación cuadrática, el cálculo del discriminante y la determinación de las raíces reales o complejas. Escribirás un programa en C que solicite al usuario los coeficientes, realice los cálculos necesarios e imprima las soluciones.

El laboratorio se divide en dos pasos principales. Primero, aprenderás cómo leer los coeficientes a, b y c del usuario. Luego, modificarás el programa para calcular el discriminante y utilizar la fórmula cuadrática para encontrar las raíces de la ecuación, manejando tanto las soluciones reales como las complejas.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/BasicsGroup(["Basics"]) c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/BasicsGroup -.-> c/variables("Variables") c/ControlFlowGroup -.-> c/if_else("If...Else") c/FunctionsGroup -.-> c/math_functions("Math Functions") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/variables -.-> lab-435199{{"Resolver ecuaciones cuadráticas en C"}} c/if_else -.-> lab-435199{{"Resolver ecuaciones cuadráticas en C"}} c/math_functions -.-> lab-435199{{"Resolver ecuaciones cuadráticas en C"}} c/user_input -.-> lab-435199{{"Resolver ecuaciones cuadráticas en C"}} c/output -.-> lab-435199{{"Resolver ecuaciones cuadráticas en C"}} end

Leer a, b, c

En este paso, aprenderás cómo leer los valores de entrada para una ecuación cuadrática en C. Crearemos un programa que acepte los coeficientes a, b y c del usuario.

Primero, crea un nuevo archivo para tu solucionador de ecuaciones cuadráticas:

cd ~/project
nano quadratic_solver.c

Ahora, agrega el siguiente código al archivo:

#include <stdio.h>

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

    // Prompt user for input
    printf("Enter coefficient a: ");
    scanf("%lf", &a);

    printf("Enter coefficient b: ");
    scanf("%lf", &b);

    printf("Enter coefficient c: ");
    scanf("%lf", &c);

    // Print the entered coefficients
    printf("Coefficients entered:\n");
    printf("a = %.2f\n", a);
    printf("b = %.2f\n", b);
    printf("c = %.2f\n", c);

    return 0;
}

Compila el programa:

gcc quadratic_solver.c -o quadratic_solver

Ejecuta el programa:

./quadratic_solver

Ejemplo de salida:

Enter coefficient a: 1
Enter coefficient b: -5
Enter coefficient c: 6
Coefficients entered:
a = 1.00
b = -5.00
c = 6.00

Analicemos las partes clave del código:

  • scanf() se utiliza para leer la entrada del usuario para cada coeficiente
  • %lf es el especificador de formato para números de punto flotante de doble precisión
  • Almacenamos los coeficientes en las variables a, b y c
  • El programa imprime de nuevo los coeficientes ingresados para confirmar la entrada

Calcular el discriminante y determinar las raíces

En este paso, modificarás el programa anterior para calcular el discriminante y determinar las raíces de la ecuación cuadrática utilizando la fórmula cuadrática.

Abre el archivo existente y actualiza el código:

cd ~/project
nano quadratic_solver.c

Reemplaza el código anterior con el siguiente:

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

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

    // Prompt user for input
    printf("Enter coefficient a: ");
    scanf("%lf", &a);

    printf("Enter coefficient b: ");
    scanf("%lf", &b);

    printf("Enter coefficient c: ");
    scanf("%lf", &c);

    // Calculate discriminant
    discriminant = b * b - 4 * a * c;

    // Check discriminant to determine root types
    if (discriminant > 0) {
        // Two distinct real roots
        root1 = (-b + sqrt(discriminant)) / (2 * a);
        root2 = (-b - sqrt(discriminant)) / (2 * a);
        printf("Two distinct real roots:\n");
        printf("Root 1 = %.2f\n", root1);
        printf("Root 2 = %.2f\n", root2);
    } else if (discriminant == 0) {
        // One real root (repeated)
        root1 = -b / (2 * a);
        printf("One real root (repeated):\n");
        printf("Root = %.2f\n", root1);
    } else {
        // Complex roots
        double realPart = -b / (2 * a);
        double imaginaryPart = sqrt(-discriminant) / (2 * a);
        printf("Complex roots:\n");
        printf("Root 1 = %.2f + %.2fi\n", realPart, imaginaryPart);
        printf("Root 2 = %.2f - %.2fi\n", realPart, imaginaryPart);
    }

    return 0;
}

Compila el programa con la biblioteca matemática:

gcc quadratic_solver.c -o quadratic_solver -lm

Ejecuta el programa con diferentes escenarios:

./quadratic_solver

Ejemplo de salida (dos raíces reales):

Enter coefficient a: 1
Enter coefficient b: -5
Enter coefficient c: 6
Two distinct real roots:
Root 1 = 3.00
Root 2 = 2.00

Ejemplo de salida (una raíz real):

Enter coefficient a: 1
Enter coefficient b: -2
Enter coefficient c: 1
One real root (repeated):
Root = 1.00

Ejemplo de salida (raíces complejas):

Enter coefficient a: 1
Enter coefficient b: 2
Enter coefficient c: 5
Complex roots:
Root 1 = -1.00 + 2.00i
Root 2 = -1.00 - 2.00i

Puntos clave en el código:

  • Utiliza la fórmula cuadrática para calcular las raíces
  • Comprueba el discriminante para determinar el tipo de raíces
  • Maneja tres escenarios: dos raíces reales, una raíz real, raíces complejas
  • Utiliza la función sqrt() de la biblioteca math.h
  • Se compila con la bandera -lm para enlazar la biblioteca matemática

Imprimir soluciones reales o complejas

En este paso, mejorará el solucionador de ecuaciones cuadráticas para proporcionar una salida más detallada y manejar diferentes tipos de soluciones con un formato mejorado.

Abra el archivo existente y actualice el código:

cd ~/project
nano quadratic_solver.c

Reemplace el código anterior con el siguiente:

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

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

    printf("Quadratic Equation: %.2fx² + %.2fx + %.2f = 0\n", a, b, c);
    printf("Discriminant: %.2f\n", discriminant);

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

        printf("Solution Type: Two Distinct Real Roots\n");
        printf("Root 1: %.2f\n", root1);
        printf("Root 2: %.2f\n", root2);
    } else if (discriminant == 0) {
        double root = -b / (2 * a);

        printf("Solution Type: One Real Root (Repeated)\n");
        printf("Root: %.2f\n", root);
    } else {
        double realPart = -b / (2 * a);
        double imaginaryPart = sqrt(-discriminant) / (2 * a);

        printf("Solution Type: Complex Conjugate Roots\n");
        printf("Root 1: %.2f + %.2fi\n", realPart, imaginaryPart);
        printf("Root 2: %.2f - %.2fi\n", realPart, imaginaryPart);
    }
}

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

    printf("Quadratic Equation Solver\n");
    printf("------------------------\n");

    printf("Enter coefficient a: ");
    scanf("%lf", &a);

    printf("Enter coefficient b: ");
    scanf("%lf", &b);

    printf("Enter coefficient c: ");
    scanf("%lf", &c);

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

    return 0;
}

Compile el programa:

gcc quadratic_solver.c -o quadratic_solver -lm

Ejecute el programa con diferentes escenarios:

./quadratic_solver

Ejemplo de salida (dos raíces reales):

Quadratic Equation Solver
------------------------
Enter coefficient a: 1
Enter coefficient b: -5
Enter coefficient c: 6

Quadratic Equation: 1.00x² + -5.00x + 6.00 = 0
Discriminant: 1.00
Solution Type: Two Distinct Real Roots
Root 1: 3.00
Root 2: 2.00

Ejemplo de salida (una raíz real):

Quadratic Equation Solver
------------------------
Enter coefficient a: 1
Enter coefficient b: -2
Enter coefficient c: 1

Quadratic Equation: 1.00x² + -2.00x + 1.00 = 0
Discriminant: 0.00
Solution Type: One Real Root (Repeated)
Root: 1.00

Ejemplo de salida (raíces complejas):

Quadratic Equation Solver
------------------------
Enter coefficient a: 1
Enter coefficient b: 2
Enter coefficient c: 5

Quadratic Equation: 1.00x² + 2.00x + 5.00 = 0
Discriminant: -16.00
Solution Type: Complex Conjugate Roots
Root 1: -1.00 + 2.00i
Root 2: -1.00 - 2.00i

Mejoras clave:

  • Se creó una función separada printQuadraticSolutions() para una mejor organización del código
  • Se agregó una salida más descriptiva con el tipo de solución y detalles de la ecuación
  • Se mantuvo la misma lógica de cálculo de raíces del paso anterior
  • Se mejoró la interfaz de usuario con un título y un formato claro

Resumen

En este laboratorio (lab), aprenderás cómo leer los valores de entrada para una ecuación cuadrática en C, calcular el discriminante y determinar las raíces reales o complejas utilizando la fórmula cuadrática. El programa solicita al usuario que ingrese los coeficientes a, b y c, y luego calcula el discriminante para determinar la naturaleza de las raíces. Finalmente, el programa imprime las soluciones reales o complejas.

Los pasos clave cubiertos en este laboratorio incluyen leer la entrada del usuario para los coeficientes, calcular el discriminante y aplicar la fórmula cuadrática para encontrar las raíces. El programa también confirma los coeficientes de entrada y proporciona las soluciones calculadas.