Die Auswertung des Polynoms an der Stelle X erfolgt mit dem Horner-Schema:
an * xn * An-1 * xn-1 + ... + a1 * x + a0 = ((...(an * x + an-1) * x ...) + a1) * x + a0
Die (maximal MAX_N (mit #define festgelegt)) Polynomkoeffizienten ai sind in einem Feld abzulegen.
Schreiben Sie ein Programm, welches den Grad des Polynoms n und nachfolgend die Koeffizienten ai einliest und es dann an der Stelle x (auch einlesen!) auswertet und das Ergebnis ausgibt.
#include <stdio.h> #define MAX_N 5 int main(void) /* hier beginnt das Hauptprogramm */ { double *Koeffizient; double stelle, pot, ergebnis; int grad, i; /* Speicher reservieren für die Koeffizienten */ Koeffizient = (double *)malloc(MAX_N * sizeof(double)); if (!Koeffizient) /* wurde Speicher reserviert? */ { printf("Konnte nicht genug Speicher reservieren!\n"); return(1); /* Programm beenden, weil nicht genug Speicher reserviert werden konnte. */ } /* Grad des Polynoms abfragen */ printf("Bitte geben Sie den Grad des Polynoms ein (0-%d): ", MAX_N - 1); scanf("%d", &grad); /* Abfragen, ob der Grad zulässig ist */ if ((grad < 0) || (grad > (MAX_N - 1))) { printf("Grad für das Polynom ist nicht zulässig!\n"); return(2); /* Programm beenden, weil der Grad nicht zulässig war! */ } /* Jetzt alle Koeffizienten einlesen */ for (i = 0; i < grad + 1; i++) { printf("Bitte Koeffizienten für x^%d eingeben: ", i); scanf("%lf", &Koeffizient[i]); } /* Den Wert für X abfragen */ printf("Bitte eingeben, an welcher Stelle (x) das Polynom ausgewertet werden soll: "); scanf("%lf", &stelle); pot = stelle; /* Potenz = Stelle (x) */ ergebnis = Koeffizient[0]; /* ersten Koeffizienten in Ergebnis schreiben */ for (i = 1; i < grad + 1; i++) /* Schleife die alle Koeffizienten (bis auf den 1.) durchläuft */ { ergebnis += Koeffizient[i] * pot; /* Ergebnis = Ergebnis + (aktuellem Koeffizienten * Potenz) */ pot *= stelle; /* Potenz = Potenz * Stelle (x) */ } /* Ergebnis ausgeben */ printf("Das Ergebnis für x=%lf lautet: %lf\n", stelle, ergebnis); free(Koeffizient); /* Speicher freigeben */ return(0); /* Das Hauptprogramm gibt am Ende 0 zurück, da kein Fehler aufgetreten ist. */ }