|
Schemat Hornera jest algorytmem obliczania wartości wielomianu w punkcie. Każdy wielomian stopnia n jest funkcją postaci: W(x)=a(n)x^n+a(n-1)x^+a(n-2)x^n+...+a(1)x+a(0), gdzie a(n)<>0 Funkcję tą można również zapisać nieco inaczej, np dla wielomianu stopnia 2: zamiast: W(x) = a(2)x^2+a(1)x+a(0) tak: W(x) = x[a(2)x+a(1)]+a(0) Ta druga postać o minimalnej ilości obliczeń (dwa mnożenia dwa dodawania zamiast 3 mnożeń 2 dodawań) nosi nazwę postaci Hornera i znakomicie nadaje się do implementacji w programach komputerowych. Stosowanie schematu Hornera umożliwia zmniejszenie liczby działań oraz również zwiększenie dokładności otrzymywanego wyniku. Przykład realizacji: program Schemat_Hornera;
uses crt; const stopien=3; type tab_wsp=array [0..stopien] of integer; var wpr_wps:tab_wsp; x:real;
procedure wspolczynniki(var wsp:tab_wsp); var i:integer; begin for i:=stopien downto 0 do begin write('Podaj wspolczynnikiynnik nr ',i,': '); readln(wsp[i]); end; end;
procedure pokazwielomian(var wsp:tab_wsp); var i:integer; begin for i:=stopien downto 1 do if wsp[i]<>0 then write(wsp[i],'*x^',i,' + '); writeln(wsp[0]); end;
function schemat_hornera(var wsp:tab_wsp; n:integer; x:real):real; var wynik:real; begin if n=stopien then schemat_hornera:=wsp[stopien] else schemat_hornera:=wsp[n]+x*schemat_hornera(wsp,n+1,x); end;
function wartosc(var wsp:tab_wsp; x:real):real; begin wartosc:=schemat_hornera(wsp,0,x); end;
begin clrscr; wspolczynniki(wpr_wps); pokazwielomian(wpr_wps); writeln('Podaj wartosc x: '); readln(x); writeln('Wartosc wielomianu=',wartosc(wpr_wps,x)); repeat until keypressed; end.
|