Polynomiale Ausdrücke in C auswerten

CCBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernst du, wie du polynomiale Ausdrücke in der C-Programmierung auswerten kannst. Das Lab umfasst die folgenden Schritte: das Lesen der Polynomkoeffizienten und der Variablen x aus der Benutzereingabe und die Verwendung der Horner-Methode, um den polynomiellen Ausdruck effizient auszuwerten. Am Ende dieses Labs wirst du ein besseres Verständnis dafür haben, mit algebraischen Ausdrücken in C umzugehen und einen effektiven Algorithmus zur Polynomauswertung umzusetzen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c(("C")) -.-> c/BasicsGroup(["Basics"]) c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) 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{{"Polynomiale Ausdrücke in C auswerten"}} c/if_else -.-> lab-435177{{"Polynomiale Ausdrücke in C auswerten"}} c/for_loop -.-> lab-435177{{"Polynomiale Ausdrücke in C auswerten"}} c/math_functions -.-> lab-435177{{"Polynomiale Ausdrücke in C auswerten"}} c/user_input -.-> lab-435177{{"Polynomiale Ausdrücke in C auswerten"}} c/output -.-> lab-435177{{"Polynomiale Ausdrücke in C auswerten"}} end

Koeffizienten und Variable x lesen

In diesem Schritt lernst du, wie du in einem C-Programm die Polynomkoeffizienten und die Variable x aus der Benutzereingabe lesen kannst. Dies ist der erste Teil der Implementierung eines Algorithmus zur Polynomauswertung.

Erstelle zunächst eine neue C-Datei für das Polynomauswertungsprogramm:

cd ~/project
nano polynomial_eval.c

Füge nun folgenden Code hinzu, um die Koeffizienten und die Variable x zu lesen:

#include <stdio.h>

#define MAX_DEGREE 10

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

    // Lies den Grad des Polynoms
    printf("Geben Sie den Grad des Polynoms (0-10) ein: ");
    scanf("%d", &degree);

    // Lies die Koeffizienten
    printf("Geben Sie die Koeffizienten von höchstem Grad bis zum Konstantenglied ein:\n");
    for (int i = degree; i >= 0; i--) {
        printf("Koeffizient für x^%d: ", i);
        scanf("%lf", &coefficients[i]);
    }

    // Lies den Wert von x
    printf("Geben Sie den Wert von x ein: ");
    scanf("%lf", &x);

    return 0;
}

Beispielausgabe:

Geben Sie den Grad des Polynoms (0-10) ein: 3
Geben Sie die Koeffizienten von höchstem Grad bis zum Konstantenglied ein:
Koeffizient für x^3: 2
Koeffizient für x^2: -3
Koeffizient für x^1: 0
Koeffizient für x^0: 5
Geben Sie den Wert von x ein: 2

Zergliedern wir den Code:

  • Wir definieren einen maximalen Grad für das Polynom, um einen Pufferüberlauf zu vermeiden
  • degree speichert den Grad des Polynoms
  • Das Array coefficients speichert die Koeffizienten von höchstem Grad bis zum Konstantenglied
  • x speichert den Wert, an dem wir das Polynom auswerten werden
  • Wir verwenden scanf(), um die Benutzereingaben für den Grad, die Koeffizienten und den x-Wert zu lesen

Kompiliere und führe das Programm aus, um die Eingabe zu testen:

gcc polynomial_eval.c -o polynomial_eval
./polynomial_eval

Verwenden Sie die Horner-Methode zur Auswertung

In diesem Schritt implementieren Sie die Horner-Methode, um polynomiale Ausdrücke effizient auszuwerten. Die Horner-Methode reduziert die Anzahl der Multiplikationen, die erforderlich sind, um Polynomwerte zu berechnen.

Öffnen Sie die zuvor erstellte C-Datei und ändern Sie sie, um die Horner-Methode zur Auswertung hinzuzufügen:

cd ~/project
nano polynomial_eval.c

Aktualisieren Sie den Code mit der Implementierung der Horner-Methode:

#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;

    // Der vorherige Eingabecode bleibt gleich
    printf("Geben Sie den Grad des Polynoms (0-10) ein: ");
    scanf("%d", &degree);

    printf("Geben Sie die Koeffizienten von höchstem Grad bis zum Konstantenglied ein:\n");
    for (int i = degree; i >= 0; i--) {
        printf("Koeffizient für x^%d: ", i);
        scanf("%lf", &coefficients[i]);
    }

    printf("Geben Sie den Wert von x ein: ");
    scanf("%lf", &x);

    // Werten Sie das Polynom mit der Horner-Methode aus
    result = hornerMethod(degree, coefficients, x);

    printf("Polynomwert bei x = %.2f ist: %.2f\n", x, result);

    return 0;
}

