background image

Matematyka Dyskretna

Andrzej Szepietowski

25 czerwca 2002 roku

background image
background image

Rozdział 1

Arytmetyka

1.1

System dziesi˛etny

Najpowszechniej u˙zywanym sposobem przedstawiania liczb naturalnych jest system dzie-
si˛etny, gdzie na przykład zapis:

przedstawia liczb˛e składaj ˛

ac ˛

a si˛e z jednej setki, siedmiu dziesi ˛

atek i o´smiu jedno´sci. Mo-

˙zemy to zapisa´c w postaci:

albo inaczej:

Tak wi˛ec w systemie dziesi˛etnym kolejne cyfry oznaczaj ˛

a współczynniki przy kolejnych

pot˛egach liczby dziesi˛e´c, zaczynaj ˛

ac od najwi˛ekszej, a ko ´ncz ˛

ac na najmniejszej pot˛edze.

Mówimy, ˙ze liczba dziesi˛e´c jest podstaw ˛

a lub baz ˛

a systemu dziesi˛etnego. W systemie

dziesi˛etnym u˙zywamy dziesi˛eciu cyfr:

 !#"$&%')(*&+'-,'./&'-0

a zapis:

1

2

1

243

!

1

1

oznacza liczb˛e:

1

2

2

1

2!3

243

5!

1

1

(1.1)

któr ˛

a mo˙zemy te˙z zapisa´c w postaci:

2

6

7

8

1

7

7

(1.2)

3

background image

4

Rozdział 1. Arytmetyka

gdzie

1

7

s ˛

a cyframi nale˙z ˛

acymi do zbioru

'!4-0

.

Liczby mo˙zna te˙z zapisywa´c w systemach z inn ˛

a baz ˛

a. Je˙zeli za baz˛e systemu wybie-

rzemy liczb˛e

, to potrzebujemy

cyfr, a zapis:

1

2

1

2!3

!!

1

1

oznacza w systemie z baz ˛

a

liczb˛e:

1

2

2

1

243

2!3

5!!

1

1

(1.3)

któr ˛

a mo˙zemy te˙z zapisa´c w postaci:

2

6

7

8

1

7

7

(1.4)

1.2

System dwójkowy

W informatyce bardzo wa˙znym systemem jest system dwójkowy (binarny), gdzie pod-
staw ˛

a jest liczba

"

i gdzie mamy tylko dwie cyfry, 0 i 1 (cyfry w systemie dwójkowym

nazywa si˛e bitami). Zapis:

1

2

1

2!3

!!

1

1

oznacza liczb˛e:

1

2

"

2

1

243

"

2!3

5!

1

"

1

"

lub:

2

6

7

8

1

7

"

7

Przykład 1.1 Zapis

oznacza w systemie dwójkowym liczb˛e:

"

5""

czemu w systemie dziesi˛etnym odpowiada

