background image
background image

Ws ze chnica Poranna

Proste rachunki wykonywane za pomocą komputera

 prof. dr hab. Maciej M Sysło

prof. dr hab. Maciej M Sysło

Ze szyt dydaktyczny opracowany w ramach projektu edukacyjne go

 — ponadre gionalny program rozwijania kompe tencji 

uczniów szkół ponadgimna zjalnych w zakresie technologii 
informacyjno-komunikacyjnych (ICT).

Warszawska Wyżs za Szkoła Informa tyki

ul. Lewartowskie go 17, 00 -169 Wars zawa

Projekt graficzny: FRYCZ I WICHA

Wars zawa 2009
Copyright © Wars za wska Wyżs za Szkoła Informatyki 2009
Publikacja nie jes t prze znaczona do sprze da ży.

Uniwersytet Wrocławski, UMK w Toruniu

syslo@ii.uni.wroc.pl, s yslo@mat.uni.torun.pl 

background image

< 4 > 

Informa tyka  + 

Komputery nie przes ta ły być mas zynami ma tematycznymi – jak kiedyś je nazywano –  i obe cnie służą rów-
nie ż do wykonywania różnych obliczeń. Wykład jes t poś więcony m.in. algorytmom obliczania : wartoś ci dzie -
się tnej  liczby  binarnej,  pos taci  binarnej  liczby  dziesiętnej,  wartoś ci  wielomianu,  największego  wspólnego 
dzielnika dwóch liczb (algorytm Euklides a) ora z wartości potęgi. Motywacją dla wprowadzenia tych algoryt-
mów jes t chęć obja śnienia metody s zyfrowania informacji z kluczem publicznym RSA, pows zechnie s tos owa -
nej w kryptografii komputerowej. Na warszta tach uczniowie zapoznają się z komputerowymi demons tracja -
mi omówionych na wykładzie algorytmów ora z zaprogramują w ję zyku Pas cal lub C++ i przetes tują wybrane 
algorytmy. 

Te zaję cia s ą drugą częścią wprowadzenia do algorytmiki i programowania . Omawiane s ą wię c rów-

nie ż ogólne pojęcia z zakresu algorytmiki, jak s pe cyfikacja problemu, schematy blokowe algorytmów, pod-
s tawowe struktury danych (ciąg i tablica) ora z pra cochłonnoś ć (złożonoś ć) algorytmów. Na wars ztatach zo-
s tają wprowadzone podstawowe ins trukcje języka programowania (itera cyjna i warunkowa ora z procedura  
i funkcja nies tandardowa), wystarczające do zaprogramowania i uruchomienia komputerowych realizacji al-
gorytmów omówionych na wykładzie. Przytoczono ciekawe przykłady za stos owań omawianych zagadnień. 

Rozwa żania  są   prowadzone  na  elementarnym  poziomie  i  do  ich  wysłuchania  ora z  wzięcia  udzia łu 

w wars ztatach wys tarczy znajomoś ć informa tyki wyniesiona z gimna zjum ora z matematyki na poziomie s zko-
ły ś redniej. Te zaję cia  s ą adresowane do wszys tkich uczniów w szkołach ponadgimnazjalnych, zgodnie bo-
wiem z nową pods tawą programową, ks ztałceniem umiejętnoś ci a lgorytmicznego rozwiązywania problemów 
mają być obję ci ws zys cy uczniowie. 

Wprowadzenie   ................................................................................................................................................. 5

1.  Sys tem dziesiętny i s ys tem binarny ............................................................................................................. 5

2 .  Obliczanie wartoś ci wielomianu – schemat Hornera .................................................................................... 6

3.  Zamiany liczby binarnej na dziesiętną  ...................................................................................................... 12

4 .  Otrzymywanie binarnego rozwinięcia liczby dzie siętnej ............................................................................ 13

5.  Szybkie obliczanie wartoś ci potęgi ............................................................................................................ 15

6.  Algorytm Euklides a .................................................................................................................................... 16

7.  Dodatek. Algorytm, algorytmika i algorytmiczne rozwią zywanie problemów – rozważania ogólne .......... 19

Literatura    

 ............................................................................................................................................... 22

> Proste rachunki wykonywane za  pomocą  komputera  

< 5 >

Komputery  w dals zym ciągu s ą przede ws zys tkim ma szynami ma tematycznymi, chociaż użytkownik widzi 
częs to teks ty i obra zy, słys zy muzykę , ogląda filmy. Wykład jes t poś wię cony algorytmom wykonywania ele -
menta rnych obliczeń, takich jak: obliczanie wartoś ci dzie siętnej liczby binarnej, pos taci binarnej liczby dzie -
siętnej, wartoś ci wielomianu, na jwięks zego wspólnego dzielnika dwóch liczb, wartoś ci potęgi. 

Te zajęcia są drugą czę ścią wprowadzenia do algorytmiki i programowania. Omawiane s ą więc rów-

nież ogólne pojęcia z zakresu algorytmiki, jak specyfikacja problemu, s chematy blokowe algorytmów, pod-
stawowe s truktury danych (ciąg i tablica) oraz pracochłonnoś ć (złożoność) algorytmów. Na wars ztatach zo-
stają wprowadzone pods tawowe instrukcje ję zyka programowania (iteracyjna i warunkowa oraz procedura 
i funkcja nie standardowa), wys tarczające do zaprogramowania i uruchomienia komputerowych realiza cji al-
gorytmów omówionych na wykładzie. Przytoczono ciekawe przykłady za s tosowań omawianych zagadnień. 

Rozwa żania ogólne na temat algorytmiki, algorytmicznego myślenia i rozwiązywania problemów z po-

mocą komputerów s ą zamies zczone w Doda tku (rozdz. 7 ). Materiał tam za warty może być dobrym podsumo-
waniem zajęć. 

Jako  literaturę  rozs zerzającą  prowadzone  tutaj  rozwa żania  polecamy  podręczniki  [2],  a  zwła s zcza 

książki [5] i [6]. 

Obecnie w powsze chnym użyciu je st s ys te m dziesiętny, zwany też s ys temem dzie siątkowym. Komputery na-
tomias t wszys tkie operacje wykonują w s ys temie binarnym, zwanym również s ys temem dwójkowym. Oba 
s ystemy, to dwa przykła dy  tzw. s ys temu pozycyjnego zapis ywania wartości  liczbowych. Powinny one być 
Wam znane z lekcji ma tema tyki. Przypomnijmy jednak jeden i drugi s ys tem. 

Liczba za pis ana w s ys temie dziesię tnym, np. 357, oznacza wartość, na którą s kładają się trzy s etki, 

pię ć dziesią tek i siedem jednoś ci, a za tem wartoś ć tej liczby można zapisa ć jako 357 = 3

100 + 5

10 + 7

1, 

a także jako 357 = 3

10

2

 + 5

10

1

 + 7

10

0

A za tem, dziesiętna liczba naturalna złożona z n cyfr: 

d

n–1

 d

n–2

 ... d

1

 d

0

 

oznacza wartoś ć:

 

 

 

 

 

 

 

 

 

d

n–1

10

n–1

 + d

n–2

10

n–2

 + ... + d

1

10

1

 + d

0

10

0

.     

 

 

     (1)

Liczba 10 w tej reprezentacji na zywa się pods tawą s ystemu li-
czenia . Do zapis ywania liczb w s ys temie dziesiętnym s ą uży-
wane cyfry: 0, 1, 2, 3, 4, 5, 6, 7, 8 i 9. Ten spos ób reprezento-
wania liczb na zywa się s ys te m pozycyjnym, gdyż w tym s ys te -
mie znaczenie cyfry zależy od jej pozycji w cią gu cyfr, okre śla -
jącym liczbę. Na przykład, liczby 123 i 321 ma ją różną wartoś ć, 
chocia ż s ą złożone z tych s amych cyfr, a liczba 111 jes t złożona  
z trzech jedynek, z których ka żda ma inne znaczenie dla  warto-
ści tej liczby.  

 Ws zys tkim są zna ne tzw. cyfry rzymskie: I, V, X, L, C, D. M. Oznaczają one odpowiednio 

liczby: 1, 5, 10, 50, 100, 500, 1000. W tym s ys temie , liczba III ma dziesię tną wartość 3, a zatem każda 
z cyfr w tej liczbie ma takie s amo znaczenie, a wartoś ć jes t obliczana prze z dodawanie wartości cyfr. Za -
pis z w tym s ys temie liczby 2009 i 2012. Na liczbach rzymskich trudno wykonuje się podstawowe dzia -
łania: dodawanie, odejmowanie i mnożenie. Liczby te były s tos owa ne przez Rzymian głównie do zapi-
s ywania  wartoś ci liczbowych, a nie do wykonywania na nich działań. 

Za pods tawę s ys temu liczenia można przyjąć dowolną liczbę naturalną  p więks zą od 1, np. 2, 5, 8, 16 czy 60. 
Je śli p jes t pods tawą s ys temu liczenia , to liczby w tym s ys temie są zapis ywane za  pomocą cyfr ze zbioru {0, 
1, ..., p – 1}. 

