Évaluer des expressions polynômiales en C

CBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous allez apprendre à évaluer des expressions polynômiales en programmation C. Le laboratoire couvre les étapes suivantes : lire les coefficients du polynôme et la variable x à partir de l'entrée utilisateur, et utiliser la méthode de Horner pour évaluer efficacement l'expression polynomiale. À la fin de ce laboratoire, vous aurez une meilleure compréhension du travail avec des expressions algébriques en C et de la mise en œuvre d'un algorithme d'évaluation de polynôme efficace.

Lire les coefficients et la variable x

Dans cette étape, vous allez apprendre à lire les coefficients d'un polynôme et la variable x à partir de l'entrée utilisateur dans un programme C. Il s'agit de la première partie de la mise en œuvre d'un algorithme d'évaluation de polynôme.

Tout d'abord, créez un nouveau fichier C pour le programme d'évaluation de polynôme :

cd ~/projet
nano polynomial_eval.c

Maintenant, ajoutez le code suivant pour lire les coefficients et la variable x :

#include <stdio.h>

#define MAX_DEGREE 10

int main() {
    int degree;
    double coefficients[MAX_DEGREE + 1];
    double x;

    // Lire le degré du polynôme
    printf("Entrez le degré du polynôme (0-10) : ");
    scanf("%d", &degree);

    // Lire les coefficients
    printf("Entrez les coefficients du terme de plus haut degré au terme constant :\n");
    for (int i = degree; i >= 0; i--) {
        printf("Coefficient pour x^%d : ", i);
        scanf("%lf", &coefficients[i]);
    }

    // Lire la valeur de x
    printf("Entrez la valeur de x : ");
    scanf("%lf", &x);

    return 0;
}

Sortie exemple :

Entrez le degré du polynôme (0-10) : 3
Entrez les coefficients du terme de plus haut degré au terme constant :
Coefficient pour x^3 : 2
Coefficient pour x^2 : -3
Coefficient pour x^1 : 0
Coefficient pour x^0 : 5
Entrez la valeur de x : 2

Analysons le code :

  • Nous définissons un degré maximal pour le polynôme pour éviter un dépassement de tampon
  • degree stocke le degré du polynôme
  • Le tableau coefficients stocke les coefficients du terme de plus haut degré au terme constant
  • x stocke la valeur à laquelle nous allons évaluer le polynôme
  • Nous utilisons scanf() pour lire les entrées utilisateur pour le degré, les coefficients et la valeur de x

Compilez et exécutez le programme pour tester les entrées :

gcc polynomial_eval.c -o polynomial_eval
./polynomial_eval

Utiliser la méthode de Horner pour l'évaluation

Dans cette étape, vous allez implémenter la méthode de Horner pour évaluer efficacement des expressions polynômiales. La méthode de Horner réduit le nombre de multiplications nécessaires pour calculer les valeurs des polynômes.

Ouvrez le fichier C précédent et modifiez-le pour inclure l'évaluation par la méthode de Horner :

cd ~/projet
nano polynomial_eval.c

Mettez à jour le code avec l'implémentation de la méthode de Horner :

#include <stdio.h>

#define MAX_DEGREE 10

double hornerMethod(int degree, double coefficients[], double x) {
    double result = coefficients[degree];

    for (int i = degree - 1; i >= 0; i--) {
        result = result * x + coefficients[i];
    }

    return result;
}

int main() {
    int degree;
    double coefficients[MAX_DEGREE + 1];
    double x, result;

    // Le code d'entrée précédent reste le même
    printf("Entrez le degré du polynôme (0-10) : ");
    scanf("%d", &degree);

    printf("Entrez les coefficients du terme de plus haut degré au terme constant :\n");
    for (int i = degree; i >= 0; i--) {
        printf("Coefficient pour x^%d : ", i);
        scanf("%lf", &coefficients[i]);
    }

    printf("Entrez la valeur de x : ");
    scanf("%lf", &x);

    // Évaluez le polynôme en utilisant la méthode de Horner
    result = hornerMethod(degree, coefficients, x);

    printf("Valeur du polynôme pour x = %.2f est : %.2f\n", x, result);

    return 0;
}