("

,

. Podobnie zapis:

''

oznacza w systemie dziesi˛etnym liczb˛e

,(

%"

(5

0

.

Poni˙zej w pierwszej tabeli przedstawiono siedemna´scie kolejnych liczb w postaci dwój-
kowej i dziesi˛etnej, a w drugiej jedena´scie pierwszych pot˛eg liczby 2 w postaci dwójkowej
i dziesi˛etnej.

background image

1.3. Zwi˛ekszanie liczby o jeden

5

dwójkowy

dziesi˛etny

0

0

1

1

10

2

11

3

100

4

101

5

110

6

111

7

1000

8

1001

9

1010

10

1011

11

1100

12

1101

13

1110

14

1111

15

10000

16

pot˛ega

dwójkowy

dziesi˛etny

0

1

1

1

10

2

2

100

4

3

1000

8

4

10000

16

5

100000

32

6

1000000

64

7

10000000

128

8

100000000

256

9

1000000000

512

10

10000000000

1024

1.3

Zwi˛ekszanie liczby o jeden

Algorytm zwi˛ekszania liczby o jeden. Aby zwi˛ekszy´c o jeden liczb˛e zapisan ˛

a w syste-

mie dwójkowym:

wskazujemy na ostatni bit,

powtarzamy, co nast˛epuje:

je˙zeli wskazany bit jest zerem, to zamieniamy go na jedynk˛e i ko ´nczymy

algorytm,

je˙zeli jest on równy jeden, to zamieniamy go na zero i wskazujemy nast˛epny

bit w lewo; je˙zeli nie ma nast˛epnego bitu w lewo, to stawiamy jedynk˛e na pocz ˛

atku

liczby i ko´nczymy algorytm.

background image

6

Rozdział 1. Arytmetyka

Mówi ˛

ac inaczej, szukamy pierwszego zera od prawej strony, zamieniamy go na jedynk˛e,

a wszystkie jedynki stoj ˛

ace za nim zamieniamy na zera.

Przykład 1.2 Liczba o jeden wi˛eksza od liczby

 '

to

 

.

Je˙zeli liczba nie zawiera zer, tylko same jedynki, to zamieniamy te jedynki na zera i
stawiamy jedynk˛e na pocz ˛

atku.

Przykład 1.3 Po liczbie

jest liczba

.

Zauwa˙zmy, ˙ze podobnie działa algorytm zwi˛ekszania o jeden liczb w systemie dziesi˛et-
nym (lub dowolnym innym systemie). Szukamy pierwszej od prawej cyfry ró˙znej od dzie-
wi ˛

atki (najwi˛ekszej cyfry w systemie), zwi˛ekszamy t˛e cyfr˛e o jeden, a wszystkie stoj ˛

ace

za ni ˛

a dziewi ˛

atki zamieniamy na zera.

1.4

Porównywanie liczb

Algorytm porównywania liczb. Aby stwierdzi´c, która z dwóch liczb w postaci dwójko-
wej jest wi˛eksza, post˛epujemy w nast˛epuj ˛

acy sposób:

je˙zeli zapisy liczb nie s ˛

a tej samej długo´sci, to wi˛eksz ˛

a jest liczba z dłu˙zszym zapi-

sem (zakładamy tu, ˙ze zapis liczby ró˙znej od zera nie ma zer na pocz ˛

atku),

je˙zeli zapisy liczb s ˛

a równej długo´sci, to porównujemy bit po bicie od lewej strony

do prawej:

je˙zeli bity s ˛

a takie same, to przechodzimy do nast˛epnego bitu w prawo,

je˙zeli bity s ˛

a ró˙zne, to ko ´nczymy i stwierdzamy, ˙ze wi˛eksza jest ta liczba,

która ma wi˛ekszy bit na tej pozycji,

je˙zeli wszystkie bity s ˛

a takie same, to porównywane liczby s ˛

a równe.

Przykład 1.4

 

  '

. Liczby te s ˛

a tej samej długo´sci, maj ˛

a takie same trzy

pierwsze bity, a ró˙zni ˛

a si˛e dopiero czwartym bitem — czwarty bit pierwszej liczby jest

wi˛ekszy od czwartego bitu drugiej liczby.

1.5

Operacje arytmetyczne w systemie dwójkowym

Operacje dodawania, mno˙zenia, odejmowania i dzielenia w systemie dwójkowym mo˙zna
wykonywa´c podobnie do tak zwanych szkolnych pisemnych działa ´n arytmetycznych w
systemie dziesi˛etnym. Działania w systemie dwójkowym s ˛

a prostsze, poniewa˙z mamy tu

tylko dwie cyfry, 0 i 1, i prostsze s ˛

a operacje na pojedynczych cyfrach.

Zacznijmy od tabliczki dodawania i mno˙zenia. Wygl ˛

adaj ˛

a one tak:

+

0

1

0

0

1

1

1

10

*

0

1

0

0

0

1

0

1

background image

1.5. Operacje arytmetyczne w systemie dwójkowym

7

Przypu´s´cmy, ˙ze chcemy doda´c dwie liczby w postaci dwójkowej. Zakładamy tu, ˙ze obie
liczby s ˛

a tej samej długo´sci. Je˙zeli nie s ˛

a, to krótsz ˛

a z nich uzupełniamy na pocz ˛

atku

zerami.

Algorytm dodawania. Aby doda´c dwie liczby w postaci binarnej:

1

2

1

243

!

1

2

2!3

!

dla kolejnych pozycji

od 0 do

obliczamy bit sumy

7

oraz

7

— tak zwany bit przenie-

sienia do nast˛epnej pozycji:

najpierw obliczamy

oraz

:

1

"

(czyli

jest reszt ˛

a z dzielenia

1

przez 2),

1

,

nast˛epnie po kolei, dla ka˙zdego

od 1 do

, obliczamy:

7

1

7

7

7

3

"

,

7

, je˙zeli co najmniej dwa spo´sród bitów

1

7

,

7

oraz

7

3

s ˛

a jedynkami,

na ko´ncu obliczamy najbardziej znacz ˛

acy bit sumy

2

2

.

Wynikiem dodawania jest liczba

2

2

!!

(mo˙ze si˛e zdarzy´c, ˙ze

2

5

).

Przykład 1.5 Dodawanie liczb

''

i

wygl ˛

ada nast˛epuj ˛

aco:

1

0

1

0

1

+

1

1

1

1

1

1

0

0

Aby odj ˛

a´c od siebie dwie liczby w systemie dwójkowym, odejmujemy bit po bicie

od prawej do lewej, a w przypadku gdy trzeba odj ˛

a´c bit wi˛ekszy od mniejszego, „po˙zy-

czamy” dwójk˛e z nast˛epnej (w lewo) pozycji (szczegóły algorytmu pozostawiono jako

´cwiczenie).

Przykład 1.6 Odejmowanie liczb

  

i

wygl ˛

ada nast˛epuj ˛

aco:

1

0

1

0

1

1

1

1

1

1

1

0

background image

8

Rozdział 1. Arytmetyka

Aby pomno˙zy´c dwie liczby, mno˙zymy pierwsz ˛

a liczb˛e przez poszczególne cyfry dru-

giej liczby, a wyniki podpisujemy pod spodem odpowiednio przesuni˛ete wzgl˛edem siebie.
Ka˙zdy kolejny wynik jest przesuni˛ety o jedn ˛

a kolumn˛e w lewo. Nast˛epnie sumujemy te

iloczyny.

Przykład 1.7 Oto przykład mno˙zenia liczb

  

i

'

:

1

0

1

0

1

1

0

1

1

0

1

0

1

0

0

0

0

0

1

0

1

0

1

1

1

0

1

0

0

1

Zauwa˙zmy, ˙ze pomno˙zenie liczby w postaci dwójkowej przez 2 oznacza dopisanie

jednego zera na ko ´ncu liczby. Podobnie pomno˙zenie liczby przez

-t ˛

a pot˛eg˛e 2 oznacza

dopisanie na ko ´ncu liczby

zer.

Przykład 1.8

''

pomno˙zone przez

daje wynik

 

.

Równie˙z dzielenie wykonuje si˛e podobnie jak w systemie dziesi˛etnym. Na przykład:

1

0

1

0

1

1

1

0

1

0

0

1

:

1

0

1

1

0

1
1

1

0

1

0

1
1

0

1

1

0

1

0

0

0

Je˙zeli liczba jest podzielna przez 2, to ma w postaci binarnej zero na ko ´ncu, a je˙zeli dzieli
si˛e przez

-t ˛

a pot˛eg˛e dwójki, to ma na ko ´ncu

zer. Podzielenie liczby przez 2 oznacza

skre´slenie w jej postaci binarnej jednego zera z ko ´nca.

Przykład 1.9

 

podzielone przez 2 daje

''

.

1.6

Zamiana systemu

Zastanówmy si˛e teraz, jak przechodzi´c od jednego sposobu przedstawiania liczby do dru-
giego. Poniewa˙z b˛edziemy u˙zywa´c ró˙znych systemów zapisu liczb, wi˛ec zapis w systemie
z baz ˛

a

oznaczymy przez:

1

2

1

243

!

1

1

B˛edziemy rezygnowa´c z tego zapisu, je˙zeli nie b˛edzie w ˛

atpliwo´sci, jakiego systemu u˙zy-

wamy. Przedyskutujmy to na przykładach. Aby przedstawi ´c liczb˛e

''

background image

1.6. Zamiana systemu

9

w postaci dziesi˛etnej, korzystamy ze wzoru (1.3):

 '

"5"

"

"

"

5"

i wykonujemy wszystkie rachunki w systemie dziesi˛etnym:

''

%"

,

(

"5

%"5,

(

+%

Podobnie mo˙zemy post˛epowa´c przy zamianie w odwrotn ˛

a stron˛e, z systemu dziesi˛etnego

na dwójkowy. Najpierw korzystamy ze wzoru (1.1):

+%

-

+

%

nast˛epnie przedstawiamy cyfry i podstaw˛e systemu 10 w postaci dwójkowej i wykonuje-
my wszystkie działania w systemie dwójkowym:

+%

'

'

'

''

Ten sposób zamiany liczb z postaci dziesi˛etnej na dwójkow ˛

a jest analogiczny do sposobu,

w jaki wy˙zej zamieniali´smy liczby z postaci dwójkowej na dziesi˛etn ˛

a. Byłby to naturalny

sposób dla kogo´s, kto swobodnie liczy w systemie dwójkowym. Sposób ten ma t˛e wad˛e,

˙ze wolno działa. Zobaczymy na przykładach dwa szybsze algorytmy zamiany postaci

liczby z dziesi˛etnej na dwójkow ˛

a.

We´zmy liczb˛e 178. Pierwszy sposób polega na tym, ˙ze wyszukujemy najwi˛eksz ˛

a po-

t˛eg˛e liczby 2, która jeszcze jest mniejsza od naszej liczby (w przykładzie

"

"

),

nast˛epnie odejmujemy t˛e pot˛eg˛e od naszej liczby i z ró˙znic ˛

a post˛epujemy tak samo. Na

ko´ncu mamy liczb˛e w postaci sumy pot˛eg dwójki. W naszym przykładzie wygl ˛

ada to tak:

"+"%"

"

%"

,"'

Teraz ju˙z łatwo zapisa´c nasz ˛

a liczb˛e w postaci dwójkowej:

&

 '

)

Drugi sposób polega na kolejnym dzieleniu liczby w sposób całkowity przez 2 i za-

pami˛etywaniu reszt z dzielenia. Reszty te zapisane w odwrotnej kolejno´sci tworz ˛

a zapis

binarny liczby. Na przykład, we´zmy znowu liczb˛e 178. W poni˙zszej tabeli przedstawiono
kolejne ilorazy i reszty.

liczba

iloraz

reszta

178

89

0

89

44

1

44

22

0

22

11

0

11

5

1

5

2

1

2

1

0

1

0

1

background image

10

Rozdział 1. Arytmetyka

Reszty zapisane w odwrotnej kolejno´sci:

'  

tworz ˛

a binarny zapis liczby

)

#

. Poprawno´s´c działania tego algorytmu wynika z fak-

tu, ˙ze je˙zeli podzielimy liczb˛e

2

6

7

8

1

7

"

7

przez 2, to reszta z dzielenia wyniesie

1

, a iloraz całkowitoliczbowy wyniesie:

2

6

7

8

1

7

"

7

3

nast˛epne dzielenie przez 2 da reszt˛e

1

oraz iloraz:

2

6

7

8

1

7

"

7

3

i tak dalej.

Ostatni sposób mo˙zna łatwo uogólni´c na algorytm zamiany liczb z systemu dziesi˛et-

nego na system z inn ˛

a baz ˛

a

. Nale˙zy tylko dzieli´c przez

. Je˙zeli chcemy, na przykład,

przedstawi´c liczb˛e

,

w systemie trójkowym, to dzielimy j ˛

a kolejno przez 3 i spisujemy

reszty z dzielenia:

liczba

iloraz

reszta

60

20

0

20

6

2

6

2

0

2

0

2

W wyniku otrzymamy:

,

&

""

.

1.7

Długo´s´c liczby

Zastanówmy si¸e ile cyfr zawiera zapis dziesi¸etny liczby naturalnej

. Cztery cyfry w

systemie dziesi¸etnym posiadaj¸a liczby od

do

0000

, a

cyfr

posiadaj¸a liczby od

3

do

. Tak wi¸ec liczba

ma

cyfr wtedy i tylko wtedy

gdy

, czyli gdy

. Mamy wi˛ec

Lemat 1.10 Liczba naturalna

ma w systemie dziesi¸etnym

(w przybli˙zeniu

) cyfr.

Podobnie w systemie z podstaw¸a

, liczba

ma

cyfr wtedy i tylko wtedy gdy

, czyli:

background image

1.8. Du˙ze liczby

11

Lemat 1.11 W systemie o podstawie

liczba naturalna

ma

5

(w przybli˙zeniu

) cyfr.

Korzystaj¸ac z tego faktu mo˙zemy ustala´c przybli˙zon¸a liczb¸e cyfr potrzebn¸a do zapisu
liczb.

Wniosek 1.12 Liczba, posiadaj¸aca

cyfr w systemie dziesi¸etnym ma około

%

bitów w systemie dwójkowym, a liczba maj¸aca

bitów w postaci dwójkowej ma

około

%/

cyfr w postaci dziesi¸etnej.

Dowód: Je˙zeli liczba

ma w postaci dziesi˛etnej

cyfr, to

. W postaci dwój-

kowej

ma około

bitów, a

'%

,

poniewa˙z

"

'

% "000,5%/

.

Podobnie, je˙zeli liczba

ma w postaci dwójkowej

bitów, to w postaci dziesi˛etnej

ma około

"

!%/

.

1.8

Du˙ze liczby

Aby si¸e zorientowa´c jak du˙ze mog¸a by´c liczby przedstawione za pomoc¸a systemu dziesi¸etnego
lub dwójkowego przypatrzmy si¸e poni˙zszej tabeli:

Liczba sekund w roku

5%

Wiek układu słonecznego w latach

Wiek układu słonecznego w sekundach

Liczba cykli w roku (100 MHz)

%

Liczba ci¸agów 64 bitowych

"

Liczba ci¸agów 128 bitowych

"

%'

(

Liczba ci¸agów 256 bitowych

"

"

Liczba atomów na Ziemi

Liczba atomów w naszej galaktyce

Dane do tabeli zaczerpni¸eto z ksi¸a˙zki A. Menezes, P. van Oorschot and S. Vanstone,
Handbook of Applied Cryptography. oraz z ksi¸a˙zki B. Schneier, Applied Cryptography.

Tabela ta pozwala oceni´c niektóre algorytmy.

Przykład 1.13 Rozwa˙zmy prosty algorytm sprawdzaj¸acy, czy liczba naturalna

jest pierw-

sza. Algorytm ten dzieli

przez kolejne liczby od 2 do

. Je˙zeli

ma 120 bitów, to

potrzeba

"

dziele´n. Je˙zeli zało˙zymy, ˙ze komputer potrafi wykona´c

milionów

dziele´n w ci¸agu sekundy i

%

w ci¸agu roku, to b¸edzie liczył około 300 lat. W rozdziale

o teorii liczb b¸edziemy mówi´c o szybszych algorytmach sprawdzaj¸acych pierwszo´s´c liczb
maj¸acych po kilkaset bitów.

Przykład 1.14 Przypu´s´cmy, ˙ze chcemy zaprojektowa´c tablic¸e, która dla ka˙zdego ci¸agu
zło˙zongo z o´smiu liter przechowuje jak¸a´s informacj¸e (jeden bajt). W przypadku 26 liter
takich ci¸agów mamy

",

 

!"$#&%/

('

&

zatem potrzebowaliby´smy wi¸ecej ni˙z 100 gigabajtów pami¸eci.

background image

12

Rozdział 1. Arytmetyka

1.9

Ułamki

Przypomnijmy najpierw krótko, jak przedstawia si˛e ułamek w systemie dziesi˛etnym. Na
przykład,

'

"%(

oznacza:

"

3

%

3

(

3

U˙zyli´smy kropki do oddzielania cz˛e´sci całkowitej od ułamkowej. Jest to cz˛esto u˙zywany
w informatyce sposób, stosowany mi˛edzy innymi w j˛ezyku Pascal. Ogólniej, zapis:

'

1

1

!

1

2

oznacza liczb˛e:

1

3

1

3

!

1

2

3

2

któr ˛

a mo˙zemy te˙z zapisa´c w postaci:

2

6

7

8

1

7

3

7

Podobnie mo˙zemy zapisywa´c ułamki w systemie dwójkowym. Jedyna ró˙znica polega na
tym, ˙ze w systemie binarnym podstaw ˛

a pot˛eg jest dwójka i ˙ze u˙zywamy tylko dwóch cyfr,

0 i 1. Tak wi˛ec w systemie dwójkowym zapis:

'

1

1

!

1

2

oznacza liczb˛e:

1

"

3

1

"

3

!

1

2

"

3

2

lub inaczej:

2

6

7

8

1

7

"

3

7

Przykład 1.15

'

 

+

'

 

+

 

'

'

,"+

W poni˙zszej tabeli przedstawiono kilka pierwszych ujemnych pot˛eg liczby 2 w systemie
dwójkowym i dziesi˛etnym.

"/3

'

'

+

"/3

'

'

'

"+

"/3

'

 

'

"+

"

3

'

'

'

,"+

"/3

'

 

'

%'"+

-

"/3

'

'

)

'

'+,"+

-

background image

1.10. System szesnastkowy

13

1.10

System szesnastkowy

W informatyce u˙zywa si˛e te˙z systemu szesnastkowego, gdzie podstaw ˛

a jest liczba 16. Do

systemu szesnastkowego potrzebujemy szesnastu cyfr. Zwykle u˙zywa si˛e nast˛epuj ˛

acych

„cyfr”:

'

 "$'% $( *+'','*$'' 0

W poni˙zszej tabeli zestawiono cyfry systemu szesnastkowego z odpowiadaj ˛

acymi im licz-

bami w systemie dwójkowym i dziesi˛etnym.

szesnastkowy

dwójkowy

dziesi˛etny

0

0000

0

1

0001

1

2

0010

2

3

0011

3

4

0100

4

5

0101

5

6

0110

6

7

0111

7

8

1000

8

9

1001

9

A

1010

10

B

1011

11

C

1100

12

D

1101

13

E

1110

14

F

1111

15

W j˛ezyku Pascal liczby w systemie szesnastkowym poprzedza si˛e znakiem dolara

, a w

j˛ezyku

znakami

.

Przykład 1.16 Zapis

oznacza liczb˛e w systemie szesnastkowym, która w systemie

dziesi˛etnym ma posta´c

,5

Dzi˛eki temu, ˙ze 16 jest pot˛eg ˛

a dwójki, prosta jest zamiana postaci liczby z systemu dwój-

kowego na szesnastkowy, i na odwrót. Przy zamianie z systemu szesnastkowego na dwój-
kowy wystarczy zamienia´c kolejne cyfry przedstawienia na grupy odpowiednich czterech
bitów według powy˙zszej tabeli.

Przykład 1.17 Liczba, która w systemie szesnastkowym wygl ˛

ada tak

0'

w systemie

dwójkowym ma posta´c

'

 

 

.

Przy zamianie z postaci dwójkowej na posta´c szesnastkow ˛

a post˛epujemy odwrotnie. Za-

st˛epujemy grupy po cztery bity pojedynczymi cyframi.

Przykład 1.18

)

 

 

%

.

background image

14

Rozdział 1. Arytmetyka

Je˙zeli liczba cyfr w postaci dwójkowej nie dzieli si˛e przez 4, to uzupełniamy j ˛

a zerami na

pocz ˛

atku.

Przykład 1.19

 

'

'

 

$

,

,"

.

W ten sposób mo˙zemy u˙zywa´c zapisu szesnastkowego do zwi˛ezłego przedstawiania dłu-
gich ci ˛

agów bitów.

1.11

Reprezentacja liczb w komputerze

W wielu j˛ezykach ka˙zda zmienna ma swój typ, który jest deklarowany na pocz ˛

atku pro-

gramu. Sposób przechowywania warto´sci zmiennej zale˙zy od jej typu.

1.11.1

Integer

Zmienne typu integer przechowywane s ˛

a zwykle w dwóch bajtach. Jeden bajt (ang. by-

te) zawiera osiem bitów, tak wi˛ec warto´s´c zmiennej typu integer przechowywana jest w
szesnastu bitach. Pierwszy bit oznacza znak. Je˙zeli jest on zerem, to liczba jest dodatnia,
je˙zeli jedynk ˛

a, to ujemna.

Je˙zeli liczba jest dodatnia, to pozostałe pi˛etna´scie bitów stanowi binarny zapis tej

liczby. Na przykład liczba

+

jest przechowywana jako:

Najwi˛eksz ˛

a liczb˛e dodatni ˛

a, jak ˛

a mo˙zna przechowa´c w zmiennej typu integer, jest:

 

czyli zero i pi˛etna´scie jedynek. Jest to:

"

%",/

&

Liczby ujemne s ˛

a przechowywane w tak zwanym systemie uzupełnieniowym. Liczba

ujemna o warto´sci bezwzgl˛ednej

jest przedstawiana jako liczba:

"

w postaci binarnej. Na przykład liczba

jest przedstawiona jako:

czyli szesna´scie jedynek. A liczba

%

jako:

!

Najmniejsza liczba ujemna, któr ˛

a mo˙zna zmie´sci´c do zmiennej typu integer, to:

$

background image

1.11. Reprezentacja liczb w komputerze

15

czyli jedynka i pi˛etna´scie zer, która koduje liczb˛e:

"

%",

&

Cz˛esto nie ma ˙zadnego zabezpieczenia przed przekroczeniem maksymalnego lub mini-
malnego zakresu liczb typu integer. Je˙zeli, na przykład, do liczby

%",

, która jest prze-

chowywana jako:

'

dodamy jedynk˛e, to otrzymamy:

 

która koduje liczb˛e

%",

, i komputer nie zakomunikuje tego przekroczenia.

1.11.2

Real

Liczby typu real s ˛

a zapisywane w dwóch notacjach:

stałopozycyjnej,

zmiennopozycyjnej.

Liczby w notacji stałopozycyjnej to, na przykład:

'

 

"%

"$

'

czyli notacja dziesi˛etna. Zwró´cmy uwag˛e, ˙ze kropka oddziela cz˛e´s´c całkowit ˛

a liczby od

cz˛e´sci ułamkowej.

W notacji zmiennopozycyjnej liczba przedstawiona jest w postaci:

gdzie

jest mantys ˛

a, liczb ˛

a w postaci dziesi˛etnej z przedziału

lub

, a

, zwana cech ˛

a, jest liczb ˛

a całkowit ˛

a. Zapis

oznacza liczb˛e:

!

W poni˙zszej tabeli mamy kilka liczb w postaci stało- i zmiennopozycyjnej.

4837.92

(

%/0"

%

0.034

%

(

"

"'

"

Sposób przechowywania warto´sci zmiennych typu real jest skomplikowany i nie b˛edzie
przedstawiony szczegółowo.

background image

16

Rozdział 1. Arytmetyka

1.11.3

Inne typy całkowite

W j˛ezyku Pascal, oprócz integer, mo˙zna u˙zywa´c innych typów całkowitych; s ˛

a to:

shortint, zawiera liczby całkowite z przedziału od

"

do

"

,

byte, zawiera liczby całkowite z przedziału od

do

"++

,

word, zawiera liczby całkowite z przedziału od

do

,++%+

,

longint, zawiera liczby całkowite z przedziału od

"$(/(%,(

do

"$!($(%,(/

.

Elementy typu byte i shortint przechowywane s ˛

a w jednym bajcie (osiem bitów) pa-

mi˛eci, typu word — w dwóch bajtach, a typu longint — w czterech bajtach pami˛eci.
Liczby typu shortint i longint mog ˛

a by´c dodatnie lub ujemne i s ˛

a zapami˛etywane w po-

staci uzupełnieniowej z pierwszym bitem oznaczaj ˛

acym znak (podobnie jak liczby typu

integer). Elementy typu byte i word mog ˛

a by´c tylko dodatnie i s ˛

a przechowywane w po-

staci dwójkowej.

1.12

Wyra˙zenia arytmetyczne w j˛ezyku Pascal

W j˛ezyku Pascal wyra˙zeniami arytmetycznymi s ˛

a stałe liczbowe, na przykład:

"%(

"%

'

"%'

"%'

(+'

%'

"$

+$

oraz zmienne typów liczbowych (np. integer lub real). Wyra˙zenia mo˙zna tak˙ze budowa ´c
za pomoc ˛

a operatorów arytmetycznych i nawiasów. Je˙zeli

U

oraz

W

s ˛

a dwoma wyra˙zenia-

mi arytmetycznymi, to wyra˙zeniami arytmetycznymi s ˛

a tak˙ze:

U+W, U-W, U*W, U/W, (U), U div V, U mod V.

Gwiazdka

reprezentuje tutaj znak mno˙zenia, a operacje

div

oraz

mod

to iloraz i reszta

z dzielenia całkowitoliczbowego (s ˛

a one opisane dokładnie w rozdziale o teorii liczb).

Na przykład, wyra˙zeniami arytmetycznymi s ˛

a:

-(2-3)/2+7*4, (2-3)/(3*2), 7 div 2, 7 mod 2.

Je˙zeli

x

oraz

y

s ˛

a zmiennymi liczbowymi, to wyra˙zeniami arytmetycznymi s ˛

a tak˙ze:

2*x, x*x-2/y.

Dla danego wyra˙zenia mo˙zemy obliczy´c jego warto´s´c. Robi si˛e to według zwykłych reguł
znanych ze szkoły. Najpierw oblicza si˛e wyra˙zenia w nawiasach, potem mno˙zenie i dzie-
lenie (od lewej do prawej), a na ko ´ncu dodawanie i odejmowanie (od lewej do prawej).

1.13

Poszukiwania binarne (binary search)

Znana jest gra w dwadzie´scia pyta´n. W tej grze za pomoc ˛

a dwudziestu pyta ´n, na które

odpowiedzi ˛

a mo˙ze by´c „tak” lub „nie”, nale˙zy odgadn ˛

a´c pomy´slan ˛

a przez przeciwnika

rzecz. Zobaczymy, jak mo˙zna wykorzysta´c binarny system zapisu liczb do opracowania
strategii wygrywaj ˛

acej w tej grze.

background image

1.13. Poszukiwania binarne (binary search)

17

Najpierw upro´s´cmy nieco t˛e gr˛e. Załó˙zmy, ˙ze mo˙zemy zada´c tylko cztery pytania i ˙ze

odgadujemy liczb˛e naturaln ˛

a

ze zbioru:

'!&"'-%'-( #+$-, #$-'&0'$"$!%'4( +

Wtedy nale˙zy zada´c nast˛epuj ˛

ace cztery pytania:

Czy liczba

nale˙zy do zbioru

 -0' !!"$!%'4( 4+

?

Czy

nale˙zy do zbioru

(*&+'-,'./"$% !!(*4+

?

Czy

nale˙zy do zbioru

"'-% -,'./'!!(*4+

?

Czy

nale˙zy do zbioru

-% &+$./&0'!%'+

?

Dlaczego te cztery pytania wystarcz ˛

a? Sprawa stanie si˛e jasna, je˙zeli przedstawimy liczby

w postaci binarnej. Ka˙zd ˛

a za pomoc ˛

a czterech bitów (z zerami na pocz ˛

atku). Wtedy nasz

zbiór wygl ˛

ada tak:

'&'& '&$- !'-''&'$-

'' '$!!'!'$!

A pytania wygl ˛

adaj ˛

a teraz tak:

Czy

nale˙zy do zbioru

'! !'! !! '!$!!'

Czy

nale˙zy do zbioru

 '-  - ! -$'!$!!'

Czy

nale˙zy do zbioru

''-'- ! -$!''!'!!'

Czy

nale˙zy do zbioru

 -'- $-$!'!'!$

Zauwa˙zmy, ˙ze zbiór

zawiera wszystkie liczby z pierwszym bitem równym jedynce,

w

s ˛

a wszystkie liczby z drugim bitem równym jedynce, i tak dalej. Tak wi˛ec nasze

pytania s ˛

a w rzeczywisto´sci pytaniami o kolejne bity odgadywanej liczby. Na przykład w

pierwszym pytaniu pytamy, czy pierwszy bit odgadywanej liczby jest jedynk ˛

a.

Ale mo˙zna do tych pyta ´n podej´s´c inaczej. Najpierw dzielimy zbiór na połowy: na

liczby mniejsze od o´smiu i na liczby wi˛eksze lub równe o´smiu, i pytamy, do której połowy
nale˙zy odgadywana liczba (dokładniej pytamy, czy liczba nale˙zy do górnej połowy). Po
uzyskaniu odpowiedzi mamy dwa razy w˛e˙zszy przedział poszukiwa ´n. Przypu´s´cmy, ˙ze
odgadywan ˛

a liczb ˛

a jest 11. W drugim etapie dzielimy przedział

 -0 ! !!"$%'!('+

na połowy, górn ˛

a:

"'!%'!( +

i doln ˛

a:

 -0 ! !

background image

18

Rozdział 1. Arytmetyka

i pytamy, do której połowy nale˙zy szukana liczba. Po drugiej odpowiedzi przedział po-
szukiwa´n jest ju˙z cztery razy krótszy. Po dwóch kolejnych pytaniach przedział zaw˛e˙za si˛e
do jednej liczby. Drugi sposób jest całkowicie równowa˙zny pierwszemu, tutaj te˙z pytamy
o kolejne bity i otrzymujemy takie same odpowiedzi.

Potrzeba cztery razy kolejno dzieli´c zbiór na połowy, aby z pocz ˛

atkowej długo´sci

16 przej´s´c na ko´ncu do długo´sci 1. A ile trzeba podziałów, je˙zeli na pocz ˛

atku mamy

"

elementów? Po pierwszym podziale nasz zbiór b˛edzie miał długo´s´c

"3

, po

drugim

"3

, a po

-tym

"3

7

. Jak wida´c, potrzeba

kolejnych podziałów, aby

doj´s´c do 1. Tak wi˛ec je˙zeli mamy do dyspozycji

"

pyta ´n, to mo˙zemy odnale´z´c jedn ˛

a

spo´sród

"

)

liczb całkowitych z przedziału od

do

"

-

(++

.

Metod˛e poszukiwa ´n binarnych mo˙zna zastosowa´c do stwierdzenia, czy jaka´s liczba

naturalna

jest kwadratem (lub jak ˛

a´s inn ˛

a ustalon ˛

a pot˛eg ˛

a) innej liczby naturalnej. Ina-

czej, czy istnieje liczba naturalna

taka, ˙ze

, lub ogólniej, czy istnieje liczba

naturalna

taka, ˙ze

.

Poni˙zej przedstawiamy taki algorytm. Algorytm ten u˙zywa dwoch dodatkowych zmien-

nych

i

, warto´sci tych zmiennych przybli˙zaj ˛

a pierwiastek stopnia

z

od dołu i od

góry. W trakcie wykonywania algorytmy przybli˙zeniaa te s ˛

a coraz lepsze

Algorytm sprawdzaj ˛

acy, czy dana liczba naturalna

jest pot˛eg ˛

a o wykładniku

jakiej´s

liczby naturalnej.

Dane wej´sciowe: liczba naturalna .

Dane wyj´sciowe: pierwiastek stopnia

z

, (liczba naturalna

, taka ˙ze

) lub

informacja, ˙ze

nie ma pierwiastka stopnia

.

Powtarzaj a˙z do skutku:

je˙zeli

, to koniec,

nie ma pierwiastka.

je˙zeli

, to koniec,

jest pot˛eg ˛

a

.

je˙zeli

, to

je˙zeli

, to

.

1.14

Zadania

1. Zwi˛eksz o jeden nast˛epuj ˛

ace liczby zapisane w postaci dwójkowej: a)

''

b)

.

2. Porównaj nast˛epuj ˛

ace pary liczb: a)

 

,

 

b)

 

,

.

3. Dodaj (odejmij, pomnó˙z) w postaci dwójkowej nast˛epuj ˛

ace pary liczb: a)

'

,

'

b)

'

,

.

background image

1.15. Problem: Waga

19

4. Napisz dokładny algorytm odejmowania dwóch liczb w postaci dwójkowej.

5. Liczby 81, 126 przedstaw w postaci dwójkowej. Jak b˛ed ˛

a one reprezentowane w

komputerze jako stałe typu integer (byte, word)?

6. Nast˛epuj ˛

ace liczby przedstaw w postaci dwójkowej: 6.75, 5.625, $B1, $FF.

7. Nast˛epuj ˛

ace liczby przedstaw w postaci trójkowej: 80, 120.

8. Nast˛epuj ˛

ace liczby w postaci dwójkowej, 10001101, 100101, przedstaw w postaci:

a) dziesi˛etnej,

b) szesnastkowej.

9. Opisz algorytm zamiany ułamka z postaci dziesi˛etnej na posta ´c dwójkow ˛

a.

10. Ile maksymalnie pyta ´n z odpowiedziami TAK/NIE trzeba zada´c, aby odgadn ˛

a´c licz-

b˛e z przedziału od 0 do 100 000?

11. Zastosuj algorytm wyznaczania pierwiastków do znalezienia pierwiastka stopnia 3

z liczby 512.

1.15

Problem: Waga

Wyobra´zmy sobie wag˛e szalkow ˛

a. Na jednej szalce, lewej, kładziemy jaki´s przedmiot do

zwa˙zenia, a nast˛epnie na obu szalkach kładziemy odwa˙zniki. Je˙zeli waga jest w równowa-
dze, to wa˙zony przedmiot ma wag˛e równ ˛

a sumie (nominałów) odwa˙zników poło˙zonych

na prawej szalce minus suma odwa˙zników poło˙zonych na lewej szalce, obok wa˙zonego
przedmiotu. Na przykład, je˙zeli na prawej szalce le˙z ˛

a odwa˙zniki

"

i

"

gramowe, a na

lewej odwa˙zniki

(

i

+

gramowe, to przedmiot wa˙zy

%

""

+

(

gramów.

Interesuj ˛

ace nas pytanie brzmi: jakie powinny by´c nominały poszczególnych odwa˙z-

ników, aby mo˙zna było zwa˙zy´c ka˙zdy ci˛e˙zar o wadze od

do

, przy jak najmniejszej

liczbie odwa˙zników. Zakładamy, ˙ze wa˙zymy tylko przedmioty o całkowitych wagach.

Poka˙z, ˙ze

(a) Za pomoc ˛

a

odwa˙zników mo˙zna zwa˙zyc co najwy˙zej

%

"

ró˙znych ci˛e˙zarów.

(b) Je˙zeli nominały odwa˙zników s ˛

a kolejnymi pot˛egami trójki, to znaczy

7

%

7

dla

, to za ich pomoc ˛

a mo˙zna zwa˙zy´c ka˙zdy (całkowity) ci˛e˙zar o nominale

od 1 do

%

"

.

Wskazówki:
(a) Poniewa˙z ka˙zdy odwa˙znik mo˙ze si˛e znajdowa´c na prawej lub lewej szalce, lub na stole,
to mamy

%

ró˙znych poło˙ze ´n odwa˙zników. W´sród tych poło˙ze ´n jest takie, gdzie wszystkie

odwa˙zniki le˙z ˛

a na stole (wtedy wa˙zymy zerowy ci˛e˙zar). Ponadto je˙zeli odwa˙zniki le˙z ˛

a

na szalkach i odwa˙zaj ˛

a ci˛e˙zar

, to zamieniwszy poło˙zenia odwa˙zników na szalkach

(odwa˙zniki z lewej przekładamy na praw ˛

a szalk˛e, i na odwrót), b˛edziemy odwa˙za ´c ci˛e˙zar

.

background image

20

Rozdział 1. Arytmetyka

(b) Rozło˙zenie odwa˙zników przy wa˙zeniu ci˛e˙zaru

odpowiada przedstawieniu

w

postaci

3

6

7

8

1

7

%

7

(1.5)

gdzie

1

7

- !

. Aby przedstawi´c ci˛e˙zar

w postaci (1.5), najpierw przedstawia-

my liczb˛e

%

"

w systemie trójkowym:

%

"

3

!!

,

a nast˛epnie od ka˙zdej cyfry odejmujemy jedynk˛e:

1

7

7

.