C/C++ Programmierung

Aufgabe 8

Ein Polynom n-ten Grades läßt sich schreiben als:

          

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.

Lösung für die Aufgabe

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


Zurück zur Übersicht