• Nie Znaleziono Wyników

Rozdzial 02 - Arytmetyka

N/A
N/A
Protected

Academic year: 2021

Share "Rozdzial 02 - Arytmetyka"

Copied!
21
0
0

Pełen tekst

(1)

Matematyka Dyskretna

Andrzej Szepietowski

(2)
(3)

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:

178

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:

178 = 1 · 100 + 7 · 10 + 8 · 1, albo inaczej: 178 = 1 · 102 + 7 · 101 + 8 · 100 .

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, 1, 2, 3, 4, 5, 6, 7, 8, 9,

a zapis:

drdr−1. . . d1d0

oznacza liczb˛e:

dr· 10r+ dr−1· 10r−1+ . . . + d1· 101+ d0· 100, (1.1)

któr ˛a mo˙zemy te˙z zapisa´c w postaci:

r

X

i=0

di· 10i, (1.2)

(4)

gdzie dis ˛a cyframi nale˙z ˛acymi do zbioru{0, . . . , 9}.

Liczby mo˙zna te˙z zapisywa´c w systemach z inn ˛a baz ˛a. Je˙zeli za baz˛e systemu wybie-rzemy liczb˛e b, to potrzebujemy b cyfr, a zapis:

drdr−1. . . d1d0

oznacza w systemie z baz ˛a b liczb˛e:

dr· br+ dr−1· br−1+ . . . + d1· b1+ d0· b0, (1.3)

któr ˛a mo˙zemy te˙z zapisa´c w postaci:

r

X

i=0

di· bi. (1.4)

1.2

System dwójkowy

W informatyce bardzo wa˙znym systemem jest system dwójkowy (binarny), gdzie pod-staw ˛a jest liczba2 i gdzie mamy tylko dwie cyfry, 0 i 1 (cyfry w systemie dwójkowym

nazywa si˛e bitami). Zapis:

drdr−1. . . d1d0 oznacza liczb˛e: dr· 2r+ dr−1· 2r−1+ . . . + d1· 21+ d0· 20 lub: r X i=0 di· 2i.

Przykład 1.1 Zapis110 oznacza w systemie dwójkowym liczb˛e:

1 · 22

+ 1 · 21

+ 0 · 20

,

czemu w systemie dziesi˛etnym odpowiada4 + 2 = 6. Podobnie zapis: 1101101

oznacza w systemie dziesi˛etnym liczb˛e64 + 32 + 8 + 4 + 1 = 109.

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ójdwój-kowej i dziesi˛etnej.

(5)

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.

(6)

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 liczby100100111 to 100101000.

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 liczbie11111 jest liczba 100000.

Zauwa˙zmy, ˙ze podobnie działa algorytm zwi˛ekszania o jeden liczb w systemie dziesi˛et-nym (lub dowoldziesi˛et-nym indziesi˛et-nym 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 1011010 > 1010101. 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

(7)

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:

drdr−1. . . d0,

erer−1. . . e0,

dla kolejnych pozycji i od 0 do r obliczamy bit sumy sioraz ci— tak zwany bit

przenie-sienia do nast˛epnej pozycji:

• najpierw obliczamy s0oraz c0:

s0= (d0+ e0) mod 2 (s0jest reszt ˛a z dzielenia d0+ e0przez 2),

c0= d0e0,

• nast˛epnie po kolei, dla ka˙zdego i od 1 do r, obliczamy: si= (di+ ei+ ci−1) mod 2,

ci= 1, je˙zeli co najmniej dwa spo´sród bitów di, eioraz ci−1s ˛a jedynkami,

• na ko´ncu obliczamy najbardziej znacz ˛acy bit sumy sr+1= cr.

Wynikiem dodawania jest liczba

sr+1sr. . . s0

(mo˙ze si˛e zdarzy´c, ˙ze sr+1= 0).

Przykład 1.5 Dodawanie liczb10101 i 111 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 liczb10101 i 111 wygl ˛ada nast˛epuj ˛aco: 1 0 1 0 1

1 1 1

(8)

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 liczb10101 i 101:

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 dwa oznacza dopisa-nie jednego zera na ko ´ncu liczby. Podobdopisa-nie pomno˙zedopisa-nie liczby przez i-t ˛a pot˛eg˛e dwójki oznacza dopisanie na ko ´ncu liczby i zer.

Przykład 1.8 1101101 pomno˙zone przez 1000 daje wynik 1101101000.

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 dwa, to ma w postaci binarnej zero na ko ´ncu, a je˙zeli dzieli si˛e przez i-t ˛a pot˛eg˛e dwójki, to ma na ko ´ncu i zer. Podzielenie liczby przez dwa oznacza skre´slenie w jej postaci binarnej jednego zera z ko ´nca.

Przykład 1.9 1010011000 podzielone przez dwa daje 101001100.

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 b oznaczymy przez:

(drdr−1. . . d1d0)b.

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

(9)

1.6. Zamiana systemu 9

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

(110101)2= 1 · 25+ 1 · 24+ 0 · 23+ 1 · 22+ 0 · 21+ 1 · 20,

i wykonujemy wszystkie rachunki w systemie dziesi˛etnym:

(110101)2= 1 · 32 + 1 · 16 + 0 · 8 + 1 · 4 + 0 · 2 + 1 · 1 = 32 + 16 + 4 + 1 = (53)10.

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):