Dwa tysiące lat prze d na s zą erą 
Babilończycy s tosowali s ys tem kopowy 
(tj. przy pods tawie 60) – przypuszcza  
się, że s tąd wzią ł s ię podział ką ta 
pe łnego na 360 stopni, godziny – na 60 
minut, a minuty – na 60 s ekund.

background image

< 6 > 

Informa tyka  + 

W rozwa żaniach zwią zanych z komputerami pojawia ją się liczby w s ys tema ch o podstawach 2, 8 i 16. Nas zą 
uwagę skupimy głównie na s ystemie o pods tawie 2, a o innych s ys tema ch jes t mowa w ćwiczeniach. 

Jeśli  p  =  2,  to  s ys tem  na zywa  się  binarnym  lub  dwójkowym 
– cyfry liczby, zapisanej w tym s ys temie, mogą  mieć wartoś ć 
0 lub 1 i na zywają się bitami. Liczba naturalna a dana w s yste -
mie dzies iętnym ma na s tępującą pos tać w s ys temie binarnym 
dla pewnego n: 

a = b

n–1

2

n–1

 + b

n–2

2

n–2

 + ... + b

1

2

1

 + b

0

2

0

,   

 

 

 

(2)

gdzie współczynniki b

n–1

, b

n–2

, ..., b

1

, b

0

 są liczbami 0 lub 1. W skrócie pis zemy zwykle a = (b

n–1

b

n–2

 ... b

1

b

0

)

2

 

i cią g bitów w nawia sie na zywamy binarnym rozwinięciem liczby a . Na przykład  mamy, 8 = (1000)

2

,  12 = 

(1100)

2

, 7 = (111)

2

. Cyfra b

n–1

 jest najbardziej znaczącą , a b

0

 – najmniej znaczącą w rozwinię ciu liczby a. 

Spos oby wykonywania działań w s ys temach innych niż dziesię tny są  pros tym przenie sieniem za sad z s ys te -
mu dziesiętne go. 

Jeśli się dobrze przyjrzymy wzorom oznaczonym prze z (1) i (2), to zauwa żymy, że przypominają one specjalne 
wielomiany – ws półczynnikami tych wielomianów s ą cyfry rozwinięcia , a argumentem wielomianu – je st pod-
s tawa s ystemu liczenia . Aby wię c obliczyć wartoś ć dziesiętną liczby, danej w innym s ys temie , poznamy algo-
rytm, który służy do bardzo efektywne go obliczania wartości wielomianu. 

Jednym z najważniejs zych kroków w algorytmach jes t powtarzanie tej samej czynności (operacji), czyli itera -
cja . W tym punkcie zilus trujemy iterację na przykładzie s zybkiego spos obu oblicza nia wartoś ci wielomianu. 

Obliczanie wartoś ci wielomianu o zadanych współczynnikach 
jes t jedną z najczęś ciej wykonywanych operacji w komputerze. 
Wynika to z wa żne go ma tematycznego faktu, zgodnie z którym 
ka żdą funkcję (np. funkcje trygonometryczne) można za s tą pić 
wielomianem, którego pos tać zale ży od funkcji i od tego, jaką 
chcemy uzyskać dokładnoś ć obliczeń.

Na  przykład,  obliczanie  wartoś ci  funkcji  cos  x  w  prze -

dziale 0 ≤ x ≤ π/ 2 z błę dem nie więks zym niż 0.0009, można za-
s tąpić obliczaniem wartości nas tępującego wielomianu:

cos x = 1 – 0.49670x

2

 + 0.03705x

4

Zacznijmy od prostych ćwiczeń. 
Jeśli dane s ą wartoś ci współczynników a, b i c wielomianu s topnia 2: 

w(x) = a x

2

 + bx + c,

to je go wartoś ć można obliczyć wykonując za znaczone mnożenia i dodawania: a

x

x + b

x + c, czyli 3 mnoże -

nia i dwa dodawania . Można także nieco inaczej – wyłączmy x z dwóch pierws zych składników – wtedy otrzy-
mamy: 

w(x) = (a x + b)x + c

i dla tej pos taci obliczanie wartoś ci tego wielomianu przyjmuje pos tać: (a

x + b)

x + c, czyli są  wykony-

wane tylko 2 mnożenia i dwa dodawania . 

Za prekursora systemu binarnego uważa się 
G.W. Leibniza, który w pracy opublikowanej 
w 1703 roku zilustrował wykonywanie 
czterech podstawowych działań 
arytmetycznych na liczbach binarnych. 

Ada Augus ta , córka Byrona , uznawana 
pows zechnie za pierws zą programis tkę 
komputerów, prze łomowe znaczenie 
mas zyny analitycznej Ch. Babba ge’a , 
pierwowzoru późniejs zych komputerów, 
upatrywała właś nie „w możliwoś ci 
wielokrotne go wykonywania prze z 
nią dane go cią gu instrukcji, z liczbą 
powtórzeń z góry zadaną lub zależną 
od wyników obliczeń”. 

> Proste rachunki wykonywane za  pomocą  komputera  

< 7 >

W podobny spos ób można prze ds tawić wielomian s topnia  3:

v(x) = a x

3

 + bx

2

 + cx + d

najpierw wyłączam x z pierws zych trze ch wyra zów, a na s tępnie wyłączamy x z dwóch pierws zych wyrazów 
w nawia sie: 

v(x) = a x

3

 + bx

2

 + cx + d = v(x) = v(x) = (a x

2

 + bx + c)x + d, = ((a

x + b)

x + c)

x + d. 

Widać z tego os tatniego wzoru, że wartoś ć wielomiany s topnia 3 można obliczyć za pomocą 3 mnożeń i 3 do-
da wań. 

Rozwa żmy tera z wielomian s topnia n:

 

 

 

 

 

 

 

 

 

 

w

n

(x) = a

0

x

n

 + a

1

x

n–1

+ ... + a

n–1

x + a

n

  

   

 

 

     (3)

i zas tosujmy grupowanie wyrazów podobnie, jak w wielomianie s topnia 3 – najpierw wyłączamy x ze wszys t-
kich wyra zów z wyjątkiem os tatniego, a nas tępnie s tosujmy ten s am krok wielokrotnie do wyra zów, które 
będą pojawiały się w najgłębs zych nawia sach, a ż pozos tanie jednomian: 

w

n

(x)  = a

0

x

n

 + a

1

x

n–1

 + ... + a

n–1

x + a

n

 = (a

0

x

n–1

 + a

1

x

n–2

+ ... + a

n–1

)x + a

n

 

 

 

 

 

 

 

 

   = ((a

0

x

n–2

 + a

1

x

n–3

 + ... + a

n–2

)x+ a

n–1

)x + a

n

 = 

 

 

 

 

 

 

 

   = (...((a

0

x + a

1

)x+ a

2

)x +... + a

n–2

)x+ a

n–1

)x + a

   

 

 

     (4)

 Przeds taw w postaci (4) nas tępujące wielomiany: 

w(x) = 3x

4

 – x

3

 + 5x

2

 + 7x –  2

w(x) = x

5

 –  x

3

 + 4 x

2

 + 3x – 1

w(x) = x

6

 – x

3

 + x

Zapiszmy teraz spe cyfikację, czyli dokła dny opis  rozwa żanego tutaj problemu:

Problem: Obliczanie wartoś ci wielomianu
Da ne:  

n – nieujemna  liczba  całkowita  – s topień wielomianu; 

 

 

a

0

, a

1

, ... a

n

 – n+1 współczynników wielomianu; 

 

 

z – wartoś ć argumentu. 

Wynik:   Wartoś ć wielomianu (4) s topnia n dla wartoś ci a rgumentu x = z.

Aby  obliczyć  ze  wzoru  (4)  wartoś ć wielomia nu  dla wartości  argumentu z,  należy  pos tę pować nas tępująco 
(y oznacza pomocniczą zmienną ): 

 

 

 

 

 

 

 

 

 

 

y := a

0

 

 

 

 

 

 

 

 

 

 

y := yz + a

1

 

 

 

 

 

 

 

 

 

 

y:= yz + a

2

 

 

 

 

 

 

 

 

 

 

...

 

 

 

 

 

 

 

 

 

 

y:= yz + a

n–1

 

 

 

 

 

 

 

 

 

 

 

y:= yz + a

n

 

Ws zys tkie wiers ze, z wyjątkiem pierws ze go można zapis ać w je dnolity spos ób – otrzymujemy wtedy:

 

 

 

 

 

 

 

 

 

 

y := a

0

 

(5)

 

 

 

 

 

 

 

 

 

 

y: = yz + a

i

   dla  i = 1, 2, ..., n.  

Ten sposób obliczania wartoś ci wielomianu na zywa s ię s che matem Hornera . 

background image

< 8 > 

Informa tyka  + 

Uwaga. W opisie algorytmu pojawiło się polecenie (ins trukcja) 
przypis ania

1

, np. y := a

0

, w której występuje s ymbol :=, złożony 