Compilez et exécutez le programme mis à jour :

gcc polynomial_eval.c -o polynomial_eval
./polynomial_eval

Sortie exemple :

Entrez le degré du polynôme (0-10) : 3
Entrez les coefficients du terme de plus haut degré au terme constant :
Coefficient pour x^3 : 2
Coefficient pour x^2 : -3
Coefficient pour x^1 : 0
Coefficient pour x^0 : 5
Entrez la valeur de x : 2
Valeur du polynôme pour x = 2.00 est : 11.00

Analysons la méthode de Horner :

  • La fonction hornerMethod() prend en paramètres le degré, les coefficients et x
  • Elle commence par le coefficient de plus haut degré
  • Multiplie itérativement le résultat actuel par x et ajoute le coefficient suivant
  • Réduit la complexité de calcul de O(n²) à O(n)

La méthode évalue efficacement des polynômes tels que 2x³ - 3x² + 0x + 5 pour x = 2.

Afficher le résultat

Dans cette étape finale, vous allez améliorer le programme d'évaluation de polynôme en ajoutant une sortie formatée et une gestion d'erreurs pour améliorer l'expérience utilisateur.

Ouvrez le fichier C précédent et mettez-le à jour avec une impression de résultat améliorée :

cd ~/projet
nano polynomial_eval.c

Mettez à jour le code avec une impression de résultat formatée et une validation d'entrée :

#include <stdio.h>

#define MAX_DEGREE 10

double hornerMethod(int degree, double coefficients[], double x) {
    double result = coefficients[degree];

    for (int i = degree - 1; i >= 0; i--) {
        result = result * x + coefficients[i];
    }

    return result;
}

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

int main() {
    int degree;
    double coefficients[MAX_DEGREE + 1];
    double x, result;

    // Validation d'entrée
    do {
        printf("Entrez le degré du polynôme (0-10) : ");
        scanf("%d", &degree);
    } while (degree < 0 || degree > MAX_DEGREE);

    printf("Entrez les coefficients du terme de plus haut degré au terme constant :\n");
    for (int i = degree; i >= 0; i--) {
        printf("Coefficient pour x^%d : ", i);
        scanf("%lf", &coefficients[i]);
    }

    printf("Entrez la valeur de x : ");
    scanf("%lf", &x);

    // Afficher les détails du polynôme
    printPolynomial(degree, coefficients);

    // Évaluer le polynôme en utilisant la méthode de Horner
    result = hornerMethod(degree, coefficients, x);

    // Sortie de résultat formatée
    printf("Evaluation du polynôme :\n");
    printf("P(x) = f(%.2f) = %.2f\n", x, result);

    return 0;
}

Compilez et exécutez le programme mis à jour :

gcc polynomial_eval.c -o polynomial_eval
./polynomial_eval

Sortie exemple :

Entrez le degré du polynôme (0-10) : 3
Entrez les coefficients du terme de plus haut degré au terme constant :
Coefficient pour x^3 : 2
Coefficient pour x^2 : -3
Coefficient pour x^1 : 0
Coefficient pour x^0 : 5
Entrez la valeur de x : 2
Polynôme : 2.00x^3 -3.00x^2 +5.00
Evaluation du polynôme :
P(x) = f(2.00) = 11.00

Améliorations clés :

  • Ajout de la fonction printPolynomial() pour afficher le polynôme
  • Implémentation d'une validation d'entrée pour le degré du polynôme
  • Amélioration de l'affichage du résultat avec une sortie formatée
  • Affichage à la fois du polynôme et de sa valeur évaluée

Récapitulatif

Dans ce laboratoire, vous avez d'abord appris à lire les coefficients d'un polynôme et la variable x à partir de l'entrée utilisateur dans un programme C. Cela a impliqué de définir un degré maximal pour le polynôme, de créer un tableau pour stocker les coefficients et d'utiliser scanf() pour lire les entrées utilisateur. Ensuite, vous avez implémenté la méthode de Horner pour évaluer efficacement les expressions polynômiales, ce qui réduit le nombre de multiplications nécessaires pour calculer les valeurs des polynômes. En suivant ces étapes, vous pouvez implémenter un algorithme d'évaluation de polynôme robuste en C.