(53)10= 5 · 101+ 3 · 100,

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

(53)10= (101)2· (1010)2+ (11)2= (110010)2+ (11)2= (110101)2.

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ładzie128 = 27),

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:

178 = 128 + 50 = 128 + 32 + 18 = 128 + 32 + 16 + 2.

Teraz ju˙z łatwo zapisa´c nasz ˛a liczb˛e w postaci dwójkowej:

(178)10= (10110010)2.

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

(10)

Reszty zapisane w odwrotnej kolejno´sci:

10110010,

tworz ˛a binarny zapis liczby(178)10. Poprawno´s´c działania tego algorytmu wynika z

fak-tu, ˙ze je˙zeli podzielimy liczb˛e

x=

r

X

i=0

di· 2i

przez 2, to reszta z dzielenia wyniesie d0, a iloraz całkowitoliczbowy wyniesie:

r

X

i=1

di· 2i−1,

nast˛epne dzielenie przez 2 da reszt˛e d1oraz iloraz:

r

X

i=2

di· 2i−2,

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 b. Nale˙zy tylko dzieli´c przez b. Je˙zeli chcemy, na przykład, przedstawi´c liczb˛e60 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: (60)10= (2020)3.

1.7

Długo´s´c liczby

Zastanówmy si¸e ile cyfr zawiera zapis dziesi¸etny liczby naturalnej x. Cztery cyfry w systemie dziesi¸etnym posiadaj¸a liczby od1000 = 103 do 9999 = 104− 1, a k cyfr

posiadaj¸a liczby od10k−1do10k− 1. Tak wi¸ec liczba x ma k cyfr wtedy i tylko wtedy

gdy k− 1 ≤ log10x < k, czyli gdyblog10xc = k − 1. Mamy wi˛ec

Lemat 1.10 Liczba naturalna x ma w systemie dziesi¸etnymblog10c + 1 (w przybli˙zeniu

log10x) cyfr.

Podobnie w systemie z podstaw¸a b, liczba x ma k cyfr wtedy i tylko wtedy gdy k−1 ≤

(11)

1.8. Du˙ze liczby 11

Lemat 1.11 W systemie o podstawie b liczba naturalna x mablogbc + 1 (w przybli˙zeniu

logbx) 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 k cyfr w systemie dziesi¸etnym ma około klog210 ≈

k· 10

3 bitów w systemie dwójkowym, a liczba maj¸aca k bitów w postaci dwójkowej ma około k·103 cyfr w postaci dziesi¸etnej.

Dowód: Je˙zeli liczba x ma w postaci dziesi˛etnej k cyfr, to k≈ log10x. W postaci

dwój-kowej x ma okołolog2x bitów, alog2x = log10x· log210 ≈ k · log210 ≈ k · 10

3,

poniewa˙zlog102 ≈ 0.301029996 ≈ 3 10.

Podobnie, je˙zeli liczba x ma w postaci dwójkowej k bitów, to w postaci dziesi˛etnej ma okołolog10x= log102 · log2x≈ k · 103.

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 ≈ 3 × 107 Wiek układu słonecznego w latach ≈ 1010 Wiek układu słonecznego w sekundach ≈ 1017

Liczba cykli w roku (100 MHz) ≈ 3 × 1015 Liczba ci¸agów 64 bitowych 264≈ 1.8 × 1019

Liczba ci¸agów 128 bitowych 2128≈ 3.4 × 1038

Liczba ci¸agów 256 bitowych 2256≈ 1.2 × 1077

Liczba atomów na Ziemi ≈ 1051

Liczba atomów w naszej galaktyce ≈ 1067

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 x jest

