Matematyka dyskretna Arytmetyka

Podobne dokumenty
Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

Arytmetyka. Arytmetyka. Magdalena Lemańska. Magdalena Lemańska,

Matematyka Dyskretna. Andrzej Szepietowski. 17 marca 2003 roku

System liczbowy binarny.

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

MATEMATYKA W SZKOLE HELIANTUS WARSZAWA UL. BAŻANCIA 16 SYSTEMY LICZBOWE POZYCYJNE DECYMALNY, BINARNY, OKTALNY. Warszawa pażdziernik 2017

DYDAKTYKA ZAGADNIENIA CYFROWE ZAGADNIENIA CYFROWE

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia.

MATEMATYKA W SZKOLE HELIANTUS LICZBY NATURALNE I CA LKOWITE

Liczby naturalne i ca lkowite

1.1. Pozycyjne systemy liczbowe

Luty 2001 Algorytmy (7) 2000/2001

Architektura systemów komputerowych

Systemy zapisu liczb.

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

ARCHITEKTURA KOMPUTERÓW Systemy liczbowe

1259 (10) = 1 * * * * 100 = 1 * * * *1

Podstawy Informatyki dla Nauczyciela

SYSTEMY LICZBOWE. Zapis w systemie dziesiętnym

Kod U2 Opracował: Andrzej Nowak

Liczba 2, to jest jedyna najmniejsza liczba parzysta i pierwsza. Oś liczbowa. Liczba 1, to nie jest liczba pierwsza

Wstęp do informatyki- wykład 1 Systemy liczbowe

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

SYSTEMY LICZBOWE 275,538 =

Znaki w tym systemie odpowiadają następującym liczbom: I=1, V=5, X=10, L=50, C=100, D=500, M=1000

Wstęp do informatyki- wykład 1

Ćwiczenie nr 1: Systemy liczbowe

0.1 Sposȯb rozk ladu liczb na czynniki pierwsze

Systemy liczbowe używane w technice komputerowej

Wstęp do programowania. Reprezentacje liczb. Liczby naturalne, całkowite i rzeczywiste w układzie binarnym

Arytmetyka liczb binarnych

MATEMATYKA REPREZENTACJA LICZB W KOMPUTERZE

B.B. 2. Sumowanie rozpoczynamy od ostatniej kolumny. Sumujemy cyfry w kolumnie zgodnie z podaną tabelką zapisując wynik pod kreską:

ARCHITEKRURA KOMPUTERÓW Kodowanie liczb ze znakiem

Wykład 2. Informatyka Stosowana. 9 października Informatyka Stosowana Wykład 2 9 października / 42

Wykład 2. Informatyka Stosowana. 10 października Informatyka Stosowana Wykład 2 10 października / 42

Plan wyk ladu. Kodowanie informacji. Systemy addytywne. Definicja i klasyfikacja. Systemy liczbowe. prof. dr hab. inż.

Pracownia Komputerowa wykład IV

Podstawy Informatyki

Pierwiastki arytmetyczne n a

Pracownia Komputerowa wyk ad IV

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

System liczbowy jest zbiorem reguł określających jednolity sposób zapisu i nazewnictwa liczb.

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

Technologie Informacyjne

Zapis liczb binarnych ze znakiem

Kod uzupełnień do dwóch jest najczęściej stosowanym systemem zapisu liczb ujemnych wśród systemów binarnych.

Przedmiot: Urządzenia techniki komputerowej Nauczyciel: Mirosław Ruciński

Metoda znak-moduł (ZM)

Wstęp do informatyki- wykład 2

Kod znak-moduł. Wartość liczby wynosi. Reprezentacja liczb w kodzie ZM w 8-bitowym formacie:

Algorytmy i struktury danych. Wykład 4

0.1 Reprezentacja liczb w komputerze

Pozycyjny system liczbowy

Cia la i wielomiany Javier de Lucas

DZIAŁANIA NA UŁAMKACH DZIESIĘTNYCH.

Wielkości liczbowe. Wykład z Podstaw Informatyki dla I roku BO. Piotr Mika

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5.

Jednostki informacji. Bajt moŝna podzielić na dwie połówki 4-bitowe nazywane tetradami (ang. nibbles).

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Systemy liczbowe. System dziesiętny

Urządzenia Techniki. Klasa I TI. System dwójkowy (binarny) -> BIN. Przykład zamiany liczby dziesiętnej na binarną (DEC -> BIN):

Operacje arytmetyczne

Wielkości liczbowe. Wykład z Podstaw Informatyki. Piotr Mika

Informatyka kodowanie liczb. dr hab. inż. Mikołaj Morzy

MNOŻENIE W SYSTEMACH UZUPEŁNIENIOWYCH PEŁNYCH (algorytm uniwersalny)

Matematyka dyskretna Oznaczenia

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 5 Liczby w komputerze

Teoretyczne Podstawy Informatyki

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Dodawanie liczb binarnych

Metoda Simplex bez użycia tabel simplex 29 kwietnia 2010

Matematyka Dyskretna Zestaw 2

Pracownia Komputerowa wyk ad VI

