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. */
}