Matematyka Dyskretna Andrzej Szepietowski 5 czerwca 00 roku
Rozdział Arytmetyka. System dziesiętny Najpowszechniej używanym sposobem przedstawiania liczb naturalnych jest system dziesiętny, gdzie na przykład zapis: przedstawia liczbę składającą się z jednej setki, siedmiu dziesiątek i ośmiu jedności. Możemy to zapisać w postaci: albo inaczej: Tak więc w systemie dziesiętnym kolejne cyfry oznaczają współczynniki przy kolejnych potęgach liczby dziesięć, zaczynając od największej, a kończąc na najmniejszej potędze. Mówimy, że liczba dziesięć jest podstawą lub bazą systemu dziesiętnego. W systemie dziesiętnym używamy dziesięciu cyfr:!#"$&%')(*&+'-,'. /& '-0 a zapis: 43! oznacza liczbę:!3 43 5! (.) którą możemy też zapisać w postaci: 6 8 3 (.)
4 Rozdział. Arytmetyka '!4-0 gdzie są cyframi należącymi do zbioru. Liczby można też zapisywać w systemach z inną bazą. Jeżeli za bazę systemu wybierzemy liczbę, to potrzebujemy cyfr, a zapis:!3!! oznacza w systemie z bazą liczbę: 43!3 5!! (.3) którą możemy też zapisać w postaci: 6 8 (.4). System dwójkowy W informatyce bardzo " ważnym systemem jest system dwójkowy (binarny), gdzie podstawą jest liczba i gdzie mamy tylko dwie cyfry, 0 i (cyfry w systemie dwójkowym nazywa się bitami). Zapis: oznacza liczbę: " 43 lub: 6 8!3!! "!3 5! " " Przykład. Zapis oznacza w systemie dwójkowym liczbę: " 5 " " czemu w systemie dziesiętnym odpowiada (",. Podobnie zapis: '' oznacza w systemie dziesiętnym liczbę, ( %" (5 0. Poniżej w pierwszej tabeli przedstawiono siedemnaście kolejnych liczb w postaci dwójkowej i dziesiętnej, a w drugiej jedenaście pierwszych potęg liczby w postaci dwójkowej i dziesiętnej. "
.3. Zwiększanie liczby o jeden 5 dwójkowy dziesiętny 0 0 0 3 00 4 0 5 0 6 000 8 00 9 00 0 0 00 0 3 0 4 5 0000 6 potęga dwójkowy dziesiętny 0 0 00 4 3 000 8 4 0000 6 5 00000 3 6 000000 64 0000000 8 8 00000000 56 9 000000000 5 0 0000000000 04.3 Zwiększanie liczby o jeden Algorytm zwiększania liczby o jeden. Aby zwiększyć o jeden liczbę zapisaną w systemie dwójkowym: 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ątku liczby i kończymy algorytm.
6 Rozdział. Arytmetyka Mówiąc inaczej, szukamy pierwszego zera od prawej strony, zamieniamy go na jedynkę, a wszystkie jedynki stojące za nim zamieniamy na zera. Przykład. Liczba o jeden większa od liczby ' to. Jeżeli liczba nie zawiera zer, tylko same jedynki, to zamieniamy te jedynki na zera i stawiamy jedynkę na początku. Przykład.3 Po liczbie jest liczba. Zauważmy, że podobnie działa algorytm zwiększania o jeden liczb w systemie dziesiętnym (lub dowolnym innym systemie). Szukamy pierwszej od prawej cyfry różnej od dziewiątki (największej cyfry w systemie), zwiększamy tę cyfrę o jeden, a wszystkie stojące za nią dziewiątki zamieniamy na zera..4 Porównywanie liczb Algorytm porównywania liczb. Aby stwierdzić, która z dwóch liczb w postaci dwójkowej jest większa, postępujemy w następujący sposób: jeżeli zapisy liczb nie są tej samej długości, to większą jest liczba z dłuższym zapisem (zakładamy tu, że zapis liczby różnej od zera nie ma zer na początku), jeżeli zapisy liczb są równej długości, to porównujemy bit po bicie od lewej strony do prawej: jeżeli bity są takie same, to przechodzimy do następnego bitu w prawo, jeżeli bity są 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ą takie same, to porównywane liczby są równe. Przykład.4 '. Liczby te sa tej samej długości, maja takie same trzy pierwsze bity, a różnia się dopiero czwartym bitem czwarty bit pierwszej liczby jest większy od czwartego bitu drugiej liczby..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łań arytmetycznych w systemie dziesiętnym. Działania w systemie dwójkowym są prostsze, ponieważ mamy tu tylko dwie cyfry, 0 i, i prostsze są operacje na pojedynczych cyfrach. Zacznijmy od tabliczki dodawania i mnożenia. Wyglądają one tak: + 0 0 0 0 * 0 0 0 0 0
" ".5. Operacje arytmetyczne w systemie dwójkowym Przypuśćmy, że chcemy dodać dwie liczby w postaci dwójkowej. Zakładamy tu, że obie liczby są tej samej długości. Jeżeli nie są, to krótszą z nich uzupełniamy na początku zerami. Algorytm dodawania. Aby dodać dwie liczby w postaci binarnej: 43!!3! tak zwany bit przenie- dla kolejnych pozycji od 0 do obliczamy bit sumy sienia do następnej pozycji: najpierw obliczamy oraz :, oraz (czyli jest resztą z dzielenia następnie po kolei, dla każdego od do, obliczamy: 3,, jeżeli co najmniej dwa spośród bitów na końcu obliczamy najbardziej znaczący bit sumy, oraz. przez ), 3 są jedynkami, Wynikiem dodawania jest liczba (może się zdarzyć, że 5 ).!! '' Przykład.5 Dodawanie liczb i wyglada następująco: 0 0 + 0 0 Aby odjąć od siebie dwie liczby w systemie dwójkowym, odejmujemy bit po bicie od prawej do lewej, a w przypadku gdy trzeba odjąć bit większy od mniejszego, pożyczamy dwójkę z następnej (w lewo) pozycji (szczegóły algorytmu pozostawiono jako ćwiczenie). Przykład.6 Odejmowanie liczb i wyglada następująco: 0 0 0
8 Rozdział. Arytmetyka Aby pomnożyć dwie liczby, mnożymy pierwszą 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ą kolumnę w lewo. Następnie sumujemy te iloczyny. Przykład. Oto przykład mnożenia liczb i ' : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Zauważmy, że pomnożenie liczby w postaci dwójkowej przez oznacza dopisanie jednego zera na końcu liczby. Podobnie pomnożenie liczby przez -tą potęgę oznacza dopisanie na końcu liczby zer. Przykład.8 '' pomnożone przez daje wynik. Również dzielenie wykonuje się podobnie jak w systemie dziesiętnym. Na przykład: 0 0 0 0 0 : 0 0 0 0 0 0 0 0 0 Jeżeli liczba jest podzielna przez, to ma w postaci binarnej zero na końcu, a jeżeli dzieli się przez -tą potęgę dwójki, to ma na końcu zer. Podzielenie liczby przez oznacza skreślenie w jej postaci binarnej jednego zera z końca. Przykład.9 podzielone przez daje ''..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ą oznaczymy przez: 43! Będziemy rezygnować z tego zapisu, jeżeli nie będzie wątpliwości, jakiego systemu używamy. Przedyskutujmy to na przykładach. Aby przedstawić liczbę ''
.6. Zamiana systemu 9 w postaci dziesiętnej, korzystamy ze wzoru (.3): ' " 5 " " " " 5 " i wykonujemy wszystkie rachunki w systemie dziesiętnym: '' %", ( "5 %"5, ( + % Podobnie możemy postępować przy zamianie w odwrotną stronę, z systemu dziesiętnego na dwójkowy. Najpierw korzystamy ze wzoru (.): + % - + % następnie przedstawiamy cyfry i podstawę systemu 0 w postaci dwójkowej i wykonujemy wszystkie działania w systemie dwójkowym: + % ' ' ' '' Ten sposób zamiany liczb z postaci dziesiętnej na dwójkową jest analogiczny do sposobu, w jaki wyżej zamienialiśmy liczby z postaci dwójkowej na dziesiętną. Byłby to naturalny sposób dla kogoś, kto swobodnie liczy w systemie dwójkowym. Sposób ten ma tę wadę, że wolno działa. Zobaczymy na przykładach dwa szybsze algorytmy zamiany postaci liczby z dziesiętnej na dwójkową. Weźmy liczbę 8. Pierwszy sposób polega na tym, że wyszukujemy największą potęgę liczby, która jeszcze jest mniejsza od naszej liczby (w przykładzie " " ), następnie odejmujemy tę potęgę od naszej liczby i z różnicą postępujemy tak samo. Na końcu mamy liczbę w postaci sumy potęg dwójki. W naszym przykładzie wygląda to tak: " + " %" " %","' Teraz już łatwo zapisać naszą liczbę w postaci dwójkowej: & ' Drugi sposób polega na kolejnym dzieleniu liczby w sposób całkowity przez i zapamiętywaniu reszt z dzielenia. Reszty te zapisane w odwrotnej kolejności tworzą zapis binarny liczby. Na przykład, weźmy znowu liczbę 8. W poniższej tabeli przedstawiono kolejne ilorazy i reszty. liczba iloraz reszta 8 89 0 89 44 44 0 0 5 5 0 0 )
0 Rozdział. Arytmetyka Reszty zapisane w odwrotnej kolejności: ' tworzą binarny zapis liczby ) #. Poprawność działania tego algorytmu wynika z faktu, że jeżeli podzielimy liczbę przez, to reszta z dzielenia wyniesie następne dzielenie przez da resztę 6 8 6 8 ", a iloraz całkowitoliczbowy wyniesie: " 3 oraz iloraz: 6 8 i tak dalej. Ostatni sposób można łatwo uogólnić na algorytm zamiany liczb z systemu dziesiętnego na system z inną bazą. Należy tylko dzielić przez. Jeżeli chcemy, na przykład, przedstawić liczbę, w systemie trójkowym, to dzielimy ją kolejno przez 3 i spisujemy reszty z dzielenia: " 3 W wyniku otrzymamy:, & liczba iloraz reszta 60 0 0 0 6 6 0 0 "".. Długość liczby Zastanówmy siȩ ile cyfr zawiera zapis dziesiȩtny liczby naturalnej. Cztery cyfry w systemie dziesiȩtnym 3 posiadaj a 0000 liczby od do, a cyfr posiadaj a liczby od do. Tak wiȩc liczba ma cyfr wtedy i tylko wtedy gdy, czyli gdy. Mamy więc Lemat.0 Liczba naturalna ) cyfr. ma w systemie dziesiȩtnym (w przybliżeniu Podobnie w systemie z podstaw a, liczba ma cyfr wtedy i tylko wtedy gdy, czyli:
Lemat. W systemie o podstawie liczba naturalna ) cyfr..8. Duże liczby ma 5 (w przybliżeniu Korzystaj ac z tego faktu możemy ustalać przybliżon a liczbȩ cyfr potrzebn a do zapisu liczb. Wniosek. Liczba, posiadaj aca cyfr w systemie dziesiȩtnym 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ȩtnej.. W postaci dwój- ' %, Dowód: Jeżeli liczba ma w postaci dziesiętnej cyfr, to kowej ma około bitów, a ponieważ " ' % " 000,5% /. ma około "!% /. Podobnie, jeżeli liczba ma w postaci dwójkowej bitów, to w postaci dziesiętnej.8 Duże liczby Aby siȩ zorientować jak duże mog a być liczby przedstawione za pomoc a systemu dziesiȩtnego lub dwójkowego przypatrzmy siȩ poniższej tabeli: Liczba sekund w roku Wiek układu słonecznego w latach Wiek układu słonecznego w sekundach Liczba cykli w roku (00 MHz) Liczba ci agów 64 bitowych Liczba ci agów 8 bitowych Liczba ci agów 56 bitowych Liczba atomów na Ziemi Liczba atomów w naszej galaktyce 5% % " " %' ( " " Dane do tabeli zaczerpniȩto z ksi ażki A. Menezes, P. van Oorschot and S. Vanstone, Handbook of Applied Cryptography. oraz z ksi ażki B. Schneier, Applied Cryptography. Tabela ta pozwala ocenić niektóre algorytmy. Przykład.3 Rozważmy prosty algorytm sprawdzaj acy, czy liczba naturalna jest pierwsza. Algorytm ten dzieli przez kolejne liczby od do. Jeżeli ma 0 bitów, to potrzeba " dzieleń. % Jeżeli założymy, że komputer potrafi wykonać milionów dzieleń w ci agu sekundy i w ci agu roku, to bȩdzie liczył około 300 lat. W rozdziale o teorii liczb bȩdziemy mówić o szybszych algorytmach sprawdzaj acych pierwszość liczb maj acych po kilkaset bitów. Przykład.4 Przypuśćmy, że chcemy zaprojektować tablicȩ, która dla każdego ci agu złożongo z ośmiu liter przechowuje jak aś informacjȩ (jeden bajt). W przypadku 6 liter takich ci agów mamy ",!"$#&%/ (' & zatem potrzebowalibyśmy wiȩcej niż 00 gigabajtów pamiȩci.
Rozdział. Arytmetyka.9 Ułamki Przypomnijmy najpierw krótko, jak przedstawia się ułamek w systemie dziesiętnym. Na przykład, ' " %( oznacza: " 3 % 3 ( 3 Użyliśmy kropki do oddzielania części całkowitej od ułamkowej. Jest to często używany w informatyce sposób, stosowany między innymi w języku Pascal. Ogólniej, zapis: oznacza liczbę: 3 którą możemy też zapisać w postaci: '! 3! 6 8 3 3 Podobnie możemy zapisywać ułamki w systemie dwójkowym. Jedyna różnica polega na tym, że w systemie binarnym podstawą potęg jest dwójka i że używamy tylko dwóch cyfr, 0 i. Tak więc w systemie dwójkowym zapis: oznacza liczbę: " 3 lub inaczej: 6 8 Przykład.5 ' + ' '! " 3! " 3 + " 3 ' ',"+ W poniższej tabeli przedstawiono kilka pierwszych ujemnych potęg liczby w systemie dwójkowym i dziesiętnym. "/3 ' ' + "/3 ' ' ' "+ "/3 ' '"+ " 3 ' ' ',"+ "/3 ' ' %' "+ - "/3 ' ' ) ' '+,"+ -
.0 System szesnastkowy.0. System szesnastkowy 3 W informatyce używa się też systemu szesnastkowego, gdzie podstawą jest liczba 6. Do systemu szesnastkowego potrzebujemy szesnastu cyfr. Zwykle używa się następujących cyfr : ' "$'% $( *+'','* $' ' 0 W poniższej tabeli zestawiono cyfry systemu szesnastkowego z odpowiadającymi im liczbami w systemie dwójkowym i dziesiętnym. szesnastkowy dwójkowy dziesiętny 0 0000 0 000 000 3 00 3 4 000 4 5 00 5 6 00 6 0 8 000 8 9 00 9 A 00 0 B 0 C 00 D 0 3 E 0 4 F 5 W języku Pascal liczby w systemie szesnastkowym poprzedza się znakiem dolara, a w języku znakami. Przykład.6 Zapis dziesiętnym ma postać oznacza liczbę w systemie szesnastkowym, która w systemie, 5, Dzięki temu, że 6 jest potęgą 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ług powyższej tabeli. Przykład. Liczba, która w systemie szesnastkowym wyglada tak dwójkowym ma postać '. 0' w systemie Przy zamianie z postaci dwójkowej na postać szesnastkową postępujemy odwrotnie. Zastępujemy grupy po cztery bity pojedynczymi cyframi. Przykład.8 ) %.
4 Rozdział. Arytmetyka Jeżeli liczba cyfr w postaci dwójkowej nie dzieli się przez 4, to uzupełniamy ją zerami na początku. Przykład.9 ' ' $,," W ten sposób możemy używać zapisu szesnastkowego do zwięzłego przedstawiania długich ciągów bitów.. Reprezentacja liczb w komputerze W wielu językach każda zmienna ma swój typ, który jest deklarowany na początku programu. Sposób przechowywania wartości zmiennej zależy od jej typu... Integer Zmienne typu integer przechowywane są zwykle 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ą, to ujemna. Jeżeli liczba jest dodatnia, to pozostałe piętnaście bitów stanowi binarny zapis tej liczby. Na przykład liczba + jest przechowywana jako: Największą liczbę dodatnią, jaką można przechować w zmiennej typu integer, jest:. czyli zero i piętnaście jedynek. Jest to: " %",/ & Liczby ujemne są przechowywane w tak zwanym systemie uzupełnieniowym. Liczba ujemna o wartości bezwzględnej jest przedstawiana jako liczba: " w postaci binarnej. Na przykład liczba czyli szesnaście jedynek. A liczba % jest przedstawiona jako: jako:! Najmniejsza liczba ujemna, którą można zmieścić do zmiennej typu integer, to: $
.. Reprezentacja liczb w komputerze 5 czyli jedynka i piętnaście zer, która koduje liczbę: " %", & Często nie ma żadnego zabezpieczenia przed przekroczeniem maksymalnego lub minimalnego zakresu liczb typu integer. Jeżeli, na przykład, do liczby %",, która jest przechowywana jako: ' dodamy jedynkę, to otrzymamy: która koduje liczbę %",.. Real Liczby typu real są zapisywane w dwóch notacjach: stałopozycyjnej, zmiennopozycyjnej., i komputer nie zakomunikuje tego przekroczenia. Liczby w notacji stałopozycyjnej to, na przykład: ' " % "$ ' czyli notacja dziesiętna. Zwróćmy uwagę, że kropka oddziela część całkowitą liczby od części ułamkowej. W notacji zmiennopozycyjnej liczba przedstawiona jest w postaci: gdzie jest mantysa, liczbą w postaci dziesiętnej z przedziału, a, zwana cecha, jest liczbą całkowitą. Zapis oznacza liczbę:! W poniższej tabeli mamy kilka liczb w postaci stało- i zmiennopozycyjnej. ( %/ 0" % % ( " "' " 483.9 0.034 lub Sposób przechowywania wartości zmiennych typu real jest skomplikowany i nie będzie przedstawiony szczegółowo.
6 Rozdział. Arytmetyka..3 Inne typy całkowite W języku Pascal, oprócz integer, można używać innych typów całkowitych; są 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ą 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ą być dodatnie lub ujemne i są zapamiętywane w postaci uzupełnieniowej z pierwszym bitem oznaczającym znak (podobnie jak liczby typu integer). Elementy typu byte i word mogą być tylko dodatnie i są przechowywane w postaci dwójkowej.. Wyrażenia arytmetyczne w języku Pascal W języku Pascal wyrażeniami arytmetycznymi są stałe liczbowe, na przykład: " %( " % '"%' "%' (+' %' "$ +$ oraz zmienne typów liczbowych (np. integer lub real). Wyrażenia można także budować za pomocą operatorów arytmetycznych i nawiasów. Jeżeli U oraz W są dwoma wyrażeniami arytmetycznymi, to wyrażeniami arytmetycznymi są 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łkowitoliczbowego (są one opisane dokładnie w rozdziale o teorii liczb). Na przykład, wyrażeniami arytmetycznymi są: -(-3)/+*4, (-3)/(3*), div, mod. Jeżeli x oraz y są zmiennymi liczbowymi, to wyrażeniami arytmetycznymi są także: *x, x*x-/y. Dla danego wyrażenia możemy obliczyć jego wartość. Robi się to według zwykłych reguł znanych ze szkoły. 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)..3 Poszukiwania binarne (binary search) Znana jest gra w dwadzieścia pytań. W tej grze za pomocą dwudziestu pytań, na które odpowiedzią może być tak lub nie, należy odgadnąć pomyślaną przez przeciwnika rzecz. Zobaczymy, jak można wykorzystać binarny system zapisu liczb do opracowania strategii wygrywającej w tej grze.
.3. Poszukiwania binarne (binary search) Najpierw uprośćmy nieco tę grę. Załóżmy, że możemy zadać tylko cztery pytania i że odgadujemy liczbę naturalną ze zbioru: '!&"'-%'-( #+$-, # $- '&0'$ "$!%'4( + Wtedy należy zadać następujące cztery pytania: Czy liczba należy do zbioru -0'!! "$!%'4( 4 + Czy należy do zbioru (*&+'-,'. /"$%!!(*4+ "'-% -,'. /'!!(*4+ Czy należy do zbioru Czy należy do zbioru -% &+$. /&0'!%'+???? Dlaczego te cztery pytania wystarczą? Sprawa stanie się jasna, jeżeli przedstawimy liczby w postaci binarnej. Każdą za pomocą czterech bitów (z zerami na początku). Wtedy nasz zbiór wygląda tak: '&'& '&$ -!'-'' &' $- '' '$!!'!' $! A pytania wyglądają teraz tak: Czy należy do zbioru '!!'!!! '!$!!' Czy należy do zbioru '- -! -$ '!$!!' Czy należy do zbioru ''-'-! -$!''!'!!' Czy należy do zbioru -'- $-$!'!'! $ Zauważmy, że zbiór zawiera wszystkie liczby z pierwszym bitem równym jedynce, w są wszystkie liczby z drugim bitem równym jedynce, i tak dalej. Tak więc nasze pytania są w rzeczywistości pytaniami o kolejne bity odgadywanej liczby. Na przykład w pierwszym pytaniu pytamy, czy pierwszy bit odgadywanej liczby jest jedynką. Ale można do tych pytań podejść inaczej. Najpierw dzielimy zbiór na połowy: na liczby mniejsze od ośmiu i na liczby większe lub równe ośmiu, i pytamy, do której połowy należy odgadywana liczba (dokładniej pytamy, czy liczba należy do górnej połowy). Po uzyskaniu odpowiedzi mamy dwa razy węższy przedział poszukiwań. Przypuśćmy, że odgadywaną liczbą jest. W drugim etapie dzielimy przedział -0!!! "$%'!('+ na połowy, górną:"'!%'!( + i dolną: -0!!
8 Rozdział. Arytmetyka i pytamy, do której połowy należy szukana liczba. Po drugiej odpowiedzi przedział poszukiwań jest już cztery razy krótszy. Po dwóch kolejnych pytaniach przedział zawęża się do jednej liczby. Drugi sposób jest całkowicie równoważny pierwszemu, tutaj też pytamy o kolejne bity i otrzymujemy takie same odpowiedzi. Potrzeba cztery razy kolejno dzielić zbiór na połowy, aby z początkowej długości 6 przejść na końcu do długości. A ile trzeba podziałów, jeżeli na początku mamy " " 3 elementów? " 3 Po pierwszym podziale nasz zbiór będzie miał długość, po drugim, a po " 3 -tym. Jak widać, potrzeba kolejnych podziałów, aby dojść do ". ) " Tak więc jeżeli mamy do dyspozycji " - pytań, to możemy odnaleźć jedną spośród liczb całkowitych z przedziału od do ( + +. Metodę poszukiwań binarnych można zastosować do stwierdzenia, czy jakaś liczba naturalna jest kwadratem (lub jakąś inną ustaloną potęgą) innej liczby naturalnej. Inaczej, czy istnieje liczba naturalna taka, że, lub ogólniej, czy istnieje liczba naturalna taka, że. Poniżej przedstawiamy taki algorytm. Algorytm ten używa dwoch dodatkowych zmiennych i, wartości tych zmiennych przybliżają pierwiastek stopnia z od dołu i od góry. W trakcie wykonywania algorytmy przybliżeniaa te są coraz lepsze Algorytm sprawdzający, czy dana liczba naturalna jest potęgą o wykładniku jakiejś liczby naturalnej. Dane wejściowe: liczba naturalna. Dane wyjściowe: pierwiastek stopnia z, (liczba naturalna, taka że informacja, że nie ma pierwiastka stopnia. Powtarzaj aż do skutku: jeżeli, to koniec, nie ma pierwiastka. jeżeli, to koniec, jest potęgą. jeżeli, to jeżeli, to..4 Zadania. Zwiększ o jeden następujące liczby zapisane w postaci dwójkowej: a) b).. Porównaj następujące pary liczb: a), b),. '' ) lub 3. Dodaj (odejmij, pomnóż) w postaci dwójkowej następujące pary liczb: a) ', ' b) ',.
.5. Problem: Waga 9 4. Napisz dokładny algorytm odejmowania dwóch liczb w postaci dwójkowej. 5. Liczby 8, 6 przedstaw w postaci dwójkowej. Jak będą one reprezentowane w komputerze jako stałe typu integer (byte, word)? 6. Następujące liczby przedstaw w postaci dwójkowej: 6.5, 5.65, $B, $FF.. Następujące liczby przedstaw w postaci trójkowej: 80, 0. 8. Następujące liczby w postaci dwójkowej, 0000, 000, przedstaw w postaci: a) dziesiętnej, b) szesnastkowej. 9. Opisz algorytm zamiany ułamka z postaci dziesiętnej na postać dwójkową. 0. Ile maksymalnie pytań z odpowiedziami TAK/NIE trzeba zadać, aby odgadnąć liczbę z przedziału od 0 do 00 000?. Zastosuj algorytm wyznaczania pierwiastków do znalezienia pierwiastka stopnia 3 z liczby 5..5 Problem: Waga Wyobraźmy sobie wagę szalkową. Na jednej szalce, lewej, kładziemy jakiś przedmiot do zważenia, a następnie na obu szalkach kładziemy odważniki. Jeżeli waga jest w równowadze, to ważony przedmiot ma wagę równą sumie (nominałów) odważników położonych na prawej szalce minus suma odważników położonych na lewej szalce, obok ważonego przedmiotu. Na przykład, ( + " " jeżeli na prawej szalce leżą odważniki i gramowe, a na lewej odważniki i gramowe, to przedmiot waży % " " + ( gramów. Interesujące nas pytanie brzmi: jakie powinny być nominały poszczególnych odważników, aby można było zważyć każdy ciężar o wadze od do, przy jak najmniejszej liczbie odważników. Zakładamy, że ważymy tylko przedmioty o całkowitych wagach. Pokaż, że (a) Za pomocą odważników można zważyc co najwyżej % " różnych ciężarów. (b) Jeżeli nominały odważników są kolejnymi potęgami trójki, to znaczy dla, to za ich pomocą można zważyć każdy (całkowity) ciężar o nominale od do % ". Wskazówki: (a) Ponieważ % każdy odważnik może się znajdować na prawej lub lewej szalce, lub na stole, to mamy różnych położeń odważników. Wśród tych położeń jest takie, gdzie wszystkie odważniki leżą na stole (wtedy ważymy zerowy ciężar). Ponadto jeżeli odważniki leżą na szalkach i odważają ciężar, to zamieniwszy położenia odważników na szalkach (odważniki z lewej przekładamy na prawą szalkę, i na odwrót), będziemy odważać ciężar. %
% 0 Rozdział. Arytmetyka (b) Rozłożenie odważników przy ważeniu ciężaru odpowiada przedstawieniu w postaci -! 3 6 8 (.5) gdzie. Aby przedstawić ciężar w postaci (.5), najpierw przedstawiamy liczbę " % % w systemie trójkowym: " 3!!, a następnie od każdej cyfry odejmujemy jedynkę:.