z  dwóch znaków:  dwukropka  i  równości.  Przypis anie  oznacza 
nadanie wielkoś ci (zmiennej) s tojącej po lewej strony tego s ym-
bolu wartości równej wartości wyrażenia (w szczególnym przy-
padku to wyra żenie może być zmienną ) znajdującego się po pra-
wej s tronie tego s ymbolu. Przypisanie jes t s tos owane na przy-
kład wtedy, gdy należy zmienić wartoś ć zmiennej, np. i := i + 1 
– w tym przypadku ta s ama zmienna wys tępuje po lewej i po 
prawej s tronie s ymbolu przypisania. Polecenie przypis ania wy-
s tępuje  w  większoś ci  języków  programowania ,  stosowane  s ą 
tylko różne s ymbole i ich uproszczenia dla jego oznaczenia. 

Zas tosuj s chema t Hornera do obliczenia wartości wielomianów z ćwicz. 2 w punkcie z = 1. 

Możemy wię c tera z zapis ać:

Algorytm: Schemat Hornera
Dane:  

n – nieujemna liczba ca łkowita (s topień wielomia nu); 

 

 

a

0

, a

1

, ... , a

n

 – n+1 współczynników wielomianu; 

 

 

z – wartość argumentu. 

Wynik:   y = w

n

(z) – wartość wielomianu (4) stopnia n dla wartości argumentu x = z. 

Krok 1.   y := a

0

 – początkową wartością jes t współczynnik przy najwyżs zej p otę dze.

Krok 2.   Dla i = 1, 2, …, n oblicz wartoś ć dwumianu y := yz + a

i

 

Wynika s tąd, że aby obliczyć wartoś ć wielomianu stopnia n wys tarczy wykonać n mnożeń i n dodawań. Udo-
wodniono, że je s t to najs zybs zy spos ób obliczania wartoś ci wielomianu. 

Schemat blokowy algorytmu (zwany również siecią działań lub siecią obliczeń) jes t graficznym opisem: dzia -
łań składających się na  algorytm, ich wzajemnych powią zań i kolejnoś ci ich wykonywania. W informa tyce 
miejs ce schematów blokowych je st pomię dzy opisem algorytmu w pos taci lis ty kroków, a progra mem, napi-
s anym w wybranym ję zyku programowania . Należą one do kanonu wiedzy informatycznej, nie s ą jednak nie -
zbędnym jej elementem, chociaż mogą oka zać s ię ba rdzo przydatne na  początkowym etapie projektowania 
algorytmów i programów komputerowych. Z drugiej s trony, w wielu publikacjach algorytmy są przeds tawia-
ne w pos taci schematów blokowych, pożądana jes t wię c umiejętnoś ć ich odczytywania i rozumienia. Warto 
nadmienić, że ten spos ób reprezentowania algorytmów pojawia się w zadaniach maturalnych z informatyki. 

Na rys . 1 jes t prze ds tawiony s chemat blokowy algorytmu Sche mat Hornera . Jes t on zbudowany z bloków, któ-
rych ks ztałty zależą od rodzaju wykonywanych w nich polece ń. I tak mamy: 

 

blok począ tku i blok końca algorytmu;

 

blok wprowadzania (wczytywania) da nych i wyprowadzania (drukowania) wyników – bloki te mają taki s am 
ks ztałt;

 

 blok operacyjny, w którym są wykonywane operacje przypisania;

 

blok warunkowy, w którym jes t formułowany warunek;

 

blok informacyjny, który może służyć do komentowa nia fragmentów s chematu lub łączenia ze s obą częś ci 
więks zych s chematów blokowych.

Nie is tnieje pe łny układ za s ad poprawnego konstruowania schema tów blokowych. Można natomias t wymie -
nić dość naturalne za sady, wynikające z charakteru bloków: 

1

 Polecenie przypisa nia jes t czas em nazywane niepoprawnie pods ta wieniem

Schemat Hornera został podany przez 
jego autora w 1819 roku, chociaż znacznie 
wcześniej Isaac Newton stosował 
podobną metodę obliczania wartości 
wielomianów w s woich rachunkach 
fizycznych. W 1971 roku, A. Borodin 
udowodnił, że schemat Hornera jes t 
optymalnym, pod względem liczby 
wykonywanych działań, algorytmem 
obliczania wartości wielomianu. 

> Proste rachunki wykonywane za  pomocą  komputera  

< 9 >

 

schemat zawiera dokładnie jeden blok począ tkowy, ale może zwierać wiele bloków końcowych – począ tek 
algorytmu je st je dnoznacznie określony, ale algorytm może się kończyć na wiele różnych sposobów; 

 

z bloków: początkowe go, wprowadzania danych, wyprowadzania wyników, operacyjnego wychodzi 
dokładnie jedno połączenie , może jednak wchod zić do nich wiele połączeń; 

 

z bloku warunkowe go wychodzą dwa połączenia, oznaczone wartoś cią warunku: TAK i NIE; 

 

połączenia wychodzące mogą dochodzić do bloków lub do innych połączeń.

START

Blok początku a lgorytmu

Blok wprowadzania 

danych

Blok wyprowadzenia 

wyniku

Wprowadź liczbę n i n+1 

danych: a

0

, a

1

, a

2

, ..., a

n

oraz z

Blok operacyjny

i := 0

y := a

0

i := i + 1

y := yz + a

i

;

Wyprowa dź: 

wynik y

STOP

Blok zakończenia 

algorytmu

Blok 

warunkowy

Ta k

Nie

i = n

Rysunek 1. 
Realizacja schema tu Hornera w pos taci schematu blokowego

Zakreś l na s chemacie blokowym na rys . 1 fragmenty odpowiadające pos zczególnym kro -

kom w opisie algorytmu Schemat Hornera . Zauwa ż, że ten s chemat blokowy za wiera również fragmen-
ty odpowiadające wczytywaniu danym i wypis ywaniu wyników. 

 Blok wprowadzania danych w s chemacie na rys . 1 polega na wczyta niu liczby n a później 

na wczytaniu n + 1 liczb a

i

. Narysuj s zczegółowy s chemat blokowy te go bloku. 

Schema ty blokowe mają wady, trudne do wyeliminowania . Ła two kons truuje się z ich pomocą algorytmy dla 
obliczeń nie zawierających itera cji i warunków, którym w s chematach odpowiadają rozgałęzienia, nieco trud-
niej dla obliczeń z rozgałęzieniami, a trudniej dla obliczeń iteracyjnych. Za pomocą s chematów blokowych nie 
można w naturalny s posób zapisa ć rekurencji ora z obja śnić znaczenia wielu poję ć zwią zanych z algorytmiką , 
takich np. jak programowanie z użyciem procedur, czyli podprogramów z parame trami. . 

W dals zej czę ści zaję ć rzadko bę dziemy korzys tać ze s chematów blokowych, wystarczy nam bowiem 

umiejętnoś ć programowania . 

background image

< 10 > 

Informa tyka  + 

Schemat Hornera ma wiele za stosowań. Może być wykorzys tany m.in. do: 

 

obliczania wartoś ci dziesiętnej liczb danych w innym s ys temie pozycyjnym (rozdz. 3); 

 

s zybkiego obliczania wartości potęgi (rozdz. 5). 

Zanim podamy komputerową  realizację pierwszego algorytmu – schematu Hornera , musimy ustalić, w jaki 
spos ób bę dą repre zentowane w algorytmie dane i jak bę dziemy je podawać do algorytmu. 

Danymi dla schematu Hornera s ą s topień wielomianu n, zapis ane w pos taci ciągu n + 1 liczb współ-

czynniki wielomianu a

0

, a

1

, a

2

, ..., a

n

 ora z liczba z, dla  której chcemy obliczyć wartoś ć wielomianu. Stopień wie -

lomianu jes t liczbą naturalną (czyli dodatnią liczbą całkowitą ), a pozos tałe liczby mogą być ca łkowite lub rze -
czywis te, czyli np. dzie siętne (tj. z kropką ). Rodzaj danych liczb na zywa się typem danych. Przyjmujemy, że 
poza s topniem wielomianu, pozos ta łe dane s ą rzeczywis te. 

Dla wygody będziemy zakładać, że wiemy, ile będzie danych i ta liczba danych wys tępuje na początku 

danych – jest nią liczba n, s topień wielomianu. 

Zbiór danych, który jes t przetwarzany za pomocą algorytmu, może być podawany (czytany) z klawiatu-

ry, czytany z pliku lub może być zapis any w algorytmie w odpowiedniej strukturze danych. 

Zapis zemy tera z s chemat Hornera posługując się polecenia mi języka Pa s cal (odpowiedni program w ję zyku 
C++ zostanie podany na zaję ciach wars ztatowych). Przyjmujemy na początku, że dane s ą podawane z klawia -
tury – na  początku nale ży wpisać liczbę ws zys tkich danych, a po niej kolejne elementy danych w podanej ilo-
ś ci. Po ka żdej danej liczbie naciskamy klawisz Enter. 

Progra m, który jes t zapis em s chema tu Hornera w języku Pa s cal, je s t umies zczony w drugiej kolum-

