W charakterze przykładu rozważymy schemat blokowy programu sortowania bąbelkowego ciągu n liczb: Porządkowanie liczb za pomocą tej metody wykonywane jest w krokach o takiej samej organizacji logicznej. W kroku pierwszym przeglądane są kolejne pary: i w przypadku odwrotnego ustawienia liczb w parze są zamieniane miejscami - w ten sposób liczba najwyższa znajduje się na ostatniej pozycji ciągu. W kolejnych krokach j = 2, ..., największe liczby z coraz to krótszych ciągów: są przesuwane na ich końce. Schemat blokowy całego algorytmu jest przedstawiony na rysunku 1.1.
1.4. Schemat Hornera
Schemat Hornera jest najczęściej wykorzystywanym algorytmem obliczania wartości wielomianu
(1.9)
ze znanymi współczynnikami rzeczywistymi ![]()
Wyznaczanie wartości wielomianu dla x = ξ bezpośrednio ze wzoru (1.9) wymaga wykonania mnożeń i n dodawań. Stosując natomiast schemat Hornera:
(1.10)
odpowiadający obliczeniu wyrażenia
![]()
wartość wielomianu
![]()
(1.11)
otrzymujemy wykonując tylko n mnożeń i taką samą liczbę dodawań.
Liczby (1.10) są współczynnikami wielomianu
, (1.12)
będącego ilorazem uzyskanym przy dzieleniu danego wielomianu przez dwumian co wynika bezpośrednio z twierdzenia Bezouta [4]
(1.13)
Wstawiając bowiem wielomian (1.12) do wzoru (1.13), po uporządkowaniu wyrazów mamy
i następnie przez porównanie współczynników tego wielomianu ze współczynnika-mi wielomianu (1.9) dostajemy zależności (1.10) i (1.11).
{Program 1.1}
uses
Crt;
var
k,n: Integer;
ksi,P: Real;
a,b: array[0..20] of Real;
zn: Char;
label powt;
begin
powt:
ClrScr;
Writeln('PROGRAM 1.1');
Writeln('Schemat Hornera.');
Writeln;
Write('Stopien wielomianu - n = '); Read(n);
Writeln('Wspolczynniki wielomianu Pn(x):');
for k:=n downto 0 do begin
Write(' a[',k:2,'] = ');
Read(a[k]);
end;
Write('Argument - ksi = '); Readln(ksi);
P:=a[n]; b[0]:=P;
for k:=1 to n do begin
P:=P*ksi+a[n-k];
b[k]:=P;
end;
Writeln;
Writeln('Pn(ksi) = ',P:13);
Writeln('Wspolczynniki wielomianu Qn-1(x):');
14 1. Wprowadzenie do metod numerycznych
1.4. Schemat Hornera 15