pierw-sza. Algorytm ten dzieli x przez kolejne liczby od 2 dox. Je˙zeli x ma 120 bitów, to

potrzeba260

≈ 1018dziele´n. Je˙zeli zało˙zymy, ˙ze komputer potrafi wykona´c100 milionów dziele´n w ci¸agu sekundy i3×1015w 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

268= 108·log1026= 108·1.41>1011,

(12)

1.9

Ułamki

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

0.234

oznacza:

2 · 10−1+ 3 · 10−2+ 4 · 10−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:

0.d1d2. . . dr

oznacza liczb˛e:

d1· 10−1+ d2· 10−2+ . . . + dr· 10−r,

któr ˛a mo˙zemy te˙z zapisa´c w postaci:

r

X

i=1

di· 10−i.

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:

0.d1d2. . . dr oznacza liczb˛e: d1· 2−1+ d2· 2−2+ . . . + dr· 2−r, lub inaczej: r X i=1 di· 2−i. Przykład 1.15 (0.1)2= (0.5)10, (0.11)2= (0.75)10, (0.101)2= (0.625)10.

W poni˙zszej tabeli przedstawiono kilka pierwszych ujemnych pot˛eg liczby 2 w systemie dwójkowym i dziesi˛etnym. 2−1 (0.1)2 (0.5)10 2−2 (0.01) 2 (0.25)10 2−3 (0.001) 2 (0.125)10 2−4 (0.0001) 2 (0.0625)10 2−5 (0.00001) 2 (0.03125)10 2−6 (0.000001) 2 (0.015625)10

(13)

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, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

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 C znakami0x.

Przykład 1.16 Zapis$A1 oznacza liczb˛e w systemie szesnastkowym, która w systemie

dziesi˛etnym ma posta´c$A1 = 10 · 16 + 1 = (161)10

Dzi˛eki temu, ˙ze 16 jest pot˛eg ˛a dwójki, prosta jest zamiana postaci liczby z systemu 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$A91 w systemie

dwójkowym ma posta´c1010|1001|0001.

Przy zamianie z postaci dwójkowej na posta´c szesnastkow ˛a post˛epujemy odwrotnie. Za-st˛epujemy grupy po cztery bity pojedynczymi cyframi.

(14)

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 (110|1111|0110|0010)2= (0110|1111|0110|0010)2= $6F 62.

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 liczba15 jest przechowywana jako:

0000|0000|0000|1111.

Najwi˛eksz ˛a liczb˛e dodatni ˛a, jak ˛a mo˙zna przechowa´c w zmiennej typu integer, jest:

0111|1111|1111|1111,

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

215

− 1 = (32767)10.

Liczby ujemne s ˛a przechowywane w tak zwanym systemie uzupełnieniowym. Liczba ujemna o warto´sci bezwzgl˛ednej x jest przedstawiana jako liczba:

216

− x

w postaci binarnej. Na przykład liczba−1 jest przedstawiona jako:

1111|1111|1111|1111,

czyli szesna´scie jedynek. A liczba−3 jako:

1111|1111|1111|1101.

Najmniejsza liczba ujemna, któr ˛a mo˙zna zmie´sci´c do zmiennej typu integer, to:

(15)

1.11. Reprezentacja liczb w komputerze 15

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

−215

= (−32768)10.

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

prze-chowywana jako:

0111|1111|1111|1111,

dodamy jedynk˛e, to otrzymamy:

1000|0000|0000|0000,

która koduje liczb˛e−32768, 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:

0.10, 11.023, 12.0,

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:

mEc,

gdzie m jest mantys ˛a, liczb ˛a w postaci dziesi˛etnej z przedziału1 ≤ m < 10 lub −10 <

m≤ −1, a c, zwana cech ˛a, jest liczb ˛a całkowit ˛a. Zapis mEc oznacza liczb˛e:

m· 10c

.

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

4837.92 4.83792E3

0.034 3.4E − 2

−12.0 −1.2E1

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

(16)

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 −128 do 127, • byte, zawiera liczby całkowite z przedziału od 0 do 255, • word, zawiera liczby całkowite z przedziału od 0 do 65535,

• longint, zawiera liczby całkowite z przedziału od −2147483648 do 2147483647.

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:

234, −123, 0.123, −23.45, 3.21E − 5,

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˙zeliUorazWs ˛a dwoma wyra˙zenia-mi arytmetycznywyra˙zenia-mi, to wyra˙zeniawyra˙zenia-mi arytmetycznywyra˙zenia-mi 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 operacjedivorazmodto 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˙zelixorazys ˛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.

