Evaluar expresiones polinómicas 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, aprenderá a evaluar expresiones polinómicas en el lenguaje de programación C. El laboratorio cubre los siguientes pasos: leer los coeficientes del polinomio y la variable x a partir de la entrada del usuario, y utilizar el método de Horner para evaluar eficientemente la expresión polinómica. Al final de este laboratorio, tendrá una mejor comprensión de cómo trabajar con expresiones algebraicas en C y de cómo implementar un algoritmo de evaluación de polinomios efectivo.


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/ControlFlowGroup -.-> c/for_loop("For Loop") 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-435177{{"Evaluar expresiones polinómicas en C"}} c/if_else -.-> lab-435177{{"Evaluar expresiones polinómicas en C"}} c/for_loop -.-> lab-435177{{"Evaluar expresiones polinómicas en C"}} c/math_functions -.-> lab-435177{{"Evaluar expresiones polinómicas en C"}} c/user_input -.-> lab-435177{{"Evaluar expresiones polinómicas en C"}} c/output -.-> lab-435177{{"Evaluar expresiones polinómicas en C"}} end

Leer coeficientes y variable x

En este paso, aprenderá a leer los coeficientes del polinomio y la variable x a partir de la entrada del usuario en un programa C. Esta es la primera parte de la implementación de un algoritmo de evaluación de polinomios.

Primero, cree un nuevo archivo C para el programa de evaluación de polinomios:

cd ~/proyecto
nano polynomial_eval.c

Ahora, agregue el siguiente código para leer los coeficientes y la variable x:

#include <stdio.h>

#define MAX_GRADO 10

int main() {
    int grado;
    double coeficientes[MAX_GRADO + 1];
    double x;

    // Lee el grado del polinomio
    printf("Ingrese el grado del polinomio (0-10): ");
    scanf("%d", &grado);

    // Lee los coeficientes
    printf("Ingrese los coeficientes desde el grado más alto hasta el término constante:\n");
    for (int i = grado; i >= 0; i--) {
        printf("Coeficiente para x^%d: ", i);
        scanf("%lf", &coeficientes[i]);
    }

    // Lee el valor de x
    printf("Ingrese el valor de x: ");
    scanf("%lf", &x);

    return 0;
}

Salida de ejemplo:

Ingrese el grado del polinomio (0-10): 3
Ingrese los coeficientes desde el grado más alto hasta el término constante:
Coeficiente para x^3: 2
Coeficiente para x^2: -3
Coeficiente para x^1: 0
Coeficiente para x^0: 5
Ingrese el valor de x: 2

Analicemos el código:

  • Definimos un grado máximo para el polinomio para evitar desbordamiento de búfer
  • grado almacena el grado del polinomio
  • El arreglo coeficientes almacena los coeficientes desde el grado más alto hasta el término constante
  • x almacena el valor en el que evaluaremos el polinomio
  • Usamos scanf() para leer las entradas del usuario para el grado, los coeficientes y el valor de x

Compile y ejecute el programa para probar la entrada:

gcc polynomial_eval.c -o polynomial_eval
./polynomial_eval

Utilizar el método de Horner para la evaluación

En este paso, implementará el método de Horner para evaluar eficientemente expresiones polinómicas. El método de Horner reduce la cantidad de multiplicaciones necesarias para calcular los valores de los polinomios.

Abra el archivo C anterior y modifíquelo para incluir la evaluación con el método de Horner:

cd ~/proyecto
nano polynomial_eval.c

Actualice el código con la implementación del método de Horner:

#include <stdio.h>

#define MAX_GRADO 10

double hornerMethod(int grado, double coeficientes[], double x) {
    double resultado = coeficientes[grado];

    for (int i = grado - 1; i >= 0; i--) {
        resultado = resultado * x + coeficientes[i];
    }

    return resultado;
}

int main() {
    int grado;
    double coeficientes[MAX_GRADO + 1];
    double x, resultado;

    // El código de entrada anterior permanece igual
    printf("Ingrese el grado del polinomio (0-10): ");
    scanf("%d", &grado);

    printf("Ingrese los coeficientes desde el grado más alto hasta el término constante:\n");
    for (int i = grado; i >= 0; i--) {
        printf("Coeficiente para x^%d: ", i);
        scanf("%lf", &coeficientes[i]);
    }

    printf("Ingrese el valor de x: ");
    scanf("%lf", &x);

    // Evalúe el polinomio utilizando el método de Horner
    resultado = hornerMethod(grado, coeficientes, x);

    printf("Valor del polinomio en x = %.2f es: %.2f\n", x, resultado);

    return 0;
}