Kompilieren und führen Sie das aktualisierte Programm aus:

gcc polynomial_eval.c -o polynomial_eval
./polynomial_eval

Beispielausgabe:

Geben Sie den Grad des Polynoms (0-10) ein: 3
Geben Sie die Koeffizienten von höchstem Grad bis zum Konstantenglied ein:
Koeffizient für x^3: 2
Koeffizient für x^2: -3
Koeffizient für x^1: 0
Koeffizient für x^0: 5
Geben Sie den Wert von x ein: 2
Polynomwert bei x = 2.00 ist: 11.00

Zergliedern wir die Horner-Methode:

  • Die Funktion hornerMethod() nimmt Grad, Koeffizienten und x als Parameter
  • Sie beginnt mit dem Koeffizienten des höchsten Grades
  • Multipliziert iterativ das aktuelle Ergebnis mit x und addiert den nächsten Koeffizienten
  • Reduziert die Rechenkomplexität von O(n²) auf O(n)

Die Methode wertet Polynome wie 2x³ - 3x² + 0x + 5 bei x = 2 effizient aus.

Drucken Sie das Ergebnis

In diesem letzten Schritt verbessern Sie das Polynomauswertungsprogramm, indem Sie formatierte Ausgabe und Fehlerbehandlung hinzufügen, um die Benutzererfahrung zu verbessern.

Öffnen Sie die zuvor erstellte C-Datei und aktualisieren Sie sie mit einer verbesserten Ergebnisausgabe:

cd ~/project
nano polynomial_eval.c

Aktualisieren Sie den Code mit formatierter Ergebnisausgabe und Eingabeprüfung:

#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("Polynom: ");
    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;

    // Eingabeprüfung
    do {
        printf("Geben Sie den Grad des Polynoms (0-10) ein: ");
        scanf("%d", &degree);
    } while (degree < 0 || degree > MAX_DEGREE);

    printf("Geben Sie die Koeffizienten von höchstem Grad bis zum Konstantenglied ein:\n");
    for (int i = degree; i >= 0; i--) {
        printf("Koeffizient für x^%d: ", i);
        scanf("%lf", &coefficients[i]);
    }

    printf("Geben Sie den Wert von x ein: ");
    scanf("%lf", &x);

    // Drucken Sie die Polynomdetails
    printPolynomial(degree, coefficients);

    // Werten Sie das Polynom mit der Horner-Methode aus
    result = hornerMethod(degree, coefficients, x);

    // Formatierte Ergebnisausgabe
    printf("Polynomauswertung:\n");
    printf("P(x) = f(%.2f) = %.2f\n", x, result);

    return 0;
}

Kompilieren und führen Sie das aktualisierte Programm aus:

gcc polynomial_eval.c -o polynomial_eval
./polynomial_eval

Beispielausgabe:

Geben Sie den Grad des Polynoms (0-10) ein: 3
Geben Sie die Koeffizienten von höchstem Grad bis zum Konstantenglied ein:
Koeffizient für x^3: 2
Koeffizient für x^2: -3
Koeffizient für x^1: 0
Koeffizient für x^0: 5
Geben Sie den Wert von x ein: 2
Polynom: 2.00x^3 -3.00x^2 +5.00
Polynomauswertung:
P(x) = f(2.00) = 11.00

Wichtige Verbesserungen:

  • Hinzugefügt die printPolynomial()-Funktion, um das Polynom anzuzeigen
  • Implementiert die Eingabeprüfung für den Polynomgrad
  • Verbessert die Ergebnisausgabe mit formatierter Ausgabe
  • Zeigt sowohl das Polynom als auch seinen ausgewerteten Wert an

Zusammenfassung

In diesem Lab hast du zunächst gelernt, wie du in einem C-Programm die Polynomkoeffizienten und die Variable x aus der Benutzereingabe lesen kannst. Dies beinhaltete die Definition eines maximalen Grades für das Polynom, das Erstellen eines Arrays, um die Koeffizienten zu speichern, und die Verwendung von scanf(), um die Benutzereingaben zu lesen. Anschließend hast du die Horner-Methode implementiert, um polynomiale Ausdrücke effizient auszuwerten, was die Anzahl der Multiplikationen reduziert, die erforderlich sind, um Polynomwerte zu berechnen. Indem du diese Schritte folgst, kannst du einen robusten Algorithmus zur Polynomauswertung in C implementieren.