nie w tab. 1. Język Pas cal je s t zrozumiały dla  komputerów, które s ą wypos a żone w spe cjalne programy, tzw. 
kompila tory, przekładają ce progra my użytkowników na ję zyk we wnętrzny komputerów. Progra m w tab. 1 
be z więks zego trudu zrozumie ta kże człowiek dysponujący opis em s che matu Horne ra w pos ta ci lis ty kro-
ków. Kilka tylko s łów komenta rza. W wiers zach nr 2 i 3 znajdują s ię deklaracje zmiennych – kompute r mus i 
wiedzie ć, jakimi wielkoś cia mi pos ługuje s ię a lgorytm i ja kie to s ą liczby, czyli jakiego s ą one t ypu –  inte-

ger

 oznacza liczby ca łkowite (np. s topień wielomia nu jes t liczbą ca łkowitą ), real oznacza liczby rze czywi-

s te , czyli np. liczby, które zawie rają  kropkę dzies ie tną. Polecenia w ję zyka ch progra mowa nia na zywa ją się 
ins trukcjami. Je śli chce my z kilku ins trukcji zrobić jedną , to tworzymy z nich blok, umies zcza jąc na je go po-
czą tku słowo begin, a na końcu – end. Pojedyncze ins trukcje kończymy średnikiem. Na końcu programu 
s tawiamy kropkę . Pokrótce to ws zys tkie pods tawowe za s ady pis ania  progra mów w języku Pas cal dla kom-
puterów. 

Jedna ins trukcja wymaga wytłumaczenie,  chocia ż  równie ż jes t doś ć  oczywis ta .  W wiers zach  9  –  12 

znajdują s ię ins trukcje, które realizują Krok 2 algorytmu polegający na wykonaniu je dnej iteracji s chematu 
Hornera . Dodatkowo, wcześ niej jes t czytany kolejny współczynnik wielomianu. Ins trukcja , służąca do wie -
lokrotne go wykonania innych ins trukcji nazywa s ię ins trukcją iteracyjną lub ins trukcją pę tli. W programie 
w tab. 1 ta  instrukcja zaczyna się w wierszu nr 9 a kończy w wiers zu nr 12: 

for i:=1 to n do begin

...

end

Ta ins trukcja iteracyjna , jak napisaliś my, służy do powtórzenia dwóch instrukcji:

 read(a);

 y:=y*z+a 

Inne typy ins trukcji itera cyjnej bę dą wprowadzane sukces ywnie. 

Uwaga.  Poniewa ż  założyliś my,  że  dane  s ą  podawane  z  klawiatury,  zmieniliś my  ich  kolejnoś ć  w  s tosunku 
do specyfikacji – liczba z, dla której jes t obliczana wartość wielomianu, jes t podawa na na począ tku, przed 
współczynnikami wielomianu. 

> Proste rachunki wykonywane za  pomocą  komputera  

< 11 >

Tabela 1. 
Program w ję zyku Pas cal (druga kolumna)

Lp

Program w ję zyku Pa s cal

Odpowiedniki ins trukcji po pols ki

1.

Program Horner;

nazwa programu;

2. 

 var i,n  :integer;

zmienne i,n:   naturalne;

3.

 var a,y,z:real;

zmienne a,y,z: rzeczywiste;

4. 

begin

pocz

ą tek 

5.

 read(n);

 czytaj(n); 

6.

 read(z); 

 czytaj(z); 

7.

 read(a);

 czytaj(a); 

8.

 y:=a;

 pocz

ą tkowa wartoś ć  wielomianu

9.

 for i:=1 to n do begin

 dla i:=1 do n wykonaj pocz

ą tek

10.

  read(a);

  czytaj(a);

11.

  y:=y*z+a 

  modyfi kacja warto

ś ci wielomianu

12 .

 end;

 koniec iteracji;

13.

 write(y)

 drukuj(y) - warto

ś ć  wielomianu

14.

end.

koniec. – na ko

ńcu stawiamy kropkę

W wyniku wykonania te go programu, wypis ywana jes t na ekranie wartoś ć wielomianu y w punkcie z. Ta war-
toś ć jes t wypis ywana w pos taci normalnej, np. liczba 30 jes t wypis ywana jako: 

3.00000000000000E+001

czyli 3.00000000000000

10^ 1. Nie jes t to najwygodniejs za  pos tać liczb, zwła s zcza liczb o nie wielkich war-

toś ciach. Aby wybrać inny format wyprowadzanych liczb, możemy napisać:

write(y:2:2)

co  będzie oznaczać,  że wartoś ć  y  zos tanie  wyś wie tlona  (wydrukowana ,  wyprowadzona) z  dwoma  cyframi 
przed kropką i z dwoma cyframi po kropce. 

 Uruchom program Horner i wykona j obliczenia  dla wybranego wielomianu i kilku je go 

argumentów. 

Zmodyfikujemy teraz nas z pierwszy program tak, aby: 

 

stopień i współczynniki wielomianu były czytane na począ tku i przechowywane w programie 
– do przechowania w programie współczynników użyjemy tablicy, która  je st s ynonimem ciągu w ję zyku 
programowania; 

 

można było liczyć wartoś ć wielomianu o wczytanych współczynnikach dla wielu argumentów – zakładamy 
w tym celu, że ciąg argumentów jes t zakończony liczbą  0 (jes t to tak zwany wartownik ciągu, gdyż jego rolą 
jes t pilnowanie końca cią gu). 

Za głębiające 
się bloki 
ins trukcji

background image

< 12 > 

Informa tyka  + 

Przy tych za łożeniach, program będący implementacją

2

 s chema tu Hornera , może mie ć na s tępującą pos tać: 

Program Horner_ tablica;

 var i,n:integer;

     y,z:real;

     a  :array[0..100] of real;

     {Przyjmujemy, ze wielomian ma stopien co najwyzej 100}

begin

 read(n);

 for i:=0 to n do read(a[i]);

 writeln(’z     y‘);

 read(z);

 while z <> 0 do begin

  y:=a[0];

  for i:=1 to n do

   y:=y*z+a[i];

  write(’   ‘,y:2:5);

  writeln;

  read(z)

 end

end.

Skomentowania wymaga  użyta ins trukcja warunkowa:

 while z <> 0 do begin

  y:=a[0];

  for i:=1 to n do

   y:=y*z+a[i];

  write(’   ‘,y:2:5);

  writeln;

  read(z)

 end

W bloku tej instrukcji jes t wykonywany s chemat Hornera dla kolejnych wartości argumentu z tak długo, jak 
długo czytana liczba z je st różna od 0 (z <> 0). 

Dodatkowo, w programie wprowa dziliśmy drukowanie wyników w pos taci tabelki. 

 Uruchom program Horner _tablica i wykonaj obliczenia dla wybranego wielomianu 

i kilku jego argumentów. Popraw wygląd wyników. 

Binarne rozwinię cie dziesiętnej liczby naturalnej (prawa strona we wzorze (2)) przypomina s woją postacią wie -
lomian (patrz wzór (3)), gdzie a jes t wartością wielomianu stopnia n – 1 o współczynnikach b

n–1

, b

n–2

, ..., b

1

, b

0

 

należących do zbioru {0, 1}, dla wartoś ci argumentu x = 2. Z tej interpretacji rozwinięcia (2) wynika spos ób ob-
liczania dziesiętnej wartoś ci liczby naturalnej a, gdy jest dane jej binarne rozwinięcie (b

n–1

b

n–2

 ... b

1

b

0

)

2

. Wys tar-

czy zas tos ować schemat Hornera, który dla wielomianu, danego wzorem (2), przyjmuje nas tępującą pos tać: 

a  = b

n–1

2

n–1

 + b

n–2

2

n–2

 + ... + b

1

2

1

 + b

0

2

0

 

 

 

 

 

 

 

 

 

 

 

     = (...(b

n–1

2 + b

n–2

)2 + ... + b

1

)2 + b

0

      

 

 

    (6)

2

 Terminem implementacja okreś la się w informat yce realizację algorytmu w pos taci programu komputerowego.

> Proste rachunki wykonywane za  pomocą  komputera  

< 13 >

 Napis z program służący do obliczania dziesię tnej wartoś ci liczby a danej w pos taci binar-

nego rozwinięcia (b

n–1

b

n–2

 ... b

1

b

0

)

2

Wska zówka . Zmodyfikuj odpowiednio  program  Hornera _tablica.  Zwróć uwagę,  że kolejne  cyfry 
rozwinięcia binarnego liczby w pos taci (2) s ą ponumerowane odwrotnie niż współczynniki wielomianu 
we wzorze (3) i zauwa ż przy tym, że indeks współczynnika odpowiada potędze liczby 2, przed którą s toi 
ten współczynnik. Nie powinno to je dnak utrudnić Ci wykonania tego ćwiczenia. 

Pos tać rozwinięcia binarnego (6) sugeruje bardzo pros ty spos ób oblicza nia  wartoś ci liczby a  za pomocą kal-
kulatora . 

Oblicz za pomocą kalkulatora dziesiętną  wartoś ć liczby a, prze ds tawionej w pos taci roz-

winięcia binarnego. Wykorzys taj algorytm wynikający z pos taci (6). Zauwa ż, że nie musis z korzystać 
z doda tkowej pamię ci kalkulatora. 
Wska zówka . Możes z skorzys ta ć z kalkulatora dos tę pne go wś ród akces oriów środowiska  Windows. 