1. Operacje logiczne A B A OR B

KOŁO MATEMATYCZNE LUB INFORMATYCZNE - klasa III gimnazjum, I LO

Systemy liczbowe. 1. System liczbowy dziesiętny

System Liczbowe. Szesnastkowy ( heksadecymalny)

WYRAŻENIA ALGEBRAICZNE

Zestaw 3. - Zapis liczb binarnych ze znakiem 1

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

Wykład 2. Informatyka Stosowana. 8 października 2018, M. A-B. Informatyka Stosowana Wykład 2 8 października 2018, M. A-B 1 / 41

Cyfrowy zapis informacji. 5 grudnia 2013 Wojciech Kucewicz 2

Plan wyk ladu. Kodowanie informacji. Reprezentacja binarna. Reprezentacja liczb. Reprezentacja liczb. prof. dr hab. inż.

LISTA 1 ZADANIE 1 a) 41 x =5 podnosimy obustronnie do kwadratu i otrzymujemy: 41 x =5 x 5 x przechodzimy na system dziesiętny: 4x 1 1=25 4x =24

RODZAJE INFORMACJI. Informacje analogowe. Informacje cyfrowe. U(t) U(t) Umax. Umax. R=(0,Umax) nieskończony zbiór możliwych wartości. Umax.

Pracownia Komputerowa wyk ad V

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Kodowanie informacji. Kody liczbowe

Podstawy Informatyki

Liczby rzeczywiste są reprezentowane w komputerze przez liczby zmiennopozycyjne. Liczbę k można przedstawid w postaci:

Wprowadzenie do informatyki - ć wiczenia

Wyk lad 9 Podpierścienie, elementy odwracalne, dzielniki zera

L6.1 Systemy liczenia stosowane w informatyce

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

Transkrypt:

Matematyka dyskretna Arytmetyka Andrzej Szepietowski 1 System dziesiȩtny Najpowszechniej używanym sposobem przedstawiania liczb naturalnych jest system dziesiȩtny, gdzie na przyk lad zapis: 178 przedstawia liczbȩ sk ladaj ac a siȩ z jednej setki, siedmiu dziesi atek i ośmiu jedności. Możemy to zapisać w postaci: 178 = 1 100 + 7 10 + 8 1, albo inaczej: 178 = 1 10 2 + 7 10 1 + 8 10 0. Tak wiȩc w systemie dziesiȩtnym kolejne cyfry oznaczaj a wspó lczynniki przy kolejnych potȩgach liczby dziesiȩć, zaczynaj ac od najwiȩkszej, a kończ ac na najmniejszej potȩdze. Mówimy, że liczba dziesiȩć jest podstaw a lub baz a systemu dziesiȩtnego. W systemie dziesiȩtnym używamy dziesiȩciu cyfr: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a zapis: oznacza liczbȩ: d r d r 1... d 1 d 0 d r 10 r + d r 1 10 r 1 +... + d 1 10 1 + d 0 10 0, (1) któr a możemy też zapisać w postaci: d i 10 i, (2) i=0 gdzie d i s a cyframi należ acymi do zbioru {0,..., 9}. Liczby można też zapisywać w systemach z inn a baz a. Jeżeli za bazȩ systemu wybierzemy liczbȩ b, to potrzebujemy b cyfr, a zapis: d r d r 1... d 1 d 0 oznacza w systemie z baz a b liczbȩ: któr a możemy też zapisać w postaci: d r b r + d r 1 b r 1 +... + d 1 b 1 + d 0 b 0, (3) d i b i. (4) i=0 1

2 System dwójkowy W informatyce bardzo ważnym systemem jest system dwójkowy (binarny), gdzie podstaw a jest liczba 2 i gdzie mamy tylko dwie cyfry, 0 i 1 (cyfry w systemie dwójkowym nazywa siȩ bitami). Zapis: d r d r 1... d 1 d 0 oznacza liczbȩ: d r 2 r + d r 1 2 r 1 +... + d 1 2 1 + d 0 2 0 lub: d i 2 i. i=0 Na przyk lad, zapis 110 oznacza w systemie dwójkowym liczbȩ: czemu w systemie dziesiȩtnym odpowiada: 1 2 2 + 1 2 1 + 0 2 0, 4 + 2 = 6. Podobnie zapis: oznacza w systemie dziesiȩtnym liczbȩ: 1101101 64 + 32 + 8 + 4 + 1 = 109. W poniższej tabeli przedstawiono kilkanaście kolejnych liczb w postaci dwójkowej i dziesiȩtnej, a w nastȩpnej kilkanaście pierwszych potȩg liczby 2 w postaci dwójkowej i dziesiȩtnej. dwójkowy dziesiȩtny 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 2

