Schemat Hornera - iteracyjny.

0

Hej, mam takie zadanie: Proszę napisać funkcje wyznaczania wartości wielomianu jednorodnego stopnia n :

  • w sposób iteracyjny minimalizując liczbę operacji,
  • w sposób rekurencyjny minimalizując liczbe wywołan..

Szukając jakichś informacji stwierdziłem, że chodzi tu o schemat Hornera. Napisałem na razie ten pierwszy podpunkt, kod wygląda tak:

using System;

namespace HornerWTF
{
    class Program
    {
        static void Main(string[] args)
        {
            int n;
            Console.WriteLine("Podaj stopień wielomioanu: ");
            n = Convert.ToInt32(Console.ReadLine());

            int[] a = new int[n];

            Console.WriteLine("Podaj wartosc a: ");

            for (int i = 0; i < n; i++)
            {
                Console.WriteLine("a [" + i);
                a[i] = Convert.ToInt32(Console.ReadLine());
            }

            int x;

            Console.WriteLine("Podaj x:");
            x = Convert.ToInt32(Console.ReadLine());

            int w;

            w = a[0];
            for (int i = 1; i < n; i++)
            {
                w = w * x + a[i];
            }

            Console.WriteLine("Wynik to: " + w);
            Console.ReadLine();
        }
    }
}

jednak kompletnie nie wiem jak sprawdzić czy ten kod działa poprawnie, w sensie czy podaje dobry wynik. Jakieś sugestie?

0
for (int i = 1; i < n; i++)
{
    w = w * x + a[i];
}

Tutaj masz obliczanie wartości wielomianu w punkcie x dla podanych watości współczynników a[i].
przetestuj dla różnych wartości x i różnych ciągów paratemtrow a[i]

0
y0=a
y1 = a * x + b
y2 = (a * x + b) *x + c => ax^2 + bx +c
y3 = ((a * x + b) *x + c)*x +d => ax^3 + bx^2 + cx + d
yn = yn-1 * x + n....

Zauważ, że kolejny stopień wielomianu powstaje poprzez wzięcie poprzedniej wartości wielomianu i pomnożenie tego przez x oraz dodanie na końcu n. Przykład:

Aby otrzymać wartość ax^3 + bx^2 + cx + d wystarczy, że weźmniesz wielomian wcześniej wyliczony czyli ax^2 + bx +c pomnożysz to przez x i dodasz d:

ax^3 + bx^2 + cx + d  <=> ("ax^2 + bx +c") * x + d.

1 użytkowników online, w tym zalogowanych: 0, gości: 1