Ws zys tkie fakty podane powyżej przenos zą się na rozwinięcia liczby w s ys temie przy dowolnej pods ta wie p. 

 Zmodyfikuj program na pis any w ćwicz. 8 tak, aby mógł być s tos owa ny do obliczania  

dziesiętnej wartoś ci liczby a danej w pos taci rozwinięcia przy pods tawie p. 

Interes uje nas tera z czynnoś ć odwrotna – otrzymanie binarnego rozwinię cia dla danej dzie siętnej liczby na-
turalnej a. 

Zauwa żmy, że we wzorze (2), czyli w binarnym przedstawieniu liczby a, wszys tkie składniki z wyją tkiem 

os tatniego s ą podzielne prze z 2, a zatem ten os tatni składnik, czyli b

0

 jes t res ztą z dzielenia liczby a przez 2. 

Bity b

1

, b

2

,..., to res zty z dzielenia przez 2 kolejno otrzymywa nych ilora zów. Dzielenie kończymy, gdy ilora z 

wynos i 0, gdyż wtedy kolejne re szty będą już cały cza s równe 0, a zera na początku rozwinięcia binarnego nie 
mają żadne go znaczenia . Prześledź ten proces  na przykładzie z rys . 2.

dzielenie 

iloraz 

res zta

 

749 | 2 

374 

1

 

374 | 2 

187 

0

 

187 | 2 

93 

1

 

93 | 2 

46 

1

 

46 | 2 

23 

0

 

23 | 2 

11 

1

 

11 | 2 

1

 

5 | 2 

1

 

2 | 2 

0

 

1 | 2 

1

Rysunek 2. 
Przykład tworzenia binarnej reprezentacji liczby dziesię tnej 749. Otrzymaliś my 749 = (1011101101)

2

Zauwa żmy, że w powyżs zym algorytmie binarna repre zenta cja liczby je st tworzona od końca , czyli od naj-
mniej znaczące go bitu. 

background image

< 14 > 

Informa tyka  + 

Wprowadzimy tera z dwie operacje, wykonywane na liczbach całkowitych, których wyniki s ą również liczbami 
ca łkowitymi, a które s ą przydatne przy obliczaniu ilora zu i res zty z dzielenia liczb ca łkowitych przez siebie.

Dla dwóch liczb całkowitych k i l definiujemy: 

 r = k 

mod l –  r jes t res ztą z dzielenia k przez l, czyli r spełnia nierównoś ci 0 ≤ r < l, gdyż res zta jes t nie-

ujemną liczbą mniejs zą od dzielnika; 

 q = k 

div l –  q jes t ilorazem całkowitym z dzielenia k przez l, czyli q jes t wynikiem dzielenia k przez l 

z pominięciem części ułamkowej. 

Z definicji tych dwóch operacji wynika nas tępująca równoś ć: 

 

 

 

 

 

 

 

 

 

 

k = l

q + r = l

(k div l) + (k mod l).   

   

 

 

     (7)

Upe wnij się, że dobrze rozumiesz te dwie operacje, które czę s to wys tępują w obliczeniach komputerowych 
na liczbach całkowitych. 

Dla  liczby naturalnej l = 6 i dla liczby naturalnej k, zmieniającej się od 0 co 1 do 20 oblicz 

wartości k div l ora z k mod l i sprawdź prawdziwość równości (7). 

Przyjmij, że l = 2, a więc intere suje nas  ilora z i res zta z dzielenia liczby na turalnej k prze z 

2. Podaj, w zależnoś ci od parzys toś ci liczby k, ile wynosi k mod 2 ora z k div 2.

Dotychcza s owa dyskusja prowadzi nas  do na s tę pującego algorytmu:

Algorytm: Zamiana dzies ię tnej liczby naturalnej na pos tać binarną
Dane:  

Dziesiętna liczba naturalna a.

Wynik:  Cią g bitów, tworzących binarne rozwinięcie liczby a , w kolejności od najmniej znaczącego bitu. 
Krok 1.  Powta rzaj krok 2 dopóki a jes t liczbą więks zą od zera , w prze ciwnym ra zie zakończ algorytm. 
Krok 2.  Za kolejny bit (od końca) rozwinię cia przyjmij: a mod 2 i przypisz: a := a div 2. 

Poniżej prze ds tawiamy implementację te go algorytmu w języku Pa scal. 

Program Rozwiniecie_ binarne;

 var a:integer;

begin

 read(a);

 while a <> 0 do begin

  write(a mod 2,’ ‘);

  a:=a div 2

 end

end.

 W powyżs zym programie , kolejne bity rozwinięcia binarnego liczby a s ą wypis ywane 

w kolejnoś ci od najmniej znaczą cego, a więc odwrotnie, niż to się przyjmuje. Zmodyfikuj ten program 
tak, aby binarne rozwinię cie danej liczby było wyprowadzane od najbardziej znaczące go bitu. 
Wska zówka . Pos łuż się tablicą , w której będą przechowywane kolejno generowane bity. 

Os oby, które nie znają  logarytmu, mogą opuścić ten podpunkt. 

Liczby w komputerze są zapis ywane w pos taci binarnej. Intere sujące je st więc pytanie, ile miejs ca w kompu-
terze, czyli ile bitów, zajmuje liczba  naturalna a w pos taci binarnej. Odpowiedź na to pytanie jes t bardzo wa ż-
na w informa tyce , nawet dzisiaj, kiedy można korzystać z niemal nieograniczonej pamięci komputerów i nie 
trzeba się obawiać, że jej za braknie.

> Proste rachunki wykonywane za  pomocą  komputera  

< 15 >

Najpierw rozwa żymy odwrotne pytanie: Jaką  najwięks zą liczbę naturalną można zapis ać na  n bitach? Liczba 
taka ma ws zys tkie bity równe 1 w s woim rozwinięciu binarnym (11...11)

2

, a więc jej wartoś ć, jako suma  n po-

czą tkowych wyra zów ciągu geometrycznego z ilora zem równym 2, wynosi: 

2

n–1

 + 2

n–2

 + ... + 2

1

 + 2

0

 = (1 – 2

n

)/ (1 – 2) = 2

n

 – 1

Ta równoś ć ma ciekawą interpreta cję. Wa rtoś ć s umy po lewej s tronie jes t liczbą o jeden mniejs zą od liczby 
(100...00)

2

, która w rozwinięciu binarnym s kłada s ię z n+1 bitów i ma tylko jeden bit równy 1 – najbardziej 

znaczący. Tą liczbą je st 2

n

. Na rys. 3 poka za no, ile bitów potrzeba do przedstawienia w pos taci binarnej liczb 

z pos zczególnych przedzia łów. Z os tatniej równoś ci wynika, że liczba a może być zapis ana na n bitach, jeśli 
spełnia nierównoś ć:

2

n

 –  1 ≥ a ,        czyli        2

n

 ≥ a + 1.

Dla danej liczby a wybieramy najmniejsze n s pełniające tę nierównoś ć, gdyż początkowe zera w rozwinię ciu 
liczby nie mają znaczenia . Logarytmują c obie s trony nierówności można dokładnie okreś lić wartoś ć n:

n = 

 

log

2

(a + 1) 

Użyliśmy funkcji powała, której wartością jes t najmniejs za liczba całkowita więks za od liczby s tojącej pod 
powałą, gdyż liczba bitów w rozwinięciu liczby a jes t zaws ze liczbą naturalną , a wartoś ć logarytmu może nie 
być liczbą ca łkowitą, 

końce podzia łów  

15 

31 

63 

= 2

n

 – 1

liczba bitów n  

6

Rysunek 3. 
Liczba bitów potrzebnych do zapamię tania liczb a z pos zczególnych przedzia łów

Z powyżs zych rozwa żań należy zapamiętać, że liczba bitów potrzebnych do zapamię tania w komputerze licz-
by na turalnej jes t w przybliżeniu równa logarytmowi przy podstawie 2 z wartoś ci tej liczby. na  przykład, licz-
ba 1000 jes t pamię tana  na  log

2

(1000 + 1)  = 10 bitach. 

Przy tej oka zji porównaj s zybkoś ć wzra s tania funkcji liniowej i funkcji logarytmicznej. 

Narysuj w jednym układzie ws półrzędnych wykres y dwóch funkcji, logarytmicznej i li-

niowej. Utwórz także tabelę wartoś ci obu funkcji dla liczb wybra nych z prze działu [1, 10

9

]. Zauwa ż, jak 

wolno rośnie funkcja logarytmiczna w porównaniu z funkcją liniową . 

Funkcja logarytmiczna odgrywa bardzo wa żną rolę w informatyce. 

Binarna reprezentacja liczb naturalnych je st źródłem s zybkich metod obliczania wartości potę gi x

m

, gdzie m 

jes t liczbą naturalną , a x może być dowolną liczbą rzeczywis tą (wartoś ć pods ta wy x nie ma znaczenia dla na-
szych rozwa żań). Metody te znajdują zas tos owanie w algorytmach kryptogra ficznych, w których s ą obliczane 
wartoś ci potęg o bardzo dużych wykładnika ch. 