(17)

1.13. Poszukiwania binarne (binary search) 17

Upro´s´cmy nieco t˛e gr˛e. Załó˙zmy, ˙ze mo˙zemy zada´c tylko trzy pytania i ˙ze odgadujemy liczb˛e naturaln ˛a x ze zbioru:

A= {0, 1, 2, 3, 4, 5, 6, 7}.

Aby odgadn ˛a´c liczb˛e nale˙zy post˛epowa´c w nast˛epuj ˛acy sposób: Najpierw dzielimy zbiór na połowy: na liczby mniejsze od 4:

{0, 1, 2, 3}

i na liczby wi˛eksze lub równe 4:

{4, 5, 6, 7}

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 i post˛epujemy z nim podobnie jak w pierwszej turze, dzielimy go na połowy i pytamy, w której połowie jest szukana liczba. Po drugiej odpowiedzi przedział poszuki-wa´n jest ju˙z cztery razy krótszy i zawiera dwie liczby. W trzecim pytaniu, znowu dzielimy przedział na polowy i pytamy, w której połowie znajduje si˛e szukana liczba. Po trzeciej odpowiedzi przedział poszukiwa ´n jest ju˙z osiem razy krótszy od wyj´sciowego i zawiera jedn ˛a liczb˛e, która jest t ˛a szukan ˛a.

Prze´sled´zmy ten algorytm w przypadku, gdy szukan ˛a liczb ˛a x jest 5. Po odpowiedzi na pierwsze pytanie wiemy, ˙ze x jest w zbiorze{4, 5, 6, 7}. W drugiej rundzie dzieli-my ten zbiór na połowy:{4, 5} oraz {6, 7} i pytamy, czy x jest w górnej połowie. Po negatywnej odpowiedzi wiemy, ze x jest w{4, 5}. W trzeciej rundzie pytamy, czy x = 5. Strategi˛e gry w trzy pytania mo˙zna przedstawi´c za pomoc ˛a uko˙zenionego drzewa, patrz rysunek 1.1. Gr˛e rozpoczynamy w korzeniu (wierzchołku z etykiet ˛a λ). Z tym wierz-chołkiem zwi ˛azany jest cały zbiór{0, 1, 2, 3, 4, 5, 6, 7}. Z synami korzenia zwi ˛azane s ˛a połówki tego zbioru, z wierzchołkiem1 zwi ˛azany jest zbiór{4, 5, 6, 7}, a z wierzchoł-kiem0 zbiór {0, 1, 2, 3}. Je˙zeli po odpowiedzi na pierwsze pytanie dowiemy si˛e, ˙ze szu-kana liczba jest w górnej połowie, to przechodzimy do wierzchołka1, w przeciwnym

przypadku przechodzimy do0. Ogólnie, je˙zeli z wierzchołkiem v z etykiet ˛a ω zwi ˛azany jest zbiór Aω i ten zbiór ma wi˛ecej ni˙z jeden element, to prawy syn wierzchołka v ma

etykiet˛e ω1 i jest z nim zwi ˛azana górna połowa zbioru Aω, a lewy syn ma etykiet˛e ω0 i

jest z nim zwi ˛azana dolna połowa zbioru Aω. Je˙zeli w toku gry trafimy do wierzchołka

v, to pytamy, czy szukany element znajduje si˛e w górnej, czy w dolnej połowie zbioru Aωi po uzyskaniu odpowiedzi przechodzimy do odpowiedniego syna. Wierzchołek jest

li´sciem, je˙zeli zwi ˛azany z nim zbiór ma tylko jeden element.

Je˙zeli szukanym elementem jest5, to z wierzchołka λ przejdziemy do wierzchołka 1,

potem do10, a na koniec trafimy do wierzchołka 101, który jest zwi ˛azany ze zbiorem jed-noelementowym{5}. Nie jest przypadkiem, ˙ze etykieta wierzchołka odpowiada postaci dwójkowej liczby, któr ˛a zawiera. Tak dobrali´smy bowiem zbiór wyj´sciowy A. Mo˙zemy powiedzie´c, ˙ze zawiera on wszytkie liczby trzy bitowe

(18)

Rysunek 1.1: λ 0 00 000 001 01 010 011 1 10 100 101 11 110 111

Liczby ze zbioru A1 = {100, 101, 110, 111} zwi ˛azanego z wierzchołkiem 1 maj ˛a