Compile y ejecute el programa actualizado:

gcc polynomial_eval.c -o polynomial_eval
./polynomial_eval

Salida de ejemplo:

Ingrese el grado del polinomio (0-10): 3
Ingrese los coeficientes desde el grado más alto hasta el término constante:
Coeficiente para x^3: 2
Coeficiente para x^2: -3
Coeficiente para x^1: 0
Coeficiente para x^0: 5
Ingrese el valor de x: 2
Valor del polinomio en x = 2.00 es: 11.00

Analicemos el método de Horner:

  • La función hornerMethod() toma el grado, los coeficientes y x como parámetros
  • Comienza con el coeficiente de mayor grado
  • Iterativamente multiplica el resultado actual por x y agrega el siguiente coeficiente
  • Reduce la complejidad computacional de O(n²) a O(n)

El método evalúa eficientemente polinomios como 2x³ - 3x² + 0x + 5 en x = 2.

Imprimir el resultado

En este último paso, mejorará el programa de evaluación de polinomios agregando una salida formateada y un manejo de errores para mejorar la experiencia del usuario.

Abra el archivo C anterior y actualícelo con una impresión de resultado mejorada:

cd ~/proyecto
nano polynomial_eval.c

Actualice el código con una impresión de resultado formateada y una validación de entrada:

#include <stdio.h>

#define MAX_GRADO 10

double hornerMethod(int grado, double coeficientes[], double x) {
    double resultado = coeficientes[grado];

    for (int i = grado - 1; i >= 0; i--) {
        resultado = resultado * x + coeficientes[i];
    }

    return resultado;
}

void printPolynomial(int grado, double coeficientes[]) {
    printf("Polinomio: ");
    for (int i = grado; i >= 0; i--) {
        if (coeficientes[i]!= 0) {
            if (i == grado) {
                printf("%.2fx^%d ", coeficientes[i], i);
            } else if (i > 1) {
                printf("%+.2fx^%d ", coeficientes[i], i);
            } else if (i == 1) {
                printf("%+.2fx ", coeficientes[i]);
            } else {
                printf("%+.2f", coeficientes[i]);
            }
        }
    }
    printf("\n");
}

int main() {
    int grado;
    double coeficientes[MAX_GRADO + 1];
    double x, resultado;

    // Validación de entrada
    do {
        printf("Ingrese el grado del polinomio (0-10): ");
        scanf("%d", &grado);
    } while (grado < 0 || grado > MAX_GRADO);

    printf("Ingrese los coeficientes desde el grado más alto hasta el término constante:\n");
    for (int i = grado; i >= 0; i--) {
        printf("Coeficiente para x^%d: ", i);
        scanf("%lf", &coeficientes[i]);
    }

    printf("Ingrese el valor de x: ");
    scanf("%lf", &x);

    // Imprimir detalles del polinomio
    printPolynomial(grado, coeficientes);

    // Evaluar el polinomio utilizando el método de Horner
    resultado = hornerMethod(grado, coeficientes, x);

    // Salida de resultado formateada
    printf("Evaluación del polinomio:\n");
    printf("P(x) = f(%.2f) = %.2f\n", x, resultado);

    return 0;
}

Compile y ejecute el programa actualizado:

gcc polynomial_eval.c -o polynomial_eval
./polynomial_eval

Salida de ejemplo:

Ingrese el grado del polinomio (0-10): 3
Ingrese los coeficientes desde el grado más alto hasta el término constante:
Coeficiente para x^3: 2
Coeficiente para x^2: -3
Coeficiente para x^1: 0
Coeficiente para x^0: 5
Ingrese el valor de x: 2
Polinomio: 2.00x^3 -3.00x^2 +5.00
Evaluación del polinomio:
P(x) = f(2.00) = 11.00

Mejoras principales:

  • Se agregó la función printPolynomial() para mostrar el polinomio
  • Se implementó una validación de entrada para el grado del polinomio
  • Se mejoró la impresión del resultado con una salida formateada
  • Se muestra tanto el polinomio como su valor evaluado

Resumen

En este laboratorio, primero aprendió a leer los coeficientes del polinomio y la variable x a partir de la entrada del usuario en un programa C. Esto implicó definir un grado máximo para el polinomio, crear un arreglo para almacenar los coeficientes y utilizar scanf() para leer las entradas del usuario. Luego, implementó el método de Horner para evaluar eficientemente las expresiones polinómicas, lo que reduce la cantidad de multiplicaciones necesarias para calcular los valores de los polinomios. Siguiendo estos pasos, puede implementar un algoritmo de evaluación de polinomios robusto en C.