Posłużmy  się najpierw przykładem. Przypuś ćmy, że  chcemy obliczyć wartoś ć potęgi. x

22

. Pros te wy-

mnożenie pods tawy prze z siebie x

22

 = x

x

...

x to 21 mnożeń. A skorzys tajmy z binarnej reprezentacji wykład-

nika potęgi. Można go przeds tawić jako sumę potęg liczby 2: 

22 = 2 + 4 + 16 = 2

1

 + 2

2

 + 2

4

 

background image

< 16 > 

Informa tyka  + 

wtedy na s za potę ga  przyjmuje pos ta ć x

22

 = x

2+4+16

 = x

2

x

4

x

16

 i można ją obliczyć wielokrotnie podnos ząc do 

kwadra tu pods ta wę x i mnożąc prze z siebie odpowie dnie czynniki. Dla potę gi 22 obliczanie potęgi przebie -
ga na s tępująco: x

2

, x

4

 = (x

2

)

2

, x

8

 = (x

4

)

2

, x

16

 = (x

8

)

2

 i mnożymy prze z siebie x

2

x

4

x

16

. W sumie wykonuje my 6 

mnożeń (podniesienie do kwadra tu wymaga  wykona nia jedne go mnożenia). 

Korzys tają z przeds tawienia wykładnika w repre zentacji  bina rnej 22 = (10110)

2

 w postaci s chematu 

Hornera , wykładnik można  zapis ać 22 = 1

2

4

 + 0

2

3

 + 1

2

2

 + 1

2

1

 + 0

2

0

 = (((2 + 0)2 +1)2 + 1)2 + 0, a s tąd otrzy-

mujemy: 

x

(((2 + 0)2 +1)2 + 1)2 + 0

 = (x

((2 + 0)2 +1)2 + 1

)

 = (x

((2 + 0)2 +1)2

x)

2

 = (x

(2 + 0)2 +1

)

2

x)

2

 

= (x

(2 + 0)2

x)

2

x)

2

 = (x

(2 + 0)

)

2

x)

2

x)

2

 = (((x

2

)

2

x)

2

x)

2

Korzys tając z tego zapisu, potęgę x

22

 obliczamy wykonując kolejno na s tępujące mnożenia: x

2

, x

4

 = (x

2

)

2

, x

5

 = 

x

4

x, x

10

 = (x

5

)

2

, x

11

 = x

10

x, x

22

 = (x

11

)

2

. W s umie wykonujemy równie ż 6 mnożeń. 

W oparciu o jedną i drugą metodę nas zkicowaną powyżej, podaj kolejnoś ć wykonywania 

mnożeń podcza s obliczania wartości potę gi x

313

. Ile mnożeń jes t wykonywanych w obu przypadkach?   

Obie metody potęgowania korzys tają z binarnego rozwinię cia wykła dnika , ale różnią się tym, że w pierws zym 
przypadku to rozwinięcie jes t przeglądane od najmniej znaczące go bitu (mówimy o metodzie od prawej do le -
wej), a w drugim – od najbardziej znaczącego (czyli metodą od lewej do prawej). Poniewa ż reprezentacja bi-
narna liczby naturalnej jes t tworzona od najmniej znaczącego bitu (zob. rozdz. 4), podamy tera z algorytm ob-
liczania wartoś ci potęgi, który wykonuje potęgowanie rozkładając wykładnik na pos ta ć binarną (pos tać ta 
jednak nie je st zachowywana  w algorytmie). Szybkie potę gowanie, wykorzystujące s chemat Hornera pozo-
s tawiamy do s amodzielne go wykona nia. 

Binarny algorytm potę gowania „od prawej do lewej”
Dane:  

Liczba na turalna m i dowolna  liczba x. 

Wynik:  Wartość potę gi y = x

m

Krok 0.   {Us talenie początkowych wartości potę gi y i zmiennych pomocniczych z i l.}
 

 

y := 1: 

l := m;   z := x;

Krok 1.   Jeśli l mod 2 = 1 (czyli l jes t liczbą  nieparzystą ), to y := y

z; 

Krok 2.   l := l div 2; je śli l = 0, to zakończ algorytm – wynikiem jes t bie żąca wartość y.
Krok 3.   z := z

z; wróć do kroku 1. 

Wykonaj powyższy algorytm dla m = 22 i m = 313. Wypis z kolejne wartoś ci zmiennych 

y, l, z i porównaj kolejne wartości zmiennej y z wcześniej otrzymanymi wartoś cia mi potę gi dla tych war-
toś ci wykładnika . 

Napis z program w języku Pas cal, bę dący realizacją algorytmu podnos zenia  do potęgi 

„od prawej do lewej”. Jako wynik, dla danego wykładnika m, wyprowadzaj liczbę mnożeń wykonywa -
nych w tym algorytmie dla obliczenia wartoś ci x

m

Szybkie algorytmy potę gowania s ą s tos owane w algorytmach s zyfrujących, w których wykła dniki potęg s ą 
bardzo dużymi liczbami.

Przeds ta wiamy w tym punkcie algorytm, który wś ród przepis ów opa trywanych tych mianem, zos tał odkryty 
jako jeden z na jwcześniejs zych, bo jes zcze w s tarożytności, prze z Euklides a .

> Proste rachunki wykonywane za  pomocą  komputera  

< 17 >

Danymi  s ą  dwie  nieujemne  liczby  cał-
kowite  m  i  n.  Liczba  k  jes t 

najwięk-

szym wspólnym dzielnikiem m i n, je-
śli dzieli m oraz n i je st najwięks zą licz-
bą o tej wła sności — oznaczamy ją przez 
NWD(m,n). 

Algorytm  Euklides a  jest 

najs tars zą  me todą   znajdowania  naj-
więks ze go  wspólnego  dzielnika  dwóch 
liczb (patrz ramka obok). 

Pierws zą metodą , jaka może przyjś ć na myśl, gdy chcemy znale źć najwięks zy wspólny 

dzielnik dwóch danych liczb m i n, je st sprawdzanie podzielnoś ci tych liczb przez kolejne liczby natu-
ralne, począws zy od 2, a s kończyws zy na mniejs zej z m i n. Ile dzieleń na leży wykonać, aby obliczyć tą  
metodą NWD(24,48) ora z NWD(46,48)? A dla dowolnych m i n? Opis z tę metodę w pos taci algorytmu 
w wybranej przez s iebie reprezentacji. Możes z opis ać tę metodę w pos ta ci programu komputerowego. 

Nie możes z być chyba zadowolony z efektywnoś ci tego algorytmu, zwła s zcza dla przykładowych danych licz-
bowych — w pierws zym przypadku, gdy jedna z liczb dzieli drugą, od ra zu widać, że ta mniejs za jes t pos zu-
kiwanym największym wspólnym dzielnikiem obu liczb. A je śli żadna z liczb nie dzieli drugiej, tak jak w dru-
gim przypadku? 

Załóżmy, że n ≥ m . Wtedy dzielą c n przez m otrzymujemy nas tępującą równoś ć: 

 

 

 

 

 

 

 

 

 

n = qm + r,      gdzie      0 ≤ r < m   

 

 

   

  

 

    (8)

Wielkoś ci q i r s ą odpowiednio ilorazem i res ztą z dzielenia n prze z m. Dla danych z ćwicz. 17, równoś ć (8) 
przyjmuje pos tać: 48 = 2

24 i 48 = 1

46 + 2. Wynikają s tąd na s tępujące wnioski: 

 

jeśli r = 0, to NWD(m,n) = m, czyli jeśli jedna z liczb dzieli drugą bez res zty, to mniejsza z tych liczb jes t ich 
najwięks zym wspólnym dzielnikiem;

 

jeśli r ≠  0, to równoś ć (8) można zapisać w pos taci r = n – qm; a s tąd wynika, że ka żda liczba dzieląca 
n i m dzieli ca łe wyra żenie po pra wej s tronie tej równoś ci, a więc dzieli również r; zatem, najwięks zy 
wspólny dzielnik m i n dzieli również res ztę r. 

Te dwa wnioski można zapisa ć w postaci na s tępującej równoś ci: 

NWD(m,n) = NWD(r,m), 

w której przyjęliś my, że NWD(0,m) =  m, gdyż 0 jes t podzielne prze z ka żdą liczbę różną  od zera. 
Za stosujmy tera z tę obserwację do obliczenia NWD(25,70). Otrzymamy: 

NWD(25,70) = NWD(20,25) = NWD(5,20) = NWD(0,5) = 5,

gdyż stos ując równoś ć (8) otrzymujemy kolejno:

70 = 2

25 + 20

25 = 1

20 + 5

20 = 4

5

Euklides stosował swój algorytm do znajdowania najdłuższego 
odcinka mieszczącego się całkowitą liczbę razy w dwóch danych 
odcinkach. Było to około 300 roku p.n.e., na długo 
przed pojawieniem się określenia algorytm.
Algorytm Euklidesa jest jednym z najczęściej przytaczanych 
algorytmów w książkach informatycznych i matematycznych. 
Powodem jest nie tylko szacunek dla jego „wieku”, ale to, że ma 
wiele zastosowań w rozwiązywaniu problemów rachunkowych 
i posługując się nim, można ilustrować wiele podstawowych pojęć 
i własności informatycznych. 