pierw-szy bit równy1, a liczby ze zbioru A0 = {000, 001, 010, 011} zwi ˛azanego z

wierzchoł-kiem0 maj ˛a pierwszy bit równy0, i ogólnie liczby ze zbioru Aωzwi ˛azanego z

wierzchoł-kiem ω maj ˛a swoje pierwsze bity równe ω. Na przykład z wierzchołkiem10 zwi ˛azany jest zbiór A10= {100, 101}.

Zauwa˙zmy tak˙ze, ˙ze kolejne pytania, s ˛a pytaniami o koljne bity szukanej liczby. W pierwszym pytaniu pytamy o pierwszy, w drugim o drugi, a w trzecim o trzeci bit szukanej liczby.

Oczywi´scie taka zgodno´s´c pomi˛edzy bitami szukanej liczby i etykietami wierzchoł-ków drzewa nie wyst ˛api przy innym ponumerowaniu elementów wyj´sciowego zbioru.

Jak zobaczyli´smy trzeba trzy razy kolejno dzieli´c zbiór na połowy, aby z pocz ˛ atko-wego zbioru 8 elemntoatko-wego doj´s´c na ko´ncu do zbiorów jednoelementowych. A ile trzeba podziałów, je˙zeli na pocz ˛atku mamy n = 2k elementów? Po pierwszym podziale nasz

zbiór b˛edzie miał2k−1elementów, po drugim2k−2, a po i-tym2k−i. Jak wida´c, potrzeba

k= log2n kolejnych podziałów, aby doj´s´c do zbioru jednoelementowego. Tak wi˛ec je˙zeli

mamy do dyspozycji20 pyta ´n, to mo˙zemy odnale´z´c jedn ˛a spo´sród220liczb całkowitych

z przedziału od0 do 220− 1 = 1 048 575.

1.13.1

Poszukiwanie pierwiastka

Metod˛e poszukiwa ´n binarnych mo˙zna zastosowa´c do stwierdzenia, czy jaka´s liczba natu-ralna n jest kwadratem (lub jak ˛a´s inn ˛a ustalon ˛a pot˛eg ˛a) innej liczby naturalnej. Inaczej, czy istnieje liczba naturalna k taka, ˙ze k2= n, lub ogólniej, czy istnieje liczba naturalna k taka, ˙ze kα= n.

(19)

1.14. Zadania 19

Poni˙zej przedstawiamy taki algorytm. Algorytm ten u˙zywa dwoch dodatkowych zmien-nych kdi kg, warto´sci tych zmiennych przybli˙zaj ˛a pierwiastek stopnia α z n 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 n jest pot˛eg ˛a o wykładniku α jakiej´s liczby naturalnej.

Dane wej´sciowe: liczba naturalna n.

Dane wyj´sciowe: pierwiastek stopnia α z n, (liczba naturalna m, taka ˙ze mα = n) lub

informacja, ˙ze n nie ma pierwiastka stopnia α.

• kd:= 1

• kg:= n

• Powtarzaj a˙z do skutku:

 je˙zeli kg− kd≤ 1, to koniec, n nie ma pierwiastka.

 j := bkd+kg

2 c

 je˙zeli jα= n, to koniec, n jest pot˛eg ˛a j.

 je˙zeli jα> n, to k g:= j

 je˙zeli jα< n, to k d:= j.

1.14

Zadania

1. Zwi˛eksz o jeden nast˛epuj ˛ace liczby:

a) (11010011)2, (111111)2, (110011011)2,

b) (2012)3, (10222)3,

c) (2013)4, (10233)4.

2. Porównaj nast˛epuj ˛ace pary liczb: a) (110011)2,(110100)2,

b) (11010)2,(1110)2,

c) (12121)3,(12201)3,

d) (33132)4,(33201)4.

3. Dodaj (odejmij, pomnó˙z) nast˛epuj ˛ace pary liczb: a)(110011)2,(110100)2; b)

(11010)2,(1110)2; c)(11101)2,(1111)2.

4. Dodaj w postaci trójkowej liczby(2101)3oraz(1212)3.

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

6. Liczby(81)10,(126)10,(200)10,(257)10,(258)10,(1025)10,(1023)10przedstaw

(20)

7. Jak liczby4, 20, −4, −20 b˛ed ˛a reprezentowane w komputerze jako stałe typu inte-ger (byte, word)?

8. Liczby $B1, $FF przedstaw w postaci dwójkowej i dziesi˛etnej.

9. Liczby(80)10,(120)10przedstaw w postaci trójkowej.

