Podręcznik Informatyki

You might also like

Download as pdf
Download as pdf
You are on page 1of 304
PODRECZNIIK dla szkot ponadgimnazjalnych Informatyka ;,Europejczyka * Zakres rozszerzony 4 >? > 4 : »- Informatyka Ps. : Europejczyka aN ~~ yw) Y f “4 i ¥ Helion \, 6 . f , £4 Zawiera CD GD Grazyna Zawadzka EDUKACIA Podrecznik dopuszczony do uéytku szkolnego przez ministra wlasciwego do spraw oswiaty i wychowania i wpisany do wykazu podrecznikow przeznaczonych do ksztatcenia ogélnego do nauczania informatyki, na podstawie opinii rzeczoznawcow: mgr. inz. Wlodzimierza Kruszwickiego, dr, Leszka Rudaka, dr lwony Wandy Grygiel. Zakees ksztalcenia: rozszerzony. Etap edukacyjny: IV. ‘Typ szkoly: szkoly ponadgimnazjalne. Rok dopuszczenia 2012. ‘Numer ewidencyjny w wykazie: 410/1/2012 Wszelkie prawa zastrzeZone. Nieautoryzowane rozpowszechnianie calosci lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metoda kserograficzna, fotograficana, a take kopiowanie ksiqzki na nosniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji Wezystkie znaki wystepujace w tekécie sq zastrzezonymi znakami firmowymi badd towarowymi ich wlascicieli. Autor oraz Wydawnictwo HELION dologyli wszelkich starai, by zawarte w tej ksiqzce informacje byly kompletne i rzetelne. Nie biora jednak Zadne} odpowiedzialnosci ani za ich wykorzystanie, ani za zwiqzane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz, Wydawnictwo HELION, nie ponosza réwniez Zadne} odpowiedzialnosci za ewentualne szkody wynikle z wykorzystania informacji zawartych w ksiazce. Redaktor prowadzacy: Joanna Zargba Projekt okladki: ULABUKA Sklad: Ewa Galezak Ilustracja na okladce zostala wykorzystana za 2godq Shutterstock. Wydawnictwo HELION ul. KoSciuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.p! WWW: hitp://helion pl (ksiggarnia internetowa, katalog ksiqzck) Drogi Czytelniku! Jezeli chcesz ocenié te ksiazke, zajrzyj pod adres htip:/helion.pl/user/opinie?iepp12 Moiesz tam wpisaé swoje uwagi, spostrzezenia, recenzie. ISBN: 978-83-246-2823-0 Copyright © Helion 2013 Wydanie II Printed in Poland. Spis tresci Wstep i Rozdziat 1. Wprowadzenie do algorytmiki 1.1. Pojecie algorytmu 9 1.2. Etapy rozwiazywania zadaf za pomoca komputera 10 1.3. Sposoby reprezentowania algorytmow uM 1.3.1. Lista krokéw algorytmu u 1.3.2. Schemat blokowy algorytmu 3B 1.3.3. Drzewo algorytmu 14 1.3.4. Program w jezyku programowania wysokiego poziomu 15 1.4. Algorytmy liniowe i z warunkami 16 1.4.1. Algorytmy liniowe 16 1.4.2. Algorytmy 2 warunkami 18 1.4.3. Rozwigzywanie rownania kwadratowego 21 15. Iteracja 28 1.6. Rekurencja 36 1.6.1. Obliczanie silni liczby naturalnej 37 1.6.2. Wyznaczanie wyrazow ciagu Fibonacciego 39 1.6.3. Wieze Hanoi 43 1.7. Metoda ,dziel i zwyciezaj” 47 1.7.1, Przeszukiwanie binarne ciagu uporzadkowanego a7 1.8. Programowanie zachtanne 50 1.8.1. Minimalizacja taczenia par 50 1.9. Kryptografia i kryptoanaliza. Metody szyfrowania 53 1.10. Wtasnosci algorytmow 55 1.10.1. ZtoZonos¢ obliczeniowa i efektywnosé algorytmow 55 1.10.2. Poprawnosé i skoficzonosé algorytméw 57 1.10.3. Optymalnosé algorytméw 58 Rozdziat 2. Algorytmy i ich zastosowanie 61 2.1. Algorytmy badajace wtasnosci geometryczne 61 2.2. Wyznaczanie najwiekszego wspdlnego dzielnika i najmniejszej wspéinej wielokrotnosci dwéch liczb naturalnych 66 2.2.1. Algorytm Euklidesa 66 2.2.2. Obliczanie najmniejsze] wspélnej wielokrotnosci 7 pis tresci Informat Infomatyea 2.3. Wyznaczanie wartosci wielomianu, pozycyjne systemy liczbowe i reprezentacja danych liczbowych w komputerze 2.3.1, Systemy liczbowe 2.3.2. Konwersje pozycyjnych systeméw liczbowych 2.3.3. Operacje arytmetyczne wykonywane w réanych systemach liczbowych 2.3.4, Wyznaczanie wartosci wielomianu za pomoca schematu Hornera 2.3.5. Zamiana liczb z dowolnego pozycyjnego systemu liczbowego na system dziesigtny z zastosowaniem schematu Hornera 2.3.6. Reprezentacja danych liczbowych w komputerze 2.3.7. Bledy w obliczeniach 2.4. Generowanie liczb pierwszych i badanie, czy liczba jest pierwsza 24.1. Badanie, czy liczba jest pierwsza 2.4.2. Sito Eratostenesa 2.5. Przeszukiwanie ciagu liczbowego — metody liniowe 2.5.1. Liniowe przeszukiwanie ciagu liczbowego 2.5.2. Liniowe przeszukiwanie ciagu liczbowego z wartownikiem 2.6. Znajdowanie minimalnego lub maksymalnego elementu 2.7. Znajdowanie lidera w zbiorze 2.8. Sprawdzanie monotonicznosci ciagu liczbowego 2.9. Sortowanie ciagu liczbowego 2.9.1. Metody sortowania przez poréwnania 2.9.2. Sortowanie w czasie liniowym 2.10. Zastosowanie metody ,dziel i zwycigzaj” 2.10.1. Jednoczesne znajdowanie minimalnego i maksymalnego elementu 2.10.2. Sortowanie przez scalanie 2.10.3. Sortowanie szybkie 2.11. Metody numeryczne i obliczenia przyblizone 2.11.1. Obliczanie wartosci pierwiastka kwadratowego 2 liczby nieujemnej — algorytm Newtona-Raphsona 2.11.2. Obliczanie pola obszaru ograniczonego wykresem funkcji 2.11.3. Znajdowanie przyblizonej wartosci miejsca zerowego funkeji — metoda potowienia przedziatow 2.12. Zastosowanie programowania zachtannego 2.12.1. Problem plecakowy 2.12.2. Algorytm wydawania reszty 72 2 4 80 84, 87 89 94. 98 98 100 104 104 108 110 113 117 119 121 130 135 135 140 145 149 149 152 160 164 164 173 Spis tresei 2.13. Algorytmy na tekstach 2.13.1. Palindromy 2.13.2. Sortowanie tekstu 2.13.3. Anagramy . Wyszukiwanie wzorca w tekscie 2.13.5. Wyznaczanie wartosci wyrazenia zapisanego w odwrotnej notacji polskie] ONP 2.14. Wybrane algorytmy kryptograficzne 2.14.1. Szyfrowanie symetryczne 2.14.2. Szyfrowanie asymetryczne Rozdziat 3. Programowanie w jezyku C++ 3.1. Jezyki programowania — pojecia, Klasyfikacja, prayktady 3.2. Wprowadzenie do programowania 3.2.1. Struktura programu 3.2.2. Operacje wejscia-wyjscia 3.2.3. Zmienne, state, wskaéniki i referencje 3.2.4. Wyrazenia arytmetyczne, relacje i operatory logiczne 3.2.5, Priorytety relacji i dziatan 3.2.6. Funkcje matematyczne 3.27. Licaby losowe 3.2.8. Komentarze 3.3. Podstawowe konstrukcje algorytmicane 3.3.1. Instrukcja preypisania 3.3.2. Instrukcja ztozona 3.3.3, Instrukcje warunkowe 3.3.4. Instrukcja wyboru 3.3.5, Instrukcje iteracyjne 3.3.6. Instrukcje sterujace 3.4. Proste typy danych 3.5. Strukturalizacja programu 3.5.1, Struktura funkcji 3.5.2. Zmienne lokalne i globalne 3.5.3. Przekazywanie parametrow w funkcjach 3.5.4. Przetadowanie funkcji 3.6. Strukturalne typy danych 3.6.1. Tablice 3.6.2. Laficuchy 3.6.3. Struktury 175 175 177 179 182 186 189 189 200 203 203 205 206 209 214 217 223 224 225 226 226 226 227 227 230 233 238 240 241 241 244 245 252 257 257 265 2 Spis tresci 3.7. Dynamiczne struktury danych 3.7.1, Stos 3.7.2. Kolejka 3.7.3. Lista 3.7.4. Drzewo binarne 3.8. Plikowe operacje wejécia-wyjscia Rozdziat 4. Projekt programistyczny 4.1. Inzynieria oprogramowania 4.2. Projekt programistyczny Bibliografia CD-ROM Skorowidz 276 277 278 279 282 285 291 291 293 295 296 297 Spis tresei Wstep Technologia informacyjna i informatyka to dziedziny, ktérych wykorzystanie i dostep- noéé stale wzrastaja, a tempo zachodzacych w nich zmian jest nieporéwnywalne z roz- ‘wojem innych dyscyplin. Widaé to réwniez w zakresie edukacji informatyczne}. »Informatyka Europejezyka” to podrgcznik do informatyki na poziomie rozszerzonym ww szkolach ponadgimnazjalnych. Jego treéci, struktura, duza liczba éwiczen i zada po- zwola Ci na przygotowanie sig do egzaminu maturalnego z tego przedmiotu. Podrecz- nik sktada sig z dwoch czgéci. W pierwszej zawarty jest material zwiqzany wylacznie z algorytmika i programowaniem. Sa w niej przedstawione metody i techniki programowania, algorytmy klasyczne wska- zane w podstawie programowej oraz podstawy programowania w jezyku C++, Uklad materialu tej ezeéci podrgcznika, kolejnos wprowadzanych zagadnien, dobér przykla- dow izadan stanowié beda wsparcie zarowno dla Ciebie, jak i dla nauczyciela, Praca z tq czgsciq podrgcznika powinna pozwolié Ci na uzyskanie dobrych wynikéw na egzaminic maturalnym w zakresie algorytmiki i programowania, Pierwsza czgéé podrecznika nie jest przeznaczona do realizacji w ukladzie liniowym — rozdziat po rozdziale. Najpierw zapoznaj sig z podstawowymi pojgciami algorytmicz- nymi i elementami jezyka C++, ktére zawarte sq w rozdziatach pierwszym i trzecim. Nastgpnie przejd do metod algorytmicznych i zaawansowanych algorytméw, opisanych w rozdziale drugim. Rozdzial trzeci, poswigcony programowaniu w C++, ma charakter pomocniczy. To swoiste kompendium elementdw jgzyka programowania powinno sta- nowié dla Ciebie skuteczna pomoc w pisaniu programéw. W drugiej, bogato ilustrowanej czeSci podrecznika zapoznasz sig z budowa wspélezes- nych komputeréw. Dzieki wykorzystaniu maszyny wirtualnej zrozumiesz role i zadania systeméw operacyjnych. Poznasz ted. architekturg sieci komputerowych i spos6b dziatania protokoldw sieciowych. Pracujac z pakietem biurowym Microsoft Office 2007, nauezysz sig wykorzystywaé do wyszukiwania informacji zaawansowane funkcje bazodanowe ar- kusza kalkulacyjnego, poznasz relacyjng baze danych i jgzyk zapytai SQL. Opanujesz podstawy pracy z pakietem biurowym OpenOffice.org — bezplatnym oprogramowaniem zalecanym do stosowania w administracji i w biznesie, Nastepnie przyswoisz sobie za- gadnienia zwiqzane z multimediami,z uwzglednieniem grafiki bitmapowej, wektorowej, 3D, déwigku i filmu. Odkryjesz spos6b dzialania algorytméw kompresji danych. Bedziesz mieé takZe szansg na stworzenie i opublikowanie w internecie swojej strony WWW oraz na administrowanie wlasnym systemem zarzadzania treécia. Opanujesz podstawy jezyka PHP. Zapoznasz sig z.zagrozeniami zwiazanymi z dostepem do internetu, Przeanalizujesz tresé Ustawy o prawie autorskim i prawach pokrewnych. Zastanowisz sig nad gléwnymi Kierunkami rozwoju informatyki i rozwiqzas\ technologicznych, takich jak na prayklad praca ,w chmurze” Wigkszos¢ tych wiadomosci oraz umiejgtnosci zdobedziesz, wyko- nujac praktyczne éwiczenia. Informatyka Wstep Europejezyka Do podrecznika dolaczone sq plyty CD, ktére zawieraja przyktadowe programy w j¢- zykach C++ i Pascal, realizacig wybranych algorytméw za pomoca arkusza kalkulacyj- nego, material uzupelniajacy dotyczacy programowania obiektowego i samodzielnego tworzenia witryny opartej na systemie zarzadzania treéciq (CMS), opis wykonania éwi- czei i zadai bazodanowych w programie OpenOffice.org, liczne pliki z rozszerzeniem tresci podrgcznika, dane do zadai, pliki potrzebne do realizacji éwiczed z podrgcznika, wybrane przyktadowe zadania z egzaminéw maturalnych, niezbedne oprogramowanie, obrazy maszyn wirtualnych z réanymi systemami operacyjnymi, 2biér fotografi, flméw i nagran déwigkowych. Praygotownjac sig do egzaminu maturalnego z informatyki, zapoznaj sig z jak najwigk- sz liceba przykladéw, wykonaj éwiczenia zawarte w podrgczniku i rozwigd maksymalna licabe zadari. Na szczegélna uwage zastuguja zadania z egzaminéw maturalnych dola- czone na plytach CD. Wykonujac je, zapoznasz sig z forma zadan pojawiajacych sig na egzaminie maturalnym. Gradyna Zawadzka i Danuta Korman Wstep Rozdziat 1. WPROWADZENIE DO ALGORYTMIKI W tym rozdziale przedstawione sq podstawowe pojecia algorytmiczne nie- zbedne do zapoznania sie z konkretnymi algorytmami. Za wienie pojecia ,algorytm’, opis etapow rozwiazywania zadan za pomoca komputera oraz sposob6w przedstawiania algorytméw, analize réznych metod i technik algorytmicznych wraz z prayktadami, wprowadzenie do kryptografii oraz oméwienie pojeé dotyczacych wtasnosci algorytmow. ra on omé- 1.1. Pojecie algorytmu Informatyka to dziedzina, ktérej glownym celem jest rozwiazywanie probleméw za po- moca komputera. Algorytmika — dziat informatyki — obejmuje algorytmy oraz ich wlasnosci. Algorytm jest dokladnym przepisem na rozwiqzanie problemu lub osiagnigcie ja- kiego$ celu, realizowanym w skoriczongj licebie krokéw. Istnieje wiele sposob6w rozwiqzania danego zadania, stad kazdemu problemowi, dla ktérego istnieje roz~ wigzanie, odpowiada wicle metod prowadzacych do prawidlowych wynikéw. Aby znaleéé rozwiqzanie okreslonego problemu, musimy mieé informacje poczatkowe, Ktére nastepnie wykorzystujemy przy realizacji algorytmu prowadzacego do otrzyma- nia danych wyjéciowych. Stad méwimy réwnied, Ze algorytm to skoriczona liczba wy- konywanych kolejno czynnoéci, ktére prowadza do przeksztalcenia danych wejéciowych na wyniki, bedace rozwiazaniem danego zadania. Ciekawostka Pojecie ,algorytm” pochodzi od nazwiska arabskiego matematyka i astronoma Muhammada ibn Musa Al-Chorezmi, zyjacego na przetomie Vill i IX wieku. Zapoczatko- waton stosowanie metod obliczeniowych w matematyce, ponadto upowszechnit wyko- rzystanie systemu dziesigtnego i okreslit znaczenie zera w obliczeniach. Informatyka 1.1, Polecie algorytmu 2 Buropejeayka 9 FATERIEEBA Podaj przyklady algorytméw zwiqzanych z zyciem codziennym lub in- nymi — poza informatyka — przedmiotami szkolnymi Pracownik pewnej firmy (na dzieri pierwszy stycznia danego roku) otrzy- muje miesigczne wynagrodzenie zasadnicze w wysokosci k zlotych. Dodatkowo co dwa miesigce uzyskuje premig w wysokosci 10% miesigczne} placy podstawowej. Wynagro- dzenie zasadnicze warasta co trzy miesiace 0 5%. Jaka place uzyska pracownik po szeéciu miesigcach i po roku? Opisz,spos6b (czyli podaj algorytm w formie opisowej) oblicze- nia wynagrodzenia pracownika. 1.2. Etapy rozwiazywania zadan za pomoca komputera Realizacjg zadari za pomoca komputera wykonujemy etapami, Ponizej wyszcregélnione sa kolejne kroki, ktére prowadza do rozwigzania problemu z wykorzystaniem komputera, 4 3. Okreslenie specyfikacji zadania: + dane (dane wejéciowe), + wyniki (dane wyjéciowe). Okreslajgc dane wejéciowe i wyniki, podajemy réwnied. ich typ (czyli okreslamy rodzaj danych, na prayklad liczby calkowite, liczby rzeczywiste, znaki) oraz spo- 6b prezentacji. Wainy jest ponadto zwiazek miedzy nimi,a wige wyszczegélnienie warunkéw, jakie musza spelniag. Zbadanie, czy an: izowany problem ma rozwiqzanie, oraz wybér odpowiedniego algorytmu, Istnieje wiele sposobéw wykonania danego zadania, z czego wynika, Ze moina skonstruowaé wiele algorytméw rozwiqzujacych okreslony problem. Zapisanie algorytmu w wybranej postaci: + opisu slownego, + listy krokéw, + pseudokodu, + schematu blokowego, + drzewa algorytmu, + drzewa wyrazenia, + programu, + innych form. Jedli chcemy uéyé komputera, musimy skonstruowaé algorytm w postaci programu. Pozostate formy moga, ale nie musza, powstaé jako pomoc na drodze do napisa- nia programu. 10 Rozdziat 1. Wprowadzenie do algorytmiki 4. Przeprowadzenie analizy i dowodu poprawnosci przedstawionego algorytmu. Algorytm jest poprawny, jesli dla kazdych danych wejéciowych jest skoticzony, a uzyskane wyniki sq poprawne, czyli zgodne ze specyfikacjq zadania. 5. Wykonanie oblicze na komputerze, w tym testowanie programu, ktory jest im- plementacja algorytmu, dla réznych danych. Algorytm powinien dziataé dla do- wolnych, 2godnych ze specyfikacja, danych wejéciowych, dajac poprawne wyniki. 6. Analiza wtasnosci wybranego algorytmu (patrz. podrozd: rytméw”), w tym ocena: efektywnosci przyjetego rozwigzania, zlozonosci oblicze- niowej (czasowe) i pamigciowej) oraz bledéw zaokraglen wynikajacych z obliczen na liczbach przyblizonych. Wybierany jest algorytm, ktéry nie tylko daje poprawne dane wyjéciowe, ale réwniez jest efektywniejszy od innych rozwiazai postawio- nego problemu. Idealnym wynikiem naszych dzialai jest znalezienie optymalnego algorytmu, jednak nie zawsze jest to moéliwe 1.10,,,Wlasnosci algo- 1.3. Sposoby reprezentowania algorytmow Istnieje wiele sposobéw przedstawiania algorytméw. Wybér odpowiedniej metody powi- nien zaleze€ od rozwiazywanego problemu. Do wykonywanego zadania nalezy dobraé taki spos6b reprezentowania algorytmu, ktéry najdokladniej i najczytelniej pokaze jego przebieg. Najwadnicjsze metody przedstawiania algorytméw opisane w tym podraczniku to: + lista krokw, + schemat blokowy, + drzewo algorytmu, + program w jezyku programowania wysokiego poziomu, Do prezentowania algorytméw modna stosowa¢ ted inne metody, na przyklad opis slowny, pseudokod, drzewo wyradenia, Algorytmy zamieszezone w podreczniku zostaly przedstawione w rézne) postaci Zastosowano takie metody jak lista krok6w, schemat blokowy oraz, programy w jezy- kkach wysokiego poziomu C++ i Pascal. W rozdziale 3.,,.Programowanie w jezyku C+ podano dodatkowo opis elementéw jezyka C++. Ponadto wybrane algorytmy zostaly zrealizowane za pomoca arkusza kalkulacyjnego. Pliki érédlowe rozwiazan sq zawarte na plycie CD dotaczonej do podrecznika. 1.3.1. Lista krokéw algorytmu Jednym z najczescie} stosowanych sposobéw prezentacji algorytméw jest lista krokow. Forma ta umodliwia dokladne przedstawienie kolejnych operacji realizowanych przez algorytm, z uwzglednieniem powtarzania dziatai, zakoniczenia algorytmu po spetnie~ niu okredlonych warunkéw czy zmiany kolejnosci wykonywanych operacji. Lista kro- k6w jest lista numerowana, w ktorej kazdy krok algorytmu ma przypisany numer. Kroki Informatyka 13, Sposoby reprezentowania algorytméw 2 faropeeayka n Praykiad LT algorytmu zawarte w liscie realizuje sig kolejno, nalezy jednak uwzgledniaé zmiang ko- ejnosci spowodowana wykonaniem polecenia przejicia do kroku o podanym numerze. Umodliwia to na prayklad realizacje powtarzania operacji w algorytmie. W podreczniku w listach krokéw zastosowano matematyczne symbole operacji i wa- runkéw. Skonstruujmy algorytm w postaci listy krokéw rozwigzujacy rownanie liniowe ax+b = 0. Zacznijmy od okreslenia specyfikacji zadania Specyfikacje Dowolne liczby rzeceywiste: a, b. Wartosé rzeczywista pierwiastka réwnania liniowego: x lub komunikat infor- mujacy © braku rozwiazania badé uzyskaniu nieskoriczenie wielu rozwigzat. Kolejnym etapem bedzie przeprowadzenie analizy rozwiazywanego problemu. ‘Two- rzac algorytm, nalezy rozpatrzyé wszystkie modliwe sytuacje. W przypadku réwnania liniowego rozwiazanie zadania zalezy od wartosci wspélezynnikéw a i b, co przedsta- wia sig nastepujaco: azo: x : aay a ib=0: — nieskoficzenie wiele rozwigzan (w tym przypadku rozwigzaniem jest kafda liczba rzeczywista); ibe0: — réwnanie sprzeczne. Po wykonaniu analizy zadania mogemy przejsé do konstruowania algorytmu. Algorytm w postaci listy krok6w: Krok 0. Wezytaj wartosci danych a ib. Krok 1. Jeslia# 0, to oblicz x= —., wypisz wynik x i zakoricz algorytm. Krok 2. (W tym praypadku a = 0). Jesli b = 0, wypisz. komunikat ,nieskoriezenie wiele rozwiqzat’, w przeciwnym wypadku wypisz komunikat ,r6wnanie sprzecene’ Zakonez algorytm. Na ligcie krokéw nie ma obowigzku umieszczania kroku 0., ktory zawiera wezytanie da- nych wejéciowych niezbednych do realizacji algorytmu. Ta informacja zawarta jest juz w specyfikacji algorytmu. R Rozdziat 1. Wprowadzenie do algorytmiki 1.3.2. Schemat blokowy algorytmu Schemat blokowy to graficzny sposdb prezentacji algorytmu. Sklada sig z elementow przedstawionych w tabeli 1.1, zwanych blokami. Poszezegélne czesci schematu nalezy Jaczyé, wykorzystujac strzalki, ktore okreslaja porzadek wykonywania operacji. Tabela 1.1, Elementy schematu blokowego Poczatek i koniec algorytmu / F Blok wejscia i wyjscia é r (wezytywanie danych lub wyprowadzanie wynik6w) | Blok operacyjny (wykonywanie dziatari) Blok decyzyiny (konstruowanie warunk6w i sprawdzanie ich spetnienia) taczenie straatek b ” ‘egcznik (n oznacza numer potaczenia) (stosowany pr2y przenoszeniu schematu na nastepna strong) Na rysunku 1.1 przedstawiono schemat blokowy algorytmu rozwiqzujacego réwnanie liniowe ax+b = 0, zapisanego w punkcie 1.3.1 w postaci listy krokow. aa Rysunek 1.1. Schemat blokowy algorytmu Cour rozwiqzujacego réwnanie liniowe ax+b = 0 / weap. / TAK oe TAK, NIE [omer i ian) (Praia oN to ae =) & Informatyka 13, Sposoby reprezentowania algorytméw 13, W schemacie blokowym mozna stosowaé matematyczne symbole operacji i warunkéw, operatory danego jezyka programowania lub opisy stowne wykonywanych operacji, Za- pis jednak musi byé jednoznaczny i dokladnie okreslaé wykonywane dzialania. Dla ula- twienia w podrgczniku w schematach blokowych wykorzystywane sq operatory jezyka C++ (patrz punkt 3.2.4,,,Wyrazenia arytmetyczne, relacje i operatory logiczne”). 1.3.3. Drzewo algorytmu Drzewo algorytmu to graficzny sposb przedstawiania algorytméw zblizony do sche~ matu blokowego. W tym przypadku nie korzystamy jednak z czeéci schematu przedsta- wionych w tabeli 1.1. Mamy tutaj do czynienia z konstrukeja przypominajaca drzewo. Oznacza to, ze kaide dwie drogi obliczen, sktadajace sig z wielu galezi, nie moga sig la- exyé wigce} nit, jeden raz. Drzewo zawiera takie clementy jak: + korzef — wierzcholek poczatkowy (wierzcholek, w ktorym rozpoczyna sig dzialanie algorytmu), + wierzchotki posrednie (wierzchotki, w ktorych wykonywane sq operacje algo- rytmu), + ligcie — wierzcholki koicowe (wierzcholki, w ktérych umieszczane sq wyniki dzia- tania algorytmu), + gatgzie (polaczenia migdzy wierzcholkami w drzewie). Na rysunku 1.2 przedstawiono drzewo algorytmu podanego w punkcie 1.3.1, ,Lista krokéw algorytmu’, rozwigzujacego réwnanie liniowe ax+b = 0. Drzewo to odpowiada schematowi blokowemu pokazanemu na rysunku 1.1. nieskoniczenie réwnanie wile rozwigzaa spezecrne Rysunek 1.2. Drzewo algo- rytmu rozwigzujacego réw- nranie liniowe axtb = 0 Rozdziat 1. Wprowadzenie do algorytmiki 1.3.4, Program w jezyku programowania wysokiego poziomu Jednym z najwazniejszych sposobéw przedstawiania algorytmew jest program napisany w jezyku programowania wysokiego poziomu, Praktyczna implementacja algorytmu, jaka jest napisanie programu, ulatwia jego testowanie dla réznych danych wejéciowych, Ponadto jest to sposdb zrozumialy dla komputera. W podreczniku algorytmy zostaly przedstawione w postaci list krokéw, schematéw blokowych i programéw napisanych w jezykach programowania wysokiego poziom! C++ (patrz rozdziat 3., ,Programowanie w jezyku C++") i Pascal. Ponadto wybrane al- gorytmy zostaly zrealizowane za pomocg arkusza kalkulacyjnego. Wszystkie programy oraz arkusze znajduja sig na dolaczonej do podrecznika plycie CD, w folderach Rozdzial!, [o} Rozdzial2 i Rozdzial3. Ponidej przedstawiono programy w wymienionych jgzykach programowania realizu- jace algorytm opisany w punktach 1.3.1, 1.3.2 i 1.3.3, rozwiqzujacy rownanie liniowe ax+b=0. Program w jezyku C++ (prog1_lLcpp): tinclude using namespace std; main() { double a, b, x; cout<<"podaj a, b:">a>>b; if (a!=0) {x=-b/aj coutc<"x else if (b==0) cout<<"nieskoiczenie wiele rozwiqzan"® then begin x:=-b/a; writeln('x = ",x) end else iF b-0 then writeln(‘nieskoriczenie wiele rozwiazaf") else writeln('révnanie sprzeczne') end. Informatyka 13, Sposoby reprezentowania algorytméw 15, uropeezyka W kodach programéw zamieszczonych w podrgczniku stosowane sa polskie znaki diakrytyczne. W plikach zawierajacych kody programéw zapisanych na plycie CD zalaczonej do podrgcznika pominigto polskie znaki. Przyczyna takiego zapisu pol- skich znakéw jest rézny sposéb ich kodowania i prawdopodobienistwo bledéw ww odezycie tych znakéw podezas uruchamiania programow, ktore powinny dziataé poprawnie w réznych systemach operacyjnych i w dowolnych kompilatorach. Dodatkowo na plycie CD znajduje sig realizacja tego algorytmu wykonana za pomocq arkusza kalkulacyjnego (arkusz1_tL.xls, arkusz1_1.ods). Praykladowe programy przedstawiane sq w podrgczniku w calosci lub jako procedury- -funkcje. Na plycie CD wszystkie kody programéw zapisane sq w postaci umoéliwiajq- c¢j ich uruchomienie, W jezyku Pascal w wielu_procedurach i funkejach tablice jedno- wymiarowe i dwuwymiarowe przekazywane sq jako parametry. W tych programach typ tablicowy definiowany jest w czeSci deklaracyjnej programu poza procedurami i funk- cjami, co zawarte jest w programach zapisanych na plycie CD. 1.4. Algorytmy liniowe i z warunkami 1.4.1. Algorytmy liniowe Algorytm liniowy (zwany réwnied sekwencyjnym) to rodzaj algorytmu, w ktérym wszystkie instrukcje wykonywane sa kolejno, bez, koniecznosci rozpatrywania wa- runkéw. Kolejnosé wykonywanych operacji jest wige w algorytmach tego typu zawsze taka sama i nie zalezy od wezytywanych danych wejéciowych. Schemat blokowy jest tutaj struk- turg liniowa, bez rozgalezien. Program zawiera wylacznie operacje wejécia-wyjscia oraz instrukeje przypisani 0. Wynik: Suma n kolejnych liczb naturalnych wigkszych od 0: Lista krokéw: Krok 0. Wezytaj wartosé danej n. (n+) 2 Krok 1. Praypisz s= Krok 2. Wypisz wynik s. Zakovicz algorytm. Program w jezyku C++ (prog1_2.cpp): amr Rysunek 1.3, Schemat blo- gram w jezyk € staat) ieanry: preykladomesgn. alan” tinclude i rytmu liniowego using namespace std; main() { int n, 5; cout<<"podaj cin>on; sen*(n41)/25 cout<<"s < using namespace std; main() { int n, s5 cout<<"podaj cino>ny if (m>=1) {sen*(n41)/25 coute<"s else cout<<"n < a"<=1 then begin s else writeln('n < 1') *(n41) div 2; writeln('s = ',s) end end. W rozdziale 2.,,Algorytmy i ich zastosowanie’, oméwiono wiele algorytméw, w ktérych zastosowano instrukeje warunkowe. Przykladem moga byé algorytmy opisane w pod- rozdziale 2.1,,Algorytmy badajace wlasnosci geometrycane’: FATEREERA Podaj specyfikacje zadania i skonstruuj algorytm w postaci schematu blokowego sprawdzajacy, czy wprowadzona 7 klawiatury liczba catkowita jest parzysta. FETERICEWA Podaj specyfikacje zadania i skonstruuj algorytm w postaci listy krokéw i programu sprawdzajqcy, ktora z wprowadzonych z klawiatury trzech réznych liczb cal- Kowitych a, bic jest najwigksza. FATERISEEE Podaj specyfikacje zadania i skonstruuj algorytm w postaci schematu blokowego i programu sprawdzajqcy, ktéra z wprowadzonych z Klawiatury czterech r6i- nych liczb rzecaywistych a, b, cid jest najmniejsza. EATERICER Na rysunku 1.5 przedstawiono schemat blokowy pewnego algorytmu. Podsaj, jaka bedzie wartose zmiennych xi y po wykonaniu podanych dziala, jeéli na po- caatku wezytamy x = 5, y = 7. Napisz program realizujacy ten algorytm. Przeanalizuj podany ponizej kod programu: double x-0, y=1; if (x) xe43 else if (xty) yt=x+3; else if (y) x-—NE Program w jezyku C++ (prog1_4.cpp): #include #include using namespace std; Informatyka 1.4. Algorytmy liniowe iz warunkami 23 uropeezyka main() { double a, b, c, delta, x1, x2; cout<<"podaj wspétczynniki réwnania a, b, ¢ cin>>a>>b>>c3 0, to odejmowanie pojawia sig we wzorze 1.6.W sytuacji gdy b < 0, odejmowanie wykonywane jest we wzorze 1.5. Aby wy- eliminowaé to dzialanie, w miejsce wzoru generujqcego bledy wstawiamy odpowiednio praeksztatcony wz6r Vidte'a (1.9), wyznaczajacy ilocryn pierwiastkow rownania. Poprawiajac algorytm ,delty”, wprowadzamy zmiany, gdy spelniony jest warunek A> 0 Wowczas, jesli b > 0, wykonujemy dziatania: c a (1.19) % natomiast jesli b < 0, realizujemy operacje: c a. aan) i” Informatyka 114, Algorytmy liniowe i z warunkami uropeezyka 25 Realizacja omawianego algorytmu zostala przedstawiona w postaci listy krokéw i sche- matu blokowego (patrz rysunek 1.7). Rysunek 1.7. Schemat blokowy stabilnego algo- rytmu rozwiazujacego réwnanie kwadratowe STOP y i Lista krokéw: Krok 0. Wezytaj wartosci danych a, b, ¢. Krok 1. —_Jesli a = 0, wypisz komunikat ,to nie jest réwnanie kwadratowe” i zakofiez algorytm. Krok 2. (W tym przypadku a # 0). Praypisz delta = b*-dac. Krok 3. _Jesli delta < 0, wypisz komunikat ,rownanie nie ma pierwiastkw” i zakovicz algorytm. 26 Rozdziat 1. Wprowadzenie do algorytmiki Krok 4. (W tym przypadku delta > 0). Jesli delta = pisz wyznaczony pierwiastek x i zakoricz algorytm. , oblicz pierwiastek x ¢ Krok 5. (W tym przypadku delta > 0). Przypisz pom = RPE, = POM eypign wartosci 2a x wyznaczonych pierwiastkéw x, ix, oraz zakoricz algorytm. Krok 6. Jesli b > 0, oblicz pierwiastki x, svdelta 2a Krok 7. (W tym przypadku b < 0), Oblicz pierwiastki », wypisz wartosci wyznaczonych pierwiastkéw x, ix, Zakoacz algorytm. FETERIDEBER Napisz program rozwiqzujacy réwnanie kwadratowe algorytmem sta- bilnym (na podstawie schematu blokowego przedstawionego na rysunku 1.7). EZQCEMIEEBES Podaj specyfikacj¢ zadania i skonstruuj algorytm w postaci schematu blokowego i programu sprawdzajacy, czy cztery liczby calkowite a, b,c id wprowadzone zklawiatury sq mniejsze od 5. Jeéli wszystkie liczby spelniajq podany warunek, ma poja- wie sig komunikat ,, TAK", w przeciwnym wypadku — komunikat ,NIE”. EZCERIEEBER) Podaj specyfikacje zadania i skonstruuj algorytm w postaci listy krokow i programu sprawdzajacy, czy wird trzech liczb calkowitych x, yi z wprowadzonych z kla- wiatury znajduje sig liczba nieparzysta. Jesli chociaz. jedna z tych liczb spetnia podany wa- runek, ma pojawié sig komunikat ,, TAK’, w przeciwnym wypadku — komunikat ,NIE", FETEMIEEBER Podaj specyfikacj¢ zadania i skonstruuj algorytm w postaci schematu blokowego wyznaczajacy wartosé podanej funkcji: 2x dla x<1 -10 0 dla x=1 S()=Y(x-1) dla x=3 vk-4 dla x=6 o dla innych x Zmienna rzeczywista x nalezy wprowadzié z Klawiatury, W zadaniu zastosuj funkeje ma- tematyczne jezyka C++ (patrz punkt 3.2.6, ,Funkcje matematyczne”) FETEMIEEBEA Podaj specyfikacje zadania i skonstruuj algorytm w postaci programu wyznaczajacy wartosé podanej funkcji: x41 dla x<7 _leos(x-1) dla x=7 ie) Vix dla x=9 -8x dla innych x Informatyka 1.4. Algorytmy liniowe i z warunkami Europejzyka, Zmienna rzeczywista x nalezy wygenerowa¢ losowo z przedzialu [-5, 10]. W zadaniu zastosuj funkcje matematyezne jgzyka C++ Podaj specyfikacje zadania i skonstruuj algorytm sprawdzajacy, czy odcinki © dlugosciach podanych przez uzytkownika z klawiatury moga tworzyé tréjkat. Wybierz dowolng reprezentacjg algorytmu, Bokami tego samego tréjkata moga byé takie odcinki, ktérych suma dhugosci kazdej pary odcinkéw jest wicksza od dlugosci trzeciego. 1.5. Iteracja W przypadku algorytméw iteracyjnych operacje wykonujemy na zbiorze elementow. Liczba danych mote byé tutaj okreslona lub wprowadzana w algorytmie. Bae Iteracja to jedna z najwatniejszych technik algorytmicznych polegajaca na powta- rzaniu okreslonego ciagu operagji. Liezba powtorzen moze byé podana lub zalezeé od spelnienia okreslonego warunku. eT Przeanalizujmy przyktad pokazujacy zastosowanie techniki iteracji w przypadku, gdy ba powtérzeh jest okreslona. Skonstruujmy algorytm w postaci listy krokéw, schematu blokowego (patrz rysunek 1.8) i programu (patrz punkt 3.3.5, ,Instrukcje iteracyjne”) obliczajacy iloczyn n liceb natural- e nych: 3,4,5,6... gdzie n jest liczba naturalna wigksza od 0. Dodatkowo na plycie CD zapi- sano realizacje tego algorytmu wykonanq za pomocg arkusza kalkulacyjnego (arkusz1_5.x!s, arkusz1_5.0ds). Specyfikacja: Dane: —_Licrba naturalna: n> 0. Wynik: — loczyn n kolejnych liczb naturalnych 3, 4,5, 6. Lista krokéw: Krok 0. Wezytaj wartosé danej n. Krok 1. Przypiszs= 1 Krok 2. Dla kolejnych wartosci i: 3,4, 5, 6... wykonuj krok 3. Krok 3. Praypiszs=si. Krok 4. Wypisz. wynik s. Zakosez algorytm, 28 Rozdziat 1. Wprowadzenie do algorytmiki 4 Rysunek 1.8. Schemat blokowy Cone > przyktadowego algorytmu itera- cyinego Le] = an q STOP “Tabela 1.2 przedstawia przebieg wartoSci zmiennych sii w algorytmie zamieszczonym na rysunku 1.8 dla n= 4, Tabela 1.2. Preebieg wartoSci zmiennych s oraz i dla s i f 3 3 4 12 5 6 6 360 7 Unyskaligmy wynik s réwny 360. Dla rownego 4 wykonano dzialanie 3-4-5:6, co fak- tycznie wynosi 360. Program w jezyku C++ (prog1_5.cpp): #include using namespace std; main() { int n; cout<<"podaj liczbe elementéw nz cin>>n; int s=1, i=3; Informatyka open 15.iteracja 29 while (ic=n42) cout<<"s = “cesccendl; return 0; } Program w jezyku Pascal (progi_5,pas): program iloczyn; var n, s, i: integer; begin write("podaj liczbe elementow nz *); readIn(n); ae while ic-n+2 do end; writeln('s = ',s) end. yktad 1.5.> Nastepny przyklad pokazuje zastosowanie techniki iteracji w przypadku, gdy liczba powtérzef nie jest okreslona i zalezy od spelnienia podanego warunku. Skonstruujmy algorytm w postaci listy krokéw, schematu blokowego (patrz.rysunek 1.9) i programu obliczajacy sume wprowadzanych z Klawiatury liczb rzeczywistych nie wiek- szych od 50, Wezytywanie liczb koniezy wprowadzenie wartosci wigkszej od 50, Specyfikac Dane: _Liczby rzeczywiste nie wigksze od 50. ‘Wyn Suma wezytanych liezb rzeczywistych: s Lista krokéw: Krok 1. Przypisz s=0,a=0. Krok 2. Praypiszs=s+a. 30 Rozdziat 1. Wprowadzenie do algorytmiki Krok 3. Wezytaj wartosé zmiennej a. Krok 4. Jesli a 50, wrdé do kroku 2. Krok 5. Wypisz wynik s. Zakovicz algorytm. =>). Rysunek 1.9. Schemat blokowy pry- Gan) ktadowego algorytmu iteracyjnego, - yaa tee NIE TAK = Ss / > C10" Program w jezyku C++ (prog1_6.cpp): #include using namespace std; main() { double s5=8, a=0; do { st=a; cout<<"podaj liczbe rzeczywist: cin>>a; t while(ac=50); cout<<"suma = "50; writeln('suma = ',s:! end. W rozdziale 2.,,Algorytmy i ich zastosowanie”, oméwiono szczegdlowo i dokonano ana- lizy wielu algorytméw. Algorytmy te zrealizowano niejednokrotnie z wykorzystaniem techniki iteracyjnej. Przykladem moga byé metody generujace liczby pierwsze, opisane w podrozdziale 2.4, ,Generowanie liczb pierwszych i badanie, czy liczba jest pierwsza’. Podaj specyfikacje zadania i skonstruuj algorytmy iteracyjne w postaci schematu blokowego realizujace wypisywanie podanych ciagéw liczb calkowitych: a) 7-wyrazowy ciag liczb calkowitych postaci (-4,-1,2,5,8, 11, 14), b)_S-wyrazowy ciag liczb catkowitych postaci (—4,-1, 5, 11, 14), ¢) 7-wyrazowy ciag liczb calkowitych postaci (12, 8, 4, 0,~4, -8, -12), 12). Podaj specyfikacje zadania i skonstruuj algorytmy iteracyjne w postaci listy krokow i programu realizujace nastgpujace operacje (dla wszystkich przyktadéw n jest liczbg naturalna wieksza od 0, wprowadzana z klawiatury): 4) 6-wyrazowy ciag licab catkowitych postaci (12, 8, 4,4, -8, a) wySwietlanie n-wyrazowego ciggu liczb calkowitych postaci (3, 6, 12, 24, 48...), b)_wyswietlanie n-wyrazowego ciagu liczb calkowitych postaci (-3, 6, -12, 24, -48...), ©) obliczanie sumy n-wyrazowego ciagu liczb calkowitych postaci (-10, 2,8, 14, 20...), 4) obliczanie iloczynu n-wyrazowego ciagu liezb calkowitych postaci (1,-2.4, -8, 16, ~32..). Podaj specyfikacje zadania i skonstruuyj algorytmy iteracyjne w postaci schematu blokowego i programu obliczajace wartosci podanych wyrazen (dla wszystkich przykladéw n jest liczba naturalng wigksza od 0, wprowadzang z klawiatury): 32 Rozdziat 1. Wprowadzenie do algorytmiki 2:3 2-6 2612 2-24 SO ee oe 2°93. «4 FATERIEERP Podaj specyfikacje zadania i skonstruuj algorytmy iteracyjne w postaci programu realizujace: 4) suma n-wyrazowego ciagu postaci a) wypisywanie liczb naturalnych z przedziatu [2, 16) podzielnych przez 3, w kolejnogci od najmniejszej do najwigkszej, b)_ wypisywanie liczb naturalnych z przedzialu (8, 24], ktére nie sa podzielne przez 4, w kolejnosci od najwiekszej do najmniejszej Podaj specyfikacje zadania i skonstruuj algorytmy iteracyjne w postaci schematu blokowego i programu obliczajace wartosci podanych wyragen (we wszystkich praykladach ciagi sq n-wyrazowe, dotyczy to réwniez ciagow znajdujacych sig w licz- nikach i mianownikach wyrades, » jest liczb naturalna wigksza od 0, wprowadzanq zKlawiatury): a) -2+5-8+11-14+..., Bb) 4-(-8)-12-(-16)-20-..., oc) 142434...+0!, 142434 .0¢m a 2-6-10-14-18+..." 2) FO3)-0.03)-(0, 003)... IL 24 3b 4s Ste. =0,240,140,440,7414...” -24+7-12417-22+ 15.|teracja 33 Podaj specyfikacje zadania i skonstruuj algorytm w postaci programu obliczajgcy iloczyn wprowadzanych z klawiatury liczb calkowitych, ktére sq rézne od zera. Wpisywanie liczb powinno zakoaczyé sig w momencie, gdy iloczyn przekroczy wartosé 10 000. Po wykonaniu algorytmu nalezy wySwietlié nastepujace informacje: a) ile licab réanych od zera zostalo wpisanych z klawiatury, b)_wartosé wyznaczonego iloczynu. FATEMICEWEN Podaj specyfikacje zadania i skonstruyj algorytm w postaci programu obliczajacy sumg liczb calkowitych generowanych losowo 2 przedzialu [2, 50}. Doda- wanie liczb losowych powinno zakonczyé sig w momencie, gdy wartoéé kolejne} wy- ‘generowane liczby jest podzielna przez 7. Po wykonaniu algorytmu naledy wyswietlié nastepujqce informacje: a) najwigkszq wygenerowang losowo liczbe, b) wartosé wyznaczonej sumy. FETERIEERIH Na rysunku 1.10 przedstawiono schemat blokowy pewnego algorytmu. Podaj, jaki ciag znakéw zostanie wypisany po jego wykonaniu. Napisz program realizu- jacy ten algorytm. FATEMIEEWAA Przeanalizuj podany ponifej kod programu: int x=0, y=1, 2=2, a=1, b=5; for (int i=0i<3;i++) { cout<b;k--) cout<0 ow) Powydsza definicje ilustruje prayklad: Al = Bld = 213-4 = 1123-4 = OhL23-4 = L234 Skonstruujmy rekurencyjny algorytm wyznaczajacy silnig liczby naturalnej Specyfikacja: Dane: Liczba naturalna: n > 0. Wynik: — Silnia liczby naturalnej n: n! Definicjg rekurencyjna, na podstawie ktérej tworzymy funkejg rekurencyjng wyznacza- jaca n!, mozna przedstawié nastepujaco: ff 1 a3) a,=a,,n dla n>0 Informatyka 1.6. Rekurencja 37 Europejezyka Naszym zadaniem jest wyznaczenie wartosci wybranego wyrazu ciagu nastepujacej po- staci: (O!, 1!, 2, 31..). Jesli kazdemu wyrazowi tego ciagu przypiszemy nazwe w naste- Pujacy sposdb: a, = 01,4, = 1!....4, = nl, to praedstawiony wz6r bedzie wyznaczal n! dla liceby naturalnej 1 > 0. Poczatkowy wyraz tego ciagu a, = 0! jest okreslony i ma war- toSé 1, co podane jest w pierwszym wierszu definicji. Kaédy kolejny wyraz tego ciggu jest definiowany na podstawie poprzedniego, zgodnie z podana w drugim wierszu za- leinoscig rekurencyjna. Wykorzystujae podang definicje, zapiszmy algorytm w postaci funkeji rekurencyjnej (patrz punkt 3.5.1, ,Struktura funkeji”) w wybranym jezyku programowania Funkcja w jezyku C++ (progl_7.cpp): int oblicz (int n) { if (n==@) return 1; return oblicz(n-1)*n; } Funkeja w jezyku Pascal (prog1_7,pas): function oblicz (n: integer): integer; begin if n=1 then oblicz:=1 else oblicz:=oblicz(n-1)*n end; Na rysunku 1.11 pokazano wywotania rekurencyjne przedstawionych funkcji dla » = 5 ozroMy aeuRewcit oblicz(5)_Rysunek 1.11, Poziomy wywolaf rekurency}- rnych funkeji wyznaczajace) nl dla n = 5 1 obliez(a)*5 2 oblicz(a}¢4 3 oblicz(2)*3 4 oblicz(1)*2 5 cblicz(0)"1 Rozdziat 1. Wprowadzenie do algorytmiki Obserwujac wywolania rekurencyjne funkeji oblica(1) dla n = 5, widzimy, Ze ich zakon- czenie nastgpuje po spelnieniu warunku okreslajacego wyraz, poczatkowy ciagu, kto- rym jest O!. Blednie okreslone wartosci poczatkowe moga spowodowag, ze wywolania rekurencyjne nie zostana zakoficzone. Waane jest wige poprawne sformulowanie war- tosci poczatkowych, ktére jednoczesnie stanowia warunki zakoiczenia wywolai reku- rencyjnych funkcji. Wartosci generowane podczas obliczet, czyli 5, 4, 3,2, 1, odkladane 84 W pamigci na stos. Po zakoriczeniu wywolari rekurencyjnych liczby te pobierane sa ze stosu w odwrotnej kolejnosci i, zgodnie z zaleznoécia rekurencying, wykonywane sq obliczenia: 1-1-2:3-4-5, W efekcie uzyskujemy 5! = 120. Podane poziomy okreslaja glgbo- kosé rekurencji, ezyli informuja nas, po raz ktéry funkcja zostala wywolana rekurency)- nie w pojedynczym przebiegu. PETERSEN Skonstruyj algorytm iteracyiny wyznaczajacy n! w postaci listy krokow, schematu blokowego i programu w wybranym jezyku programowania, 1.6.2. Wyznaczanie wyraz6w ciagu Fibonacciego ‘Typowym przyktadem zastosowania rekurencji jest wyznaczenie n-tego wyrazu ciagu Fibonacciego, ktorego wyrazy maja nastepujace wartosei (1, 1, 2,3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610...) Ciekawostka ‘Wioski matematyk Leonardo Fibonacci w 1202 roku w ksiazce Liber abact zajat sie prob- lemem szybkosci rozmnazania sie krélik6w. Chodzi oczywiscie o matematyczny model rozrastania sig pewnej okreslangj struktury, W konsekwencji swoich badan uczony uzy- skat nowy ciag liczbowy. W madelu przedstawionym przez Fibonacciego rozmnazanie sie krélikow zawsze rozpoczyna sig od jednej pary zwierzat. Ponadto matematyk zaktada, ze kréliki rozmnazaja sie zgodnie z nastepujacymi zasadami: + kazda nowa para krélik6w moze mie¢ potomstwo po doktadnie jecnym miesiacu zycia; + kaéda para krlikéw, mogacych byé rodzicami, co miesiac wydaje na Swiat potom- stwo — kolejna pare krdlikow; + kréliki nie starzeja sie i nie choruja, a wiec nie umieraja. Przedstawione zalodenia nie przypominajg Zycia prawdziwych krolikow — mamy tutaj do czynienia z modelem okreslajacym abstrakcyjne zasady rozrastania sig pewne) struk- tury. Zmiany pojawiajg sig doktadnie co miesiac i dotycza liceby par krOlikow. Nalezy wige zadaé pytanie: ,Ile par krdlikéw uzyskamy po uplywie n miesigcy?”. W odpowiedzi otrzymamy n-ta liczbe ciagu Fibonacciego. Na rysunku 1.12 przedstawiony zostat sche- mat powigkszania sig rodziny krélikéw zgodnie z podanymi zasadami dla n = 6. Informatyka 1.6, Rekurencja Europejezyka, 39 Numer mlesigca Letba par krétkéve pom miesigcach: | Rysunek 1.12. Schemat powigkszania sig rodziny krélik6w dla n = »mtode” oznacza par¢ nowo narodzonych krélikéw, natomiast ,rodzic potomstwo ‘w modelu Fibonacciego. Okreslenie to para krOlikéw, ktéra moze mieé W schemacie przedstawionym na rysunku 1.12 liczba par krélikéw po n miesiqcach jest réwna n-temu wyrazowi ciagu Fibonacciego. Definicja rekurencyjna ciagu Fibonacciego wyglada nastepujaco: a,=a, { i re) a,=4,,+4,, dla n>2 Specyfikacja: Dane: Liczba naturalna: n > 0. wy n-ty wyraz ciagu Fibonacciego. Funkeja w jezyku C++ (prog1_8.cp int oblicz (int n) { if (n==1||n==2) return 15 return oblicz(n-1)+oblicz(n-2); Rozdziat 1. Wprowadzenie do algorytmiki Funkeja w jezyku Pascal (prog1_8 pas): function oblicz (n: integer): integer; begin if (neL)or(n=2) then oblicz:=1 oblicz(n-1)+oblicz(n-2) else oblic end; Rystnek 1.13 przedstawia analize wywolai rekurencyjnych funkeji oblicz(n) dla n = 6 /POZIOMY REKURENC ae) | 1 oblicz(5) + oblicz(4) a NN 2 bic) abc) bia) + abet) 4 | 3 oblic2(3) + oblicz(2) gblicz(2) + oblicz(1) ‘ablicz(2) + oblicz(1) J 4 ble + oblex Rysunek 1.13. Poziomy wywotati rekurencyjnych funkcji wyznaczajacej n-ty wytaz ciagu Fibonacciego dla n = 6 Z powyészej analizy wynika, 2 wyznaczanie liczb Fibonacciego nic jest trudne. Defini- cja rekurencyjna i przebieg wywolat rekurencyjnych potwierdzaja prostot rozwigzania problemu, Widoczne sq jednak réwniez wady rekurengji. Przygladajac sig schematowi wywolant rekurencyjnych, mozemy dostrzec, Ze juz przy n = 5 niektore wywolania funk- ji wykonywane sq wielokrotnie,na przyklad dla n réwnego 3 funkcja uruchamiana jest dwa razy, dla n rownego 2 — aé.trzy razy. Zlozonos¢ obliczeniowa algorytmu rekuren- cyjnego jest wigc w tym przypadku wigksza nid, algorytmu iteracyjnego, w ktorym ta- Kich powt6rzert nie ma FATERICEREE Skonstruuj algorytm iteracyjny wyznaczajacy n-ty wyraz ciagu Fibo- nacciego w postaci listy krokéw, schematu blokowego i programu w wybranym jezyku programowania. Informatyka 1.6. Rekurencja 41 Europejezyka FATERISBREL Podaj specyfikacje zadania i skonstruuyj algorytmy rekurencyjne w po- staci programéw wyznaczajace n-ty wyraz podanego ciagu liczbowego. Podaj definicje rekurencyjne ciagw: a) (4,7, 10, 13, 16, 19, 22, 25, 28...), b) (2,4,8,16, 32, 64, 128, 256, 512...), ©) (0,2,-0,6, 1,8, -54, 16,2, -48,6, 145.8... 4) (-10,5,-2,5, 1,25, -0,625, 0,3125...), e) (3,5,4,6,5, 7, 6,8, 7). £) (1,5, 1,055, -0,5, -2, ~4,5, -8,5, -15..), g) (-3,1,-4,-5, 19, -96, -1825, 175199...), h) (-2,2,5, 3, -5, 7,5, —4,5, -0,5, 8, -125...), i) (-1,0,0,5, 1,5, 15,1, -0,5, -2, -3...), i) @,1,~-1,2,-2,3, -3,4,-+ Wygeneruj ciagi liczbowe (podajac wartosci co najmniej siedmiu ko- lejnych wyraz6w) na podstawie podanej definicji rekurencyjnej. Podaj specyfikacje i skonstruuj rekurencyjne algorytmy w postaci programéw, wyznaczajace n-ty wyraz zdefiniowanego ciagu. att dla n>1 a 42 Rozdziat 1. Wprowadzenie do algorytmiki Oo o3 a,=4,,+2a,, dla n>3 Podaj specyfikacjg zadania i skonstruuj algorytm w postaci programu obliczajacy wartosé symbolu Newtona okreslonego wzorem: gdzie k i n to liceby naturalne spelniajqce warunek 0< k <1. FETERISEREYA Podaj specyfikacje zadania i skonstruuj rekurencyjny algorytm w po- staci programu obliczajacy x", gdzie x jest liezbq rzeczywista, a n jest liczba calkowita wigksza lub réwng 0, Podaj definicjg rekurencying dla tego algorytmu. 1.6.3. Wieze Hani Znanym przykladem problemu algorytmicznego rozwiazywanego rekurencyjnie jest zagadka wied Hanoi. Zasady tej gry sq nastepujace: + mamy trzy paliki, ktére oznaczamy: A, B,C; + mamy okreslona liczbg krazkw réznej wielkoscis + krazki nafozone sq na palik A i ulogone kolejno od najwigkszego znajdujacego sig na dole do najmniejszego na gorze; + zadanie polega na przetozeniu wszystkich krazk6w z palika A na palik B; + pray przekladaniu krazkéw moana korzystaé z palika C; + wolno przetozyé jeden krazek z dowolnego palika na inny dowolny paliks + nie wolno polozyé wigkszego krazka na mniejszy. Po wykonaniu zadania wszystkie kraéki powinny znajdowaé sig na paliku B, wlofone Kolejno od najwigkszego znajdujqcego sig na dole do najmniejszego Na rysunku 1.14 przedstawiono rozwiazanie problemu dla trzech krazkow. Analizujac to rozwiazanie, latwo zauwaiy€ kolejne etapy algorytmu: 1, Przeniesienie dwéch krqék6w z palika A na palik pomocniczy Cz wykorzystaniem palika B. 2. Przeniesienie najwigkszego krazka z palika A na palik docelowy B. 3. Przeniesienie dwoch krazkow z palika C na palik Bz wykorzystaniem palika A. Podaj propozycje rozwiazania zagadki wiez Hanoi dla czterech krazkow. Informatyka 11.6, Rekurencja Europejezyka, Rysunek 1.14, Rozwigzanie zagadki wie? Hanoi dla treech kra2kéw. Niebieskim kolorem wyrézniono krazek, tary w danym kroku zostat preeniesiony Po wykonaniu éwiczenia widaé jué, de podane etapy dziatania dla trzech krazkéw mozna wykorzystaé do rozwigzania lamiglowki dla n krazkéw. Ogélna postaé algorytmu dla nkrazkéw przedstawia sig wigc nastepujaco: 1, Praeniesienie n-1 krazkéw z palika A na palik pomocniczy Cz wykorzystaniem palika B. 2. Przeniesienie najwiekszego krazka z palika A na palik docelowy B. 3. Przeniesienie n-1 krazkéw z palika C na palik Bz wykorzystaniem palika A. Motemy wige przejsé do szezegétowego zapisu algorytmu dla n krazkow. Specyfikacje Dane: —‘Trzy paliki oznaczone A, Bi C. Liceba naturalna: n > 0 (liczba krazkéw). n krazkéw réinej wielkosci, kt6re sq nalozone na palik A i ulozone kolejno od najwickszego, znajdujacego sig na dole, do najmniejszego na gérze. Rozdziat 1. Wprowadzenie do algorytmiki Wynik: 1 krazkéw réznej wielkosci, ktore sq nalozone na palik B i ulozone kolejno od najwigkszego, znajdujacego sig na dole, do najmniejszego na gérze. Przeniesienie krazk6w z palika A na palik B wykonane z uwzglednieniem za- sad gry w wiede Hanoi. Lista krokow: Krok 0. Wezytaj wartosé danej n. Algorytm rekurencyjny (x, A, B, ©) Krok 1. _Jesli n = 0, to zakoxicz algorytm. Krok 2. Uruchom ten algorytm z parametrami (n-1, A, C, B) — przeniesienie n-1 krazk6w z palika A na palik Cz wykorzystaniem palika B. Krok 3. Przei § ostatni krazek z palika A na palik B. Krok 4. Uruchom ten algorytm z parametrami (1-1, C, B, A) — praeniesienie n—1 krazk6w 2 palika C na palik Bz wykorzystaniem palika A. Funkeja w jezyku C++ (prog1_9.cpp): void oblicz (int n, char a, char b, char c) { if (n>@) { oblicz(n-1,a,¢,b); coutecacc” na "@ then begin oblicz(n-1,a,c,b); writeln(a,* na ',b); oblicz(n-1,c,b,a) end end; Informatyka 1.6. Rekurencja 45 Europejezyka Przejdémy do analizy zlozonosci przedstawionego algorytmu. Operacja dominujaca jest tutaj przeniesienie krazka z jednego palika na drugi. Wyznaczmy, ile razy trzeba prze- nieéé krazek, aby wykonaé zadanie dla n krazk6w. Dla jednego krazka bedzie to 1 ruch, dla dwéch — 3, dla trech — 7, dla ezterech — 15, dla pigciu — 31 itd. Latwo zauwa- iyé, ze dla n krazkéw wykonujemy 2"-1 przeniesied. Majgc n krazkow, najpierw prze- Kladamy n-1 krazk6w na wolny palik. W nastepnym kroku wykonujemy przeniesienie n-tego krazka na docelowy wolny palik. Ostatnim etapem jest przetozenie n-1 krazkéw na przeniesiony wezeéniej n-ty krazek. Liczbe przeniesien krazkéw moéna wyrazié w postaci definicji rekurencyjnej: ff : (as ja,=2a,,+1 dla n>1 Wartosé poczatkowa a, okresla liczbg przeniesien dla 1 kraéka. Zalednogé rekurencyjna wyznacza liczbe przeniesie’ dla n krazkéw, dla n wigkszego od 1. Wiedzac, ze n-1 przeniesien wymaga 2"*-1 przesunigé krazk6w, mozemy sprawdzié, czy uzyskamy poprawng ogélng liczbe przetozen dla n krazkow, ezyli (2"'-1)+14(2""-1) = 2am) 221, Uzyskaliémy wig zlozonose wykladnicza rzedu O(2") — patra. punkt 1.10.1,,,Ztozonose obliczeniowa i efektywnosé algorytméw”, FETENICBREER Podaj specyfikacjg i skonstruuj algorytm iteracyjny w postaci listy kro- kéw rozwigzujqcy zagadke wied Hanoi dla n kradkow. Wybrane zadania maturalne Na zalaczonej do podrecznika plycie CD zamieszczono tresci wybranych zadai ma- turalnych. Zaproponowane zadania wymagaja od ucznia umiejetnosci wykorzystania techniki rekurencyjnej. + matura1.4,pdf (Informator maturalny od 2005 1. Arkusz I, zadanie 3.) + matural.5.pdf (Egzamin maj 2005 r. Arkusz I, zadanie 2. EWOLUCTA). + matural.6.pdf (Egzamin maj 2006 r. Arkusz I, zadanie 1. SUMA SILND). + matural.7.pdf (Egzamin probny 2006 1. Arkusz I, zadanie 3. DZIWNY CIAG), + matural.8.pdf (Egzamin probny 2009 r. Arkusz I, poziom rozszerzony, zadanie 2. TOTO-LOTEK). 46 Rozdziat 1. Wprowadzenie do algorytmiki

You might also like