3 Zwiȩkszanie liczby o jeden potȩga dwójkowy dziesiȩtny 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 Algorytm zwiȩkszania liczby o jeden. dwójkowym: Aby zwiȩkszyć o jeden liczbȩ zapisan a w systemie wskazujemy na ostatni bit, powtarzamy, co nastȩpuje: jeżeli wskazany bit jest zerem, to zamieniamy go na jedynkȩ i kończymy algorytm, jeżeli jest on równy jeden, to zamieniamy go na zero i wskazujemy nastȩpny bit w lewo; jeżeli nie ma nastȩpnego bitu w lewo, to stawiamy jedynkȩ na pocz atku liczby i kończymy algorytm. Mówi ac inaczej, szukamy pierwszego zera od prawej strony, zamieniamy go na jedynkȩ, a wszystkie jedynki stoj ace za nim zamieniamy na zera. Na przyk lad, liczba o jeden wiȩksza od liczby to 100100111 100101000. Jeżeli liczba nie zawiera zer, tylko same jedynki, to zamieniamy te jedynki na zera i stawiamy jedynkȩ na pocz atku. Na przyk lad, po liczbie jest liczba 11111 100000. Zauważmy, że podobnie dzia la algorytm zwiȩkszania o jeden liczb w systemie dziesiȩtnym (lub dowolnym innym systemie). Szukamy pierwszej od prawej cyfry różnej od dziewi atki (najwiȩkszej cyfry w systemie), zwiȩkszamy tȩ cyfrȩ o jeden, a wszystkie stoj ace za ni a dziewi atki zamieniamy na zera. 3

4 Porównywanie liczb Algorytm porównywania liczb. Aby stwierdzić, która z dwóch liczb jest wiȩksza, postȩpujemy w nastȩpuj acy sposób: jeżeli zapisy liczb nie s a tej samej d lugości, to wiȩksz a jest liczba z d luższym zapisem (zak ladamy tu, że zapis liczby różnej od zera nie ma zer na pocz atku), jeżeli zapisy liczb s a równej d lugości, to porównujemy bit po bicie od lewej strony do prawej: jeżeli bity s a takie same, to przechodzimy do nastȩpnego bitu w prawo, jeżeli bity s a różne, to kończymy i stwierdzamy, że wiȩksza jest ta liczba, która ma wiȩkszy bit na tej pozycji, jeżeli wszystkie bity s a takie same, to porównywane liczby s a równe. Na przyk lad: 1011010 > 1010101. Powyższe liczby s a tej samej d lugości i maj a takie same trzy pierwsze bity, a różni a siȩ dopiero czwartym bitem czwarty bit pierwszej liczby (1) jest wiȩkszy od czwartego bitu drugiej liczby (0). 5 Operacje arytmetyczne w systemie dwójkowym Operacje dodawania, mnożenia, odejmowania i dzielenia w systemie dwójkowym można wykonywać podobnie do tak zwanych szkolnych pisemnych dzia lań arytmetycznych w systemie dziesiȩtnym. Dzia lania w systemie dwójkowym s a prostsze, ponieważ mamy tu tylko dwie cyfry, 0 i 1, i prostsze s a operacje na pojedynczych cyfrach. Zacznijmy od tabliczki dodawania i mnożenia. Wygl adaj a one tak: + 0 1 0 0 1 1 1 10 * 0 1 0 0 0 1 0 1 Przypuśćmy, że chcemy dodać dwie liczby w postaci dwójkowej. Zak ladamy tu, że obie liczby s a tej samej d lugości. Jeżeli nie s a, to krótsz a z nich uzupe lniamy na pocz atku zerami. Algorytm dodawania. Aby dodać dwie liczby w postaci binarnej: d r d r 1... d 0, e r e r 1... e 0, dla kolejnych pozycji i od 0 do r obliczamy bit sumy s i oraz c i tak zwany bit przeniesienia do nastȩpnej pozycji: 4

najpierw obliczamy s 0 oraz c 0 : s 0 = d 0 + e 0 (mod 2) (czyli s 0 jest reszt a z dzielenia d 0 + e 0 przez 2), c 0 = d 0 e 0, nastȩpnie po kolei, dla każdego i od 1 do r, obliczamy i-ty bit sumy wed lug wzoru: s i = d i + e i + c i 1 (mod 2), a bit c i jest jedynk a, jeżeli co najmniej dwa spośród bitów d i, e i oraz c i 1 s a jedynkami, na końcu obliczamy najbardziej znacz acy bit sumy: Wynikiem dodawania jest liczba s r+1 = c r. s r+1 s r... s 0 (może siȩ zdarzyć, że s r+1 = 0). Na przyk lad, dodawanie liczb 10101 i 111 wygl ada nastȩpuj aco: 1 0 1 0 1 + 1 1 1 1 1 1 0 0 Aby odj ać od siebie dwie liczby w systemie dwójkowym, odejmujemy bit po bicie od prawej do lewej, a w przypadku gdy trzeba odj ać bit wiȩkszy od mniejszego,,,pożyczamy dwójkȩ z nastȩpnej (w lewo) pozycji (szczegó ly algorytmu pozostawiono jako ćwiczenie). Na przyk lad, odejmowanie liczb 10101 i 111 wygl ada nastȩpuj aco: 1 0 1 0 1 1 1 1 1 1 1 0 Aby pomnożyć dwie liczby, mnożymy pierwsz a liczbȩ przez poszczególne cyfry drugiej liczby, a wyniki podpisujemy pod spodem odpowiednio przesuniȩte wzglȩdem siebie. Każdy kolejny wynik jest przesuniȩty o jedn a kolumnȩ w lewo. Nastȩpnie sumujemy te iloczyny. Oto przyk lad mnożenia liczb 10101 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 5