background image

< 18 > 

Informa tyka  + 

Powyżs ze pos tępowanie zaws ze się kończy, bo pierwszy element w parze argumentów funkcji NWD maleje, 
gdyż jes t to reszta . 

Możemy tera z przedstawić opis algorytmu Euklide sa . Zauwa żmy jes zcze, że ilora z q z równoś ci (8) nie wys tę -
puje w na s tępnych iteracjach tej równoś ci, zatem nie trzeba go wyznaczać. 

Algorytm Euklide sa (z dzieleniem) wyznaczania NWD
Dane:  

Dwie liczby naturalne m i n, .

Wynik:  NWD(m,n) — najwięks zy wspólny dzielnik m i n.
Krok 1.  Jeś li m = 0, to n jes t szukanym dzielnikiem. Zakończ algorytm.
Krok 2.   r := n mod m,  n := m,  m := r. Wróć do kroku 1. 

Nas tępne ćwiczenie zwraca uwagę, że dla  pe wnych liczb algorytm Euklidesa wykonuje dużo iteracji. 

Za s tos uj algorytm Euklides a do liczb 34 i 55. Co ciekawego możes z powiedzie ć o dzia -

łaniu algorytmu w tym przypadku – ile wynos zą kolejne ilorazy? Wypis z od końca ciąg res zt tworzo-
nych w tym przypadku. Jak inaczej można zdefiniować ten cią g? Podaj inną parę liczb, dla której algo-
rytm Euklides a dzia ła podobnie. 

Zapis zemy tera z algorytm Euklides a w pos taci programu: 

program Euklides;

 var m,n,r:integer;

begin

 read(m,n);

 while m>0 do begin

  r:=n mod m;

  n:=m;

  m:=r

 end;

 write(n)

end.

Zapis zemy tera z algorytm Euklides a w pos taci wydzielonej funkcji NWD, której wartoś cią jes t wła śnie najwięk-
s zy wspólny dzielnik dwóch liczb, będących a rgumentami tej funkcji. 

program Euklides_funkcja; 

 var m,n:integer;

 function NWD(m,n:integer):integer;

  var r:integer;

 begin

  while m>0 do begin

   r:=n mod m; n:=m; m:=r

  end; 

  NWD:=n

 end; {NWD}

begin 

 read(m,n); 

 writeln(NWD(m,n))

end.{Euklides_funkcja}

W nagłówku funkcji, po jej nazwie 
i parametrach, podaje się typ wyniku 
funkcji i średnik. 

W tres ci funkcji wys tępuje ins trukcja 
przypis ania  na zwie funkcji jej wartoś ci.

> Proste rachunki wykonywane za  pomocą  komputera  

< 19 >

Is tnieje jes zcze wiele innych implementacji a lgorytmu  Euklides a, np.  wykonujących odejmowanie zamia s t 
dzielenia. Je dna z najciekaws zych implementacji wykorzys tuje tzw. rekurencję, czyli funkcję, która odwołu-
je się do siebie. 

program Euklides_ rekurencja;

 var m,n:integer;

 function NWD_rek(m,n:integer):integer;

 begin

  if m>n then NWD_ rek:=NWD_rek(n,m)

  else if m = 0 then NWD _rek:=n

       else NWD _rek:=NWD_ rek(n mod m,m)

 end;

begin

 read(m,n);

 writeln(NWD _rek(m,n))

end.

Zapoznaj się z przeds tawionymi implementacjami algorytmu Euklides a, uruchom te pro-

gramy i przetes tuj je na wybranych parach liczb naturalnych, w tym m.in. na parze liczb 34 i 55. 

Ten rozdział jes t krótkim wprowadzeniem do zajęć w module „Algorytmika i programowanie”. Krótko wyja-
śniamy  w  nim  pods tawowe  pojęcia ora z  s tos owane  na  zajęciach  podejś cie  do  rozwią zywania  problemów 
z pomocą komputera . 

Pows zechnie przyjmuje się , że algorytm jes t opis em krok po kroku rozwią zania pos tawionego problemu lub 
sposobu os iągnięcia jakiegoś celu. To poję cie wywodzi się z matematyki i informatyki – za pierws zy algorytm 
uznaje się bowiem a lgorytm Euklidesa (patrz rozdz. 6), podany ponad 2300 lat temu. W os ta tnich latach algo-
rytm s tał się bardzo popularnym s ynonimem przepisu lub ins trukcji postępowania . 

W s zkole, algorytm pojawia się po ra z pierws zy na lekcjach matematyki już w s zkole pods tawowej, na  

przykład jako algorytm pisemnego dodawania dwóch liczb, wiele klas  wcześniej, zanim s taje s ię przedmio-
tem zajęć informatycznych. 

O znaczeniu algorytmów w informatyce może ś wiadczyć nas tępujące określenie, przyjmowane za de -

finicję informatyki: 

informatyka jes t dziedziną wiedzy i działa lności zajmują cą się algorytmami

W tej definicji informa tyki nie ma dużej przes ady, gdyż zawarte s ą w niej pośrednio inne pojęcia s tosowane 
do definiowania informatyki: komputery – jako urządzenia wykonujące odpowie dnio dla nich zapis ane algo-
rytmy (czyli niejako wprawiane w ruch algorytmami); informacja – jako materiał przetwa rzany i produkowa-
ny prze z komputery; programowanie – jako zes pół metod i środków (np. języków i s ys temów użytkowych) do 
zapis ywania algorytmów w pos taci programów. 

Położenie nacisku w poznawaniu informatyki na algorytmy je st jes zcze uza s adnione tym, że zarówno 

kons trukcje komputerów, jak i ich oprogramowanie bardzo szybko s ię s tarzeją , natomia s t pods tawy s toso-
wania komputerów, które s ą przedmiotem zainteresowań algorytmiki, zmieniają się bardzo powoli, a niektó-
re z nich w ogóle nie ule gają zmianie. 

Algorytmy, zwła s zcza w s woim popularnym znaczeniu, wys tępują ws zę dzie wokół nas  – niemal każdy 

ruch człowieka , zarówno anga żujący jego mięśnie , jak i bę dący je dynie działaniem umysłu, jes t wykonywany 
we dług jakiegoś przepisu pos tępowania, które go nie zaws ze jes te śmy nawet ś wiadomi. Wiele nas zych czyn-

background image

< 20 > 

Informa tyka  + 

noś ci potrafimy wyabs trahować i poda ć w pos taci precyzyjne go opisu, a le w bardzo wielu przypadkach nie 
potrafimy nawet powtórzyć, jak to się dzieje lub jak to się stało

3

.

Nie ws zys tkie pos tę powania z na s zego otoczenia, na zywane algorytmami, s ą ś ciśle zwią zane z kom-

puterami i nie ws zys tkie przepis y działań można uznać za algorytmy w znaczeniu informatycznym. Na przy-
kład nie są nimi na ogół przepis y kulinarne, chocia ż odwołuje się do nich David Harel w s woim fundamental-
nym dziele o algorytmach i algorytmice [3]. Otóż przepis np. na s porządzenie „ciągutki z wiśniami”, którą za -
chwycała się Alicja w Krainie Czarów, nie jes t algorytmem, gdyż nie ma dwóch osób, które na je go podstawie , 
dys ponując tymi s amymi produktami, zrobiłyby taką  s amą, czyli jednakowo smakującą ciągutkę. Nie może 
być bowiem algorytmem przepis , który dla identycznych danych daje różne wyniki w dwóch różnych wykona -
niach, jak to najczęś ciej bywa w przypadku robienia potraw według „algorytmów kulinarnych”. 

Algorytmika  to  dział  informa tyki,  zajmujący  się  różnymi  aspektami tworzenia  i  analizowania  algorytmów, 
przede ws zys tkim w odnie sieniu do ich roli jako precyzyjnego opisu postę powania , mającego na celu znale -
zienie rozwią zania pos ta wionego problemu. Algorytm może być wykonywany przez człowieka , przez kompu-
ter lub w inny sposób, np. przez specjalnie dla niego zbudowane urządzenie. W os tatnich la tach pos tęp w roz-
woju komputerów i informatyki był nierozerwalnie zwią zany z rozwojem cora z doskonals zych algorytmów. 

Informatyka jes t dziedziną zajmującą się rozwią zywaniem problemów z wykorzys taniem komputerów. 

O znaczeniu algorytmu w informatyce może ś wiadczyć fakt, że każdy program komputerowy działa zgodnie 
z jakimś  algorytmem, a  więc zanim  zadamy komputerowi nowe zadanie do wykonania  powinniśmy umie ć 
„wytłumaczyć” mu dokładnie, co ma robić. Bardzo trafnie to sformułowa ł Donald E. Knuth, je den z najznako-
mits zych, żyją cych informatyków:

Mówi się często, że człowiek dotąd nie zrozumie czegoś ,

za nim nie nauczy tego – kogoś innego.