10. Liczby(10001101)2,(100101)2, przedstaw w postaci: a) dziesi˛etnej, b)

szesnast-kowej.

11. Ułamki(0.5625)10,(0.140625)10przedstaw w postaci dwójkowej.

12. Ułamki(0.1101)2,(0.01101)2,(0.0011)2przedstaw w postaci dziesi˛etnej.

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

14. Ile maksymalnie pyta ´n z odpowiedziami TAK/NIE trzeba zada´c, aby odgadn ˛a´c licz-b˛e: a) z przedziału od 0 do 100 000 b) z przedziału od 0 do 1 000 000?

15. Zastosuj algorytm wyznaczania pierwiastków do znalezienia nast˛epuj ˛acych pier-wiastków:√2

256,√2

1000,√3

512,√4

256.

16. Sprawd´z, czy liczby 111, 1111 s ˛a pot˛egami liczb całkowitych.

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˙zniki2 i 20 gramowe, a na

lewej odwa˙zniki4 i 5 gramowe, to przedmiot wa˙zy 13 = (20 + 2) − (5 + 4) 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 od1 do N , przy jak najmniejszej

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

(1) Za pomoc ˛a k odwa˙zników mo˙zna zwa˙zyc co najwy˙zej 3k−1

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

(2) Je˙zeli nominały odwa˙zników s ˛a kolejnymi pot˛egami trójki, to znaczy ci = 3idla

0 ≤ i ≤ k−1, to za ich pomoc ˛amo˙zna zwa˙zy´c ka˙zdy (całkowity) ci˛e˙zar o nominale

od 1 do3k−1 2 .

(3) Jak nale˙zy uło˙zy´c na szalkach odwa˙zniki o nominałach 1, 3, 9, 27, aby odwa˙zyc ci˛e˙zar: a) 35, b) 29?

(21)

1.15. Problem: Waga 21

(5) Jak nale˙zy uło˙zy´c na szalkach odwa˙zniki o nominałach b˛ed ˛acych pot˛egami trójki aby odwa˙zyc ci˛e˙zar: a) 50, b) 200, c) 500?

Wskazówki:

(1) Poniewa˙z ka˙zdy odwa˙znik mo˙ze si˛e znajdowa´c na prawej lub lewej szalce, lub na stole, to mamy3k 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 od-wa˙zniki le˙z ˛a na szalkach i odwa˙zaj ˛a ci˛e˙zar W , 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−W .

(2) Rozło˙zenie odwa˙zników przy wa˙zeniu ci˛e˙zaru W odpowiada przedstawieniu W w postaci

W =

k−1X i=0

di3i, (1.5)

gdzie di∈ {−1, 0, 1}. Aby przedstawi´c ci˛e˙zar W w postaci (1.5), najpierw

przedstawia-my liczb˛e W+3k −1 2 w systemie trójkowym: W+ 3k −1 2 = (ek−1. . . e1e0)3, a nast˛epnie

Obraz

Tabela ta pozwala oceni´c niektóre algorytmy.

Cytaty

Powiązane dokumenty

czy o tym, że Autor potraktował kulturkampf na ziemiach polskich jako jeden z etapów polityki antypolskiej Prus.. Nie jest to pogląd

Spierali się nie o to, czy zdania, w których o jakimś x orzekamy, że jest człowiekiem, odnoszą się do pewnych faktów, tylko o to, jak to się dzieje..

Jeżeli jakieś dane em ­ piryczne przemawiają przeciw jednej lub drugiej teorii, powstały konflikt traktuje się jako dowód na to, że teoria nie stosuje się do sytuacji,

• Test wielokrotnego wyboru (mo˙ze by´c wi ˛ecej ni˙z jedna poprawna odpowied´z; wszystkie odpowiedzi mog ˛ a by´c fałszywe).. • Link do karty odpowiedzi znajduje si ˛e

Wysoko´s´c poprowadzona w trójk ˛ acie mo˙ze pada´c na bok, wierzchołek lub przedłu˙zenie boku przeciwległego wierzchołkowi, z którego jest wyprowadzona. Je˙zeli na ka˙zdym

[r]

Podaj przykªad topologii w zbiorze X = {a, b, c, d}, która nie jest ani trywialna, ani dyskretna, a dla której ka»dy zbiór otwarty jest jedno- cze±nie domkni

Co istotne, w naszym wyk ladzie interesowa´ c nas b¸ ed¸ a zawsze przestrzenie sko´ nczenie