Zauważmy, że pomnożenie liczby w postaci dwójkowej przez 2 oznacza dopisanie jednego zera na końcu liczby. Podobnie pomnożenie przez i-t a potȩgȩ liczby 2 oznacza dopisanie na końcu liczby i zer. Na przyk lad: 1101101 pomnożone przez daje wynik 1000 1101101000. Również dzielenie wykonuje siȩ podobnie jak w systemie dziesiȩtnym. Na przyk lad: 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żeli liczba jest podzielna przez 2, to ma w postaci binarnej zero na końcu, a jeżeli dzieli siȩ przez i-t a potȩgȩ dwójki, to ma na końcu i zer. Podzielenie liczby przez 2 oznacza skreślenie w jej postaci binarnej jednego zera z końca. Na przyk lad: 1010011000 podzielone przez 2 daje: 101001100. 6 Zamiana systemu Zastanówmy siȩ teraz, jak przechodzić od jednego sposobu przedstawiania liczby do drugiego. Ponieważ bȩdziemy używać różnych systemów zapisu liczb, wiȩc zapis w systemie z baz a b oznaczymy przez: (d r d r 1... d 1 d 0 ) b. Bȩdziemy rezygnować z tego zapisu, jeżeli nie bȩdzie w atpliwości, jakiego systemu używamy. Przedyskutujmy to na przyk ladach. Aby przedstawić liczbȩ w postaci dziesiȩtnej, korzystamy ze wzoru 3: (110101) 2 (110101) 2 = 1 2 5 + 1 2 4 + 0 2 3 + 1 2 2 + 0 2 1 + 1 2 0, 6

i wykonujemy wszystkie rachunki w systemie dziesiȩtnym: (110101) 2 = 1 32 + 1 16 + 0 8 + 1 4 + 0 2 + 1 1 = 32 + 16 + 4 + 1 = (53) 10. Podobnie możemy postȩpować przy zamianie w odwrotn a stronȩ, z systemu dziesiȩtnego na dwójkowy. Najpierw korzystamy ze wzoru 1: (53) 10 = 5 10 1 + 3 10 0, nastȩpnie przedstawiamy cyfry i podstawȩ systemu 10 w postaci dwójkowej i wykonujemy wszystkie dzia lania 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ȩtnej na dwójkow a jest analogiczny do sposobu, w jaki wyżej zamienialiśmy liczby z postaci dwójkowej na dziesiȩtn a. By lby to naturalny sposób dla kogoś, kto swobodnie liczy w systemie dwójkowym. Sposób ten ma tȩ wadȩ, że wolno dzia la. Zobaczymy na przyk ladach dwa szybsze algorytmy zamiany postaci liczby z dziesiȩtnej na dwójkow a. Weźmy liczbȩ 178. Pierwszy sposób polega na tym, że wyszukujemy najwiȩksz a potȩgȩ liczby 2, która jeszcze jest mniejsza od naszej liczby (w przyk ladzie 128 = 2 7 ), nastȩpnie odejmujemy tȩ potȩgȩ od naszej liczby i z różnic a postȩpujemy tak samo. Na końcu mamy liczbȩ w postaci sumy potȩg dwójki. W naszym przyk ladzie wygl ada to tak: 178 = 128 + 50 = 128 + 32 + 18 = 128 + 32 + 16 + 2. Teraz już latwo zapisać nasz a liczbȩ w postaci dwójkowej: (178) 10 = (10110010) 2. Drugi sposób polega na kolejnym dzieleniu liczby w sposób ca lkowity przez 2 i zapamiȩtywaniu reszt z dzielenia. Reszty te zapisane w odwrotnej kolejności tworz a zapis binarny liczby. Na przyk lad, weźmy znowu liczbȩ 178. W poniższej tabeli przedstawiono kolejne ilorazy i reszty. Reszty zapisane w odwrotnej kolejności: 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 10110010, 7

tworz a binarny zapis liczby (178) 10. Poprawność dzia lania tego algorytmu wynika z faktu, że jeżeli podzielimy liczbȩ x = d i 2 i i=0 przez 2, to reszta z dzielenia wyniesie d 0, a iloraz ca lkowitoliczbowy wyniesie: d i 2 i 1, i=1 nastȩpne dzielenie przez 2 da resztȩ d 1 oraz iloraz: d i 2 i 2, i=2 i tak dalej. Ostatni sposób można latwo uogólnić na algorytm zamiany liczb z systemu dziesiȩtnego na system z inn a baz a b. Należy tylko dzielić przez b. Jeżeli chcemy, na przyk lad, przedstawić liczbȩ 60 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. 7 U lamki Przypomnijmy najpierw krótko, jak przedstawia siȩ u lamek w systemie dziesiȩtnym. Na przyk lad, oznacza: 0.234 2 10 1 + 3 10 2 + 4 10 3. Użyliśmy kropki do oddzielania czȩści ca lkowitej od u lamkowej. Jest to czȩsto używany w informatyce sposób, stosowany miȩdzy innymi w jȩzyku Pascal. Ogólniej, zapis: 0.d 1 d 2... d r oznacza liczbȩ: d 1 10 1 + d 2 10 2 +... + d r 10 r, 8