W rzeczywistości,

człowiek nie zrozumie czegoś naprawdę,

za nim nie zdoła nauczyć tego – komputera .

Staramy s ię, by pre zentowane algorytmy były jak najpros ts ze i by dzia łały jak najs zybciej. To os tatnie żądanie 
może wydawa ć się dziwne , przecie ż dys ponujemy już teraz bardzo s zybkimi komputerami i s zybkoś ć działa -
nia  proces orów s tale rośnie (według prawa Moore’a podwaja się co 18 mie sięcy). Mimo to is tnieją problemy, 
których obe cnie nie jes t w s tanie rozwią zać żaden komputer i zwięks zenie szybkoś ci komputerów nie wiele 
pomoże , kluczowe wię c s taje się opracowywanie cora z s zybs zych algorytmów. Jak to ujął Ralf Gomory, s zef 
oś rodka badawczego IBM: 

Najleps zym sposobem przyspieszania komputerów 

jest obarczanie ich mniejs zą liczbą  dzia łań. 

Komputer jest s tosowany do rozwią zywania problemów zarówno przez profesjonalnych informatyków, którzy 
projektują i tworzą oprogramowanie, jak i przez tych, którzy stosują tylko technologię informacyjno-komuni-
kacyjną , czyli nie wykraczają poza posługiwanie się gotowymi narzędziami informatycznymi. W obu przypad-
kach ma zas tos owanie podejście do rozwiązywania problemów algorytmicznych, która polega na s ystema -
tycznej pracy nad komputerowym rozwią zaniem problemu i obejmuje cały proces projektowania i otrzymania 
rozwiązania. Celem nadrzędnym tej metodologii jes t otrzymanie dobrego rozwią zania, czyli takiego, które jes t: 

 

zrozumiałe dla każdego, kto zna dziedzinę rozwiązywanego problemu i użyte narzę dzia komputerowe, 

 

poprawne , czyli spe łnia specyfikację problemu, a więc dokładny opis problemu, 

 

efekt ywne , czyli niepotrzebnie nie marnuje za s obów komputerowych, cza su i pamięci. 

3

 Interes ująco ujął to J. Nievergelt – Jest tak, jakby na przykład stonoga chciała wyjaśnić, w jakiej kolejności wpra wia w ruch 

swoje nogi, ale z przera żeniem stwierd za, że nie może iść dalej.  

> Proste rachunki wykonywane za  pomocą  komputera  

< 21 >

Ta metoda składa się z na s tępujących s ze ściu etapów: 

1.  Opis  i analiza s ytuacji problemowej. Na pods ta wie opisu i analizy s ytuacji problemowej należy w pe łni zro-

zumieć, na czym polega problem, jakie s ą dane dla problemu i jakich oczekujemy wyników, ora z jakie s ą 
możliwe ograniczenia. 

2.  Sporządzenie specyfikacji problemu, czyli dokładnego opis u problemu na pods ta wie rezultatów etapu 1. 

Specyfikacja problemu zawiera: 

 

opis danych, 

 

opis wyników, 

 

opis relacji (powią za ń, zale żności) między danymi i wynikami. 

Specyfikacja jes t wykorzystana w następnym etapie jako specyfikacja tworzonego rozwią zania (np. programu). 

3.  Zaprojektowanie rozwią zania . Dla sporządzonej na poprze dnim e tapie specyfikacji problemu, je st projek-

towane rozwią zanie komputerowe (np. program), czyli wybierany odpowiedni algorytm i dobierane do nie go 
struktury danych. Wybierane jes t także środowisko komputerowe (np. język programowania), w którym bę -
dzie realizowane rozwią zanie na komputerze. 

4.  Komputerowa realizacja rozwią zania. Dla projektu rozwią zania , opracowanego na poprzednim eta pie, jes t 

budowa ne kompletne rozwią zanie komputerowe, np. w pos taci programu w wybranym ję zyku programowa -
nia. Na s tępnie, te stowana jes t poprawnoś ć rozwiązania komputerowe go i badana jego efektywnoś ć działa-
nia na różnych danych. 

5.  Te s towanie rozwiązania. Ten etap jest poś więcony na s ys tematyczną weryfikację poprawnoś ci rozwią zania 

i tes towanie jego włas ności, w tym zgodności ze specyfikacją . 

6.  Prezentacja rozwią zania . Dla otrzymanego rozwią zania nale ży jeszcze opracować dokumentację i pomoc 

dla (innego) użytkownika. Cały proces rozwią zywania problemu kończy pre zentacja innym zainteres owanym 
os obom (uczniom, nauczycielowi) spos obu otrzymania rozwią zania ora z s amego rozwiązania wra z z doku-
mentacją . 

Chocia ż powyżs za metodologia jes t s tos owana głównie do otrzymywania komputerowych rozwią za ń, które 
mają pos tać programów napis anych w wybranym ję zyku programowania , może być zas tos owana również do 
otrzymywania rozwiązań komputerowych wię ks zoś ci problemów z obszaru za s tos owań informa tyki i posłu-
giwania się technologią informacyjno-komunikacyjną

4

, czyli gotowym oprogramowaniem. 

Dwie uwagi do powyżs zych rozwa żań.

Uwaga 1. Ws zys cy, w  mniejszym lub więks zym s topniu, zmagamy się z problemami, pochodzącymi z róż-
nych dziedzin (przedmiotów). W na s zych rozwa żaniach, problem nie jes t je dnak wyzwaniem nie do pokona -
nia, przyjmujemy bowiem, że problem jes t s ytua cją , w której uczeń ma przeds tawić jej rozwią zanie ba zując na 
tym, co wie , ale nie ma powiedziane, jak to ma zrobić. Problem na ogół zawiera pewną trudnoś ć, nie je st ru-
tynowym zadaniem. Na takie s ytuacje problemowe rozs zerzamy pojęcie problemu, wymagającego przedsta -
wienia rozwiązania komputerowe go. 

Uwaga 2. W tych rozwa żaniach rozs zerzamy także pojęcie programowania . Jak pows zechnie wiadomo, kom-
putery wykonują tylko programy. Użytkownik komputera może korzys tać z is tniejących programów (np. za 
pakietu Office), a może także posługiwać się własnymi programami, napis anymi w języku programowania , 
który „rozumieją” komputery. W s zkole nie ma zbyt wiele cza su, by uczyć programowania , uczniowie te ż nie 
są  odpowie dnio przygotowani do programowania komputerów. Is tnieje jednak wiele sposobności, by ks ztał-
cić zdolność komunikowania się z komputerem za pomocą programów, które pows tają w inny spos ób niż za 
pomocą programowania w wybranym języku programowania. Szczególnym przypadkiem takich programów 
jes t oprogramowanie edukacyjne, które służy do wykonywania i śledzenia działania algorytmów. „Programo-
wanie” w przypadku takiego oprogramowania pole ga na dobieraniu odpowiednich parametrów, które ma ją 
wpływ na działanie algorytmów i tym s amym umożliwiają leps ze zapoznanie s ię z nimi. 

4

 W najnows zej pods tawie programowej dla przedmiotu informat yka , przyję tej do realizacji pod koniec 20 08 roku, to po-

dejś cie jes t zalecane jako pods tawowa metodologia rozwią zywania problemów z pomocą komputera .

background image

< 22 > 

Informa tyka  + 

1.  Cormen T.H., Leis erson C.E., Rives t R.L., Wprowadzenie do algorytmów, WNT, Warsza wa 1997
2.  Gurbiel E., Hard-Olejniczak G., Kołczyk E., Krupicka H., Sysło M.M., Informatyka , Część 1 i 2, Podręcznik 

dla LO, WSiP, Wars zawa 2002-2003 

3.  Harel D., Algorytmika . Rzecz o istocie informa tyki, WNT, Wars zawa 1992 
4.  Knuth D.E., Sztuka progra mowania , Tomy 1 – 3, WNT, Wars za wa 2003 
5.  Sysło M.M., Algorytmy, WSiP, Wars zawa 1997 
6.  Sysło M.M., Piramidy, s zyszki i inne konstrukcje algorytmiczne, WSiP, Warsza wa 1998. Kolejne rozdzia ły tej 

ksią żki są  zamie szczone na s tronie: http:// www.ws ipne t.pl/ kluby/ informa tyka _eks tra.php?k=69

7.  Wirth N., Algorytmy + struktury danych = programy, WNT, Wars zawa  1980

Nota tki 

< 23 >

background image

W projekcie 

, poza wykładami i warsztatami,

przewidziano następujące działania:

 

24-godzinne kursy dla uczniów w ramach modułów tematycznych

 

24-godzinne kurs y metodyczne dla nauczycieli, przygotowujące 

do pracy z uczniem zdolnym

 

nagrania 60 wykładów informatycznych, prowadzonych 

przez wybitnych specjalistów i nauczycieli akademickich

 

konkursy dla uczniów, trzy w ciągu roku

 

udział uczniów w pracach kół naukowych

 

udział uczniów w konferencjach naukowych

 

obozy wypoczynkowo-naukowe.

Szczegółowe informacje znajdują się na stronie projektu