któr a możemy też zapisać w postaci: d i 10 i. i=1 Podobnie możemy zapisywać u lamki w systemie dwójkowym. Jedyna różnica polega na tym, że w systemie binarnym podstaw a potȩg jest dwójka i że używamy tylko dwóch cyfr, 0 i 1. Tak wiȩc w systemie dwójkowym zapis: 0.d 1 d 2... d r oznacza liczbȩ: lub inaczej: Na przyk lad: d 1 2 1 + d 2 2 2 +... + d r 2 r, d i 2 i. i=1 (0.1) 2 = (0.5) 10, (0.11) 2 = (0.75) 10, (0.101) 2 = (0.625) 10. W poniższej tabeli przedstawiono kilka pierwszych ujemnych potȩg liczby 2 w systemie dwójkowym i dziesiȩtnym. 8 System szesnastkowy 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 W informatyce używa siȩ też systemu szesnastkowego, gdzie podstaw a jest liczba 16. Do systemu szesnastkowego potrzebujemy szesnastu cyfr. Zwykle używa siȩ nastȩpuj acych,,cyfr : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. W poniższej tabeli zestawiono cyfry systemu szesnastkowego z odpowiadaj acymi im liczbami w systemie dwójkowym i dziesiȩtnym. 9

szesnastkowy dwójkowy dziesiȩtny 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 Liczby w systemie szesnastkowym poprzedza siȩ zwykle (na przyk lad w jȩzyku Pascal) znakiem dolara $. I tak zapis $A1 oznacza liczbȩ w systemie szesnastkowym, która w systemie dziesiȩtnym ma poniższ a postać: $A1 = 10 16 + 1 = (161) 10. Dziȩki temu, że 16 jest potȩg a dwójki, prosta jest zamiana postaci liczby z systemu dwójkowego na szesnastkowy, i na odwrót. Przy zamianie z systemu szesnastkowego na dwójkowy wystarczy zamieniać kolejne cyfry przedstawienia na grupy odpowiednich czterech bitów wed lug powyższej tabeli. Na przyk lad liczba, która w systemie szesnastkowym wygl ada tak: w systemie dwójkowym ma postać: $A91, 1010 1001 0001. Przy zamianie z postaci dwójkowej na postać szesnastkow a postȩpujemy odwrotnie. Zastȩpujemy grupy po cztery bity pojedynczymi cyframi. Na przyk lad: (1110 0011 1011 0000) 2 = $E3B0. Jeżeli liczba cyfr w postaci dwójkowej nie dzieli siȩ przez 4, to uzupe lniamy j a zerami na pocz atku. Na przyk lad: (110 1111 0110 0010) 2 = (0110 1111 0110 0010) 2 = $6F 62. W ten sposób możemy używać zapisu szesnastkowego do zwiȩz lego przedstawiania d lugich ci agów bitów. 9 Reprezentacja liczb w komputerze W jȩzyku Pascal każda zmienna ma swój typ, który jest deklarowany na pocz atku programu. Sposób przechowywania wartości zmiennej zależy od jej typu. 10

10 Integer Zmienne typu integer przechowywane s a w dwóch bajtach. Jeden bajt (ang. byte) zawiera osiem bitów, tak wiȩc wartość zmiennej typu integer przechowywana jest w szesnastu bitach. Pierwszy bit oznacza znak. Jeżeli jest on zerem, to liczba jest dodatnia, jeżeli jedynk a, to ujemna. Jeżeli liczba jest dodatnia, to pozosta le piȩtnaście bitów stanowi binarny zapis tej liczby. Na przyk lad liczba 15 jest przechowywana jako: 0000 0000 0000 1111. Najwiȩksz a liczbȩ dodatni a, jak a można przechować w zmiennej typu integer, jest: czyli zero i piȩtnaście jedynek. Jest to: 0111 1111 1111 1111, 2 15 1 = (32767) 10. Liczby ujemne s a przechowywane w tak zwanym systemie uzupe lnieniowym. wartości bezwzglȩdnej x jest przedstawiana jako liczba: Liczba ujemna o 2 16 x w postaci binarnej. Na przyk lad liczba 1 jest przedstawiona jako: czyli szesnaście jedynek. A liczba 3 jako: 1111 1111 1111 1111, 1111 1111 1111 1101. Najmniejsza liczba ujemna, któr a można zmieścić do zmiennej typu integer, to: 1000 0000 0000 0000, czyli jedynka i piȩtnaście zer, która koduje liczbȩ: 2 15 = ( 32768) 10. W jȩzyku Pascal nie ma żadnego zabezpieczenia przed przekroczeniem maksymalnego lub minimalnego zakresu liczb typu integer. Jeżeli, na przyk lad, do liczby 32767, która jest przechowywana jako: 0111 1111 1111 1111, dodamy jedynkȩ, to otrzymamy: 1000 0000 0000 0000, która koduje liczbȩ 32768, i komputer nie zakomunikuje tego przekroczenia. 11

11 Real Liczby typu real s a zapisywane w dwóch notacjach: sta lopozycyjnej, zmiennopozycyjnej. Liczby w notacji sta lopozycyjnej to, na przyk lad: 0.10, 11.023, 12.0, czyli notacja dziesiȩtna. Zwróćmy uwagȩ, że kropka oddziela czȩść ca lkowit a liczby od czȩści u lamkowej. W notacji zmiennopozycyjnej liczba przedstawiona jest w postaci: mec, gdzie m jest mantys a, liczb a w postaci dziesiȩtnej z przedzia lu 1 m < 10 lub 10 < m 1, a c, zwana cech a, jest liczb a ca lkowit a. Zapis mec oznacza liczbȩ: m 10 c. W poniższej tabeli mamy kilka liczb w postaci sta lo- i zmiennopozycyjnej. 4837.92 4.83792E3 0.034 3.4E 2 12.0 1.2E1 Sposób przechowywania wartości zmiennych typu real jest skomplikowany i nie bȩdzie przedstawiony szczegó lowo. 12 Inne typy ca lkowite W jȩzyku Pascal, oprócz integer, można używać innych typów ca lkowitych; s a to: shortint, zawiera liczby ca lkowite z przedzia lu od 128 do 127, byte, zawiera liczby ca lkowite z przedzia lu od 0 do 255, word, zawiera liczby ca lkowite z przedzia lu od 0 do 65535, longint, zawiera liczby ca lkowite z przedzia lu od 2147483648 do 2147483647. Elementy typu byte i shortint przechowywane s a w jednym bajcie (osiem bitów) pamiȩci, typu word w dwóch bajtach, a typu longint w czterech bajtach pamiȩci. Liczby typu shortint i longint mog a być dodatnie lub ujemne i s a zapamiȩtywane w postaci uzupe lnieniowej z pierwszym bitem oznaczaj acym znak (podobnie jak liczby typu integer). Elementy typu byte i word mog a być tylko dodatnie i s a przechowywane w postaci dwójkowej. 12

13 Wyrażenia arytmetyczne w jȩzyku Pascal W jȩzyku Pascal wyrażeniami arytmetycznymi s a sta le liczbowe, na przyk lad: 234, 123, 0.123, 23.45, 3.21E 5, oraz zmienne typów liczbowych (np. integer lub real). Wyrażenia można także budować za pomoc a operatorów arytmetycznych i nawiasów. Jeżeli U oraz W s a dwoma wyrażeniami arytmetycznymi, to wyrażeniami arytmetycznymi s a także: U+W, U-W, U*W, U/W, (U), U div V, U mod V. Gwiazdka reprezentuje tutaj znak mnożenia, a operacje div oraz mod to iloraz i reszta z dzielenia ca lkowitoliczbowego (s a one opisane dok ladnie w rozdziale o teorii liczb). Na przyk lad, wyrażeniami arytmetycznymi s a: -(2-3)/2+7*4, (2-3)/(3*2), 7 div 2, 7 mod 2. Jeżeli x oraz y s a zmiennymi liczbowymi, to wyrażeniami arytmetycznymi s a także: 2*x, x*x-2/y. Dla danego wyrażenia możemy obliczyć jego wartość. Robi siȩ to wed lug zwyk lych regu l znanych ze szko ly. Najpierw oblicza siȩ wyrażenia w nawiasach, potem mnożenie i dzielenie (od lewej do prawej), a na końcu dodawanie i odejmowanie (od lewej do prawej). 14 Poszukiwania binarne (binary search) Znana jest gra w dwadzieścia pytań. W tej grze za pomoc a dwudziestu pytań, na które odpowiedzi a może być,,tak lub,,nie, należy odgadn ać pomyślan a przez przeciwnika rzecz. Zobaczymy, jak można wykorzystać binarny system zapisu liczb do opracowania strategii wygrywaj acej w tej grze. Najpierw uprośćmy nieco tȩ grȩ. Za lóżmy, że możemy zadać tylko cztery pytania i że odgadujemy liczbȩ naturaln a x ze zbioru: Wtedy należy zadać nastȩpuj ace cztery pytania: A = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}. Czy liczba x należy do zbioru A 1 = {8, 9, 10, 11, 12, 13, 14, 15}? Czy x należy do zbioru A 2 = {4, 5, 6, 7, 12, 13, 14, 15}? Czy x należy do zbioru A 3 = {2, 3, 6, 7, 10, 11, 14, 15}? Czy x należy do zbioru A 4 = {1, 3, 5, 7, 9, 11, 13, 15}? Dlaczego te cztery pytania wystarcz a? Sprawa stanie siȩ jasna, jeżeli przedstawimy liczby w postaci binarnej. Każd 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: A = { 0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111}. 13

Czy x należy do zbioru A 1 = {1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111}? Czy x należy do zbioru A 2 = {0100, 0101, 0110, 0111, 1100, 1101, 1110, 1111}? Czy x należy do zbioru A 3 = {0010, 0011, 0110, 0111, 1010, 1011, 1110, 1111}? Czy x należy do zbioru A 4 = {0001, 0011, 0101, 0111, 1001, 1011, 1101, 1111}? Zauważmy, że zbiór A 1 zawiera wszystkie liczby z pierwszym bitem równym jedynce, w A 2 s a wszystkie liczby z drugim bitem równym jedynce, i tak dalej. Tak wiȩc nasze pytania s a w rzeczywistości pytaniami o kolejne bity odgadywanej liczby. Na przyk lad w pierwszym pytaniu pytamy, czy pierwszy bit odgadywanej liczby jest jedynk a. Ale można do tych pytań podejść inaczej. Najpierw dzielimy zbiór na po lowy: na liczby mniejsze od ośmiu i na liczby wiȩksze lub równe ośmiu, i pytamy, do której po lowy należy odgadywana liczba (dok ladniej pytamy, czy liczba należy do górnej po lowy). Po uzyskaniu odpowiedzi mamy dwa razy wȩższy przedzia l poszukiwań. Przypuśćmy, że odgadywan a liczb a jest 11. W drugim etapie dzielimy przedzia l {8, 9, 10, 11, 12, 13, 14, 15} na po lowy, górn a: i doln a: {12, 13, 14, 15} {8, 9, 10, 11} i pytamy, do której po lowy należy szukana liczba. Po drugiej odpowiedzi przedzia l poszukiwań jest już cztery razy krótszy. Po dwóch kolejnych pytaniach przedzia l zawȩża siȩ do jednej liczby. Drugi sposób jest ca lkowicie równoważny pierwszemu, tutaj też pytamy o kolejne bity i otrzymujemy takie same odpowiedzi. Potrzeba cztery razy kolejno dzielić zbiór na po lowy, aby z pocz atkowej d lugości 16 przejść na końcu do d lugości 1. A ile trzeba podzia lów, jeżeli na pocz atku mamy n = 2 k elementów? Po pierwszym podziale nasz zbiór bȩdzie mia l d lugość 2 k 1, po drugim 2 k 2, a po i-tym 2 k i. Jak widać, potrzeba k = log 2 n kolejnych podzia lów, aby dojść do 1. Tak wiȩc jeżeli mamy do dyspozycji 20 pytań, to możemy odnaleźć jedn a spośród 2 20 liczb ca lkowitych z przedzia lu od 0 do 2 20 1 = 1 048 575. 15 Waga Zobaczymy teraz, jak można wykorzystać trójkowy system zapisu liczb. W systemie trójkowym podstaw a jest liczba 3, mamy trzy cyfry {0, 1, 2} i zapis d r d r 1... d 1 d 0 oznacza liczbȩ: d r 3 r + d r 1 3 r 1 +... + d 1 3 1 + d 0 3 0, 14

lub inaczej: d i 3 i. i=0 Wyobraźmy sobie wagȩ szalkow a. Na jednej szalce, lewej, k ladziemy jakiś przedmiot do zważenia, a nastȩpnie na obu szalkach k ladziemy odważniki. Jeżeli waga jest w równowadze, to ważony przedmiot ma wagȩ równ a sumie (nomina lów) odważników po lożonych na prawej szalce minus suma odważników po lożonych na lewej szalce, obok ważonego przedmiotu. Na przyk lad, jeżeli na prawej szalce leż a odważniki o ciȩżarach 2 i 20 gramów, a na lewej odważniki o wadze 4 i 5 gramów, to przedmiot waży 13 = (20 + 2) (5 + 4) gramów. Interesuj ace nas pytanie brzmi: jakie powinny być nomina ly poszczególnych odważników, aby można by lo zważyć każdy ciȩżar o wadze od 1 do N, przy jak najmniejszej liczbie odważników. Zak ladamy, że ważymy tylko przedmioty o ca lkowitych wagach. Rozpatrzmy najpierw przyk lad czterech odważników o wagach: c 1, c 2, c 3, c 4. Ile różnych ciȩżarów można odważyć za pomoc a czterech odważników? Ponieważ każdy odważnik może siȩ znajdować na prawej lub lewej szalce, lub na stole, to mamy 3 4 = 81 różnych po lożeń odważników. Wśród tych po lożeń jest takie, gdzie wszystkie cztery odważniki leż a na stole (wtedy ważymy zerowy ciȩżar). Ponadto jeżeli odważniki leż a na szalkach i odważaj a ciȩżar W, to zamieniwszy po lożenia odważników na szalkach (odważniki z lewej przek ladamy na praw a szalkȩ, i na odwrót), bȩdziemy odważać ciȩżar W. Tak wiȩc spośród 81 u lożeń odważników na szalkach tylko 81 1 = 40 2 odważa jakiś dodatni ciȩżar. Oczywiście może siȩ zdarzyć, że dwa różne po lożenia odważników odważaj a ten sam ciȩżar. Interesuje nas, czy istniej a takie cztery odważniki, za pomoc a których można odważyć każdy ciȩżar od 1 do 40. Odpowiedź na to pytanie jest pozytywna. Istniej a takie cztery odważniki, s a to: 1, 3, 9, 27. Zauważmy, że nomina ly odważników to cztery pierwsze potȩgi liczby 3. odważników odważa ciȩżar: Każde u lożenie tych lub inaczej: W = d 3 27 + d 2 9 + d 1 3 + d 0 1, (5) W = d 3 3 3 + d 2 3 2 + d 1 3 1 + d 0 3 0, gdzie d i = 1, jeżeli odważnik o nominale 3 i leży na prawej szalce, d i = 1, jeżeli leży na lewej, i d i = 0, jeżeli leży na stole. Zobaczymy, że każd a liczbȩ od 1 do 40 można przedstawić w postaci 5. Zauważmy, że jeżeli do ciȩżaru W dodamy: 40 = 27 + 9 + 3 + 1, 15

to otrzymamy: W + 40 = (d 3 + 1) 3 3 + (d 2 + 1) 3 2 + (d 1 + 1) 3 1 + (d 0 + 1) 3 0. Jeżeli teraz oznaczymy: dla 0 i 3, to otrzymamy: e i = d i + 1, W + 40 = e 3 3 3 + e 2 3 2 + e 1 3 1 + e 0 3 0. (6) Zauważmy, że każde e i jest teraz ze zbioru {0, 1, 2} i wzór 6 przedstawia rozwiniȩcie liczby W + 40 w systemie trójkowym, a ponieważ W jest z przedzia lu od 1 do 40, to W + 40 jest z przedzia lu od 41 do 80 i można j a przedstawić za pomoc a czterech cyfr w systemie trójkowym. Powyższy wywód sugeruje algorytm odszukiwania po lożenia odważników dla danego ciȩżaru W. Algorytm ważenia. Chc ac zważyć ciȩżar W z przedzia lu od 1 do 40: przedstawiamy liczbȩ W + 40 w systemie trójkowym: W + 40 = (e 3 e 2 e 1 e 0 ) 3, od każdej cyfry odejmujemy jedynkȩ: d i = e i 1, postać (d 3 d 2 d 1 d 0 ) określa po lożenie poszczególnych odważników wed lug zasady: jeżeli d i = 1, to odważnik o nominale 3 i należy po lożyć na prawej szalce, jeżeli d i = 1, to na lewej, jeżeli d i = 0, to na stole. Spróbujmy zważyć ciȩżar W = 20 gramów. W rozdziale o zamianie systemu obliczyliśmy, że liczba 60 = 20 + 40 w systemie trójkowym ma postać: czyli: (60) 10 = (2020) 3, 60 = 2 27 + 0 9 + 2 3 + 0 1. Odejmujemy teraz jedynkȩ od każdej cyfry i otrzymujemy: (1 11 1). Tutaj 1 oznacza 1. Mamy wiȩc: 20 = 27 9 + 3 1. Metodȩ opisan a wyżej można uogólnić na wiȩksz a liczbȩ odważników. Jeżeli mamy N odważników o nomina lach: 1, 3,..., 3 N 1, to możemy odważyć każdy ciȩżar W z przedzia lu od 1 do (3 N 1)/2. Należy rozwin ać liczbȩ W + (3 N 1)/2 w systemie trójkowym, a nastȩpnie od każdej cyfry rozwiniȩcia odj ać jedynkȩ. 16

16 Zadania 1. Zwiȩksz o jeden nastȩpuj ace liczby zapisane w postaci dwójkowej: a) 11010011; b) 111111. 2. Porównaj nastȩpuj ace pary liczb: a) 110011, 110100; b) 11010, 1110. 3. Dodaj (odejmij, pomnóż) w postaci dwójkowej nastȩpuj ace pary liczb: a) 110011, 110100; b) 11010, 1110. 4. Napisz dok ladny algorytm odejmowania dwóch liczb w postaci dwójkowej. 5. Liczby 81, 126 przedstaw w postaci dwójkowej. Jak bȩd a one reprezentowane w komputerze jako sta le typu integer (byte, word)? 6. Nastȩpuj ace liczby przedstaw w postaci dwójkowej: 6.75, 5.625, $B1, $FF. 7. Nastȩpuj ace liczby przedstaw w postaci trójkowej: 80, 120. 8. Nastȩpuj ace liczby w postaci dwójkowej, 10001101, 100101, przedstaw w postaci: a) dziesiȩtnej, b) szesnastkowej. 9. Opisz algorytm zamiany u lamka z postaci dziesiȩtnej na postać dwójkow a. 10. Ile maksymalnie pytań z odpowiedziami TAK/NIE trzeba zadać, aby odgadn ać liczbȩ z przedzia lu od 0 do 100 000? 11. Jak należy u lożyć na szalkach odważniki o nomina lach 1, 3, 9, 27, aby odważyć ciȩżar: a) 35, b) 29? 17