Opis schematów
Transkrypt
Opis schematów
PODSTAWY INFORMATYKI Co dzisiaj? • • • • • Algorytm, algorytmika Sortowanie Złożoność obliczeniowa Oprogramowanie Licencje 1 Algorytm i algorytmika • Algorytm – skończony, uporządkowany zbiór jasno zdefiniowanych czynności, koniecznych do wykonania pewnego zadania. Słowo "algorytm" pochodzi od nazwiska matematyka perskiego (IX wiek) Muhammed ibn Musa al-Chorezmi ( أبو )عبد محمد بن موسى الخوارزمي. • Algorytmika – dział informatyki zajmujący się poszukiwaniem, konstruowaniem i badaniem własności algorytmów w kontekście ich przydatności do rozwiązywania problemów za pomocą komputerów. Algorytmy – sposoby zapisywania • Zapis w postaci ciągu kroków (języka potocznego: jeden krok - jedna operacja) • Zapis w postaci graficznej - schematy blokowe • Zapis w języku programowania Algorytm wyrażony w jakimś języku programowania nazywa się programem. Algorytmy powinny być tak przedstawiane, aby było możliwe ich jednoznaczne odczytanie i zastosowanie. 2 Schematy blokowe • Schematy blokowe są tzw. metajęzykiem. Jest to język bardzo ogólny; służy do opisywania algorytmów w taki sposób, by na jego podstawie można było je zaimplementować w każdym języku programowania. • Magiczne Bloczki • EDGE Diagrammer 5.5 • EDraw Flowchart Software 1.6.3 • … Schematy blokowe • Częściami składowymi schematów blokowych są proste figury geometryczne (prostokąt, romb, koło, równoległobok itd.). W tych figurach umieszczamy warunki oraz proste instrukcje, przy czym mogą być one związane z jakimś konkretnym językiem (np. symbolem instrukcji przypisania może być ":=" jak w Pascalu lub "=" tak, jak w C). 3 Schematy blokowe • Jeśli tworząc schemat nie jesteśmy jeszcze zdecydowani w jakim języku będziemy pisali nasz program lub tworzymy schemat dla kogoś, to lepiej jest stosować notację bardziej symboliczną, np. instrukcję przypisania zapisywać jako strzałkę skierowaną od wartości przypisywanej do zmiennej. Licznik 0 Opis schematów • Poszczególne elementy schematu łączy się za pomocą strzałek. W większości przypadków blok ma jedną strzałkę wchodzącą i jedną wychodzącą, lecz są także wyjątki. 4 Początek/koniec algorytmu • • • W każdym algorytmie musi się znaleźć dokładnie jedna taka figura z napisem "Start" oraz dokładnie jedna figura z napisem "Stop". Blok symbolizujący początek algorytmu ma dokładnie jedną strzałkę wychodzącą a blok symbolizujący koniec ma jedną strzałkę wchodzącą. Najczęściej popełnianym błędem w schematach blokowych jest umieszczanie kilku stanów końcowych, zależnych od sposobu zakończenia programu. Jest to niedopuszczalne, w programie mamy dokładnie jedną instrukcję "end." START STOP Opis schematów • Figura oznaczająca proces. W jej obrębie umieszczamy wszelkie obliczenia lub podstawienia. Proces ma dokładnie jedną strzałkę wchodzącą i dokładnie jedną strzałkę wychodzącą. 5 Opis schematów • Romb symbolizuje blok decyzyjny. Umieszcza się w nim jakiś warunek (np. "x>2"). Z dwóch wybranych wierzchołków rombu wyprowadzamy dwie możliwe drogi: gdy warunek jest spełniony (strzałkę wychodzącą z tego wierzchołka należy opatrzyć etykietą "Tak") oraz gdy warunek nie jest spełniony (etykieta „Nie”). Każdy romb ma dokładnie jedną strzałkę wchodzącą oraz dokładnie dwie strzałki wychodzące. Opis schematów • Równoległobok jest stosowany do odczytu lub zapisu danych. W jego obrębie należy umieścić stosowną instrukcję np. Read(x) lub Write(x) (można też stosować opis słowny np. "Drukuj x na ekran"). Figura ta ma dokładnie jedną strzałkę wchodzącą i jedną wychodzącą. 6 Opis schematów • Proces, który został już kiedyś zdefiniowany. Można porównać do procedury, którą definiuje się raz w programie, by następnie móc ją wielokrotnie wywoływać. Warunkiem użycia jest więc wcześniejsze zdefiniowanie procesu. Jedno wejście i jedno wyjście. Opis schematów • Koło symbolizuje tzw. łącznik stronicowy. „Przeskok" z jednego miejsca na kartce na inne (np. by nie krzyżować strzałek). Umieszczamy w jednym miejscu łącznik z określonym symbolem w środku (np. cyfrą, literą) i doprowadzamy do niego strzałkę. Następnie w innym miejscu kartki umieszczamy drugi łącznik z takim samym symbolem w środku i wyprowadzamy z niego strzałkę. Łącznik jest często porównywany do teleportacji (z jednego miejsca na kartce do drugiego). Łączniki występują więc w parach, jeden ma tylko wejście a drugi wyjście. A A 7 Opis schematów • Łącznik międzystronicowy. Działa analogicznie jak łącznik stronicowy, lecz nie w obrębie strony. Przydatne w złożonych algorytmach, które nie mieszczą się na jednej kartce. Uwaga: jeśli stosujemy oba typy łączników w schemacie, to najlepiej jest stosować liczby do identyfikowania jednych i litery do drugich. Dzięki temu nie dojdzie do pomyłki. 1 1 Iteracja – działanie w pętli?! Iteracja to technika algorytmiczna polegająca na wykonaniu tej samej instrukcji n razy. • Iteracja oszczędza czas programisty (nie trzeba wpisywać instrukcji n razy, zależnie od liczby zmiennych). • Liczba powtórzeń w iteracji jest zwykle z góry określona lub zależy od spełnienia określonego warunku. 8 Silnia • Wersja iteracyjna • Wersja rekurencyjna silnia(0)=1 silnia(n)=n*silnia(n-1) Sortowanie bąbelkowe (bubblesort) • Sprawdzamy całą tablicę od końca, jeżeli trafimy na parę elementów, w której większy poprzedza mniejszy, to zamieniamy je miejscami i znów zaczynamy przeszukiwać tą tablicę od końca. Czynność powtarzamy tak długo aż podczas sprawdzania całej tablicy, nie zajdzie ani jedna zamiana elementów. Realizuje się to najczęściej za pomocą zmiennej logicznej. • Algorytm nosi nazwę bąbelkowego, gdyż najmniejsze liczby "wypływają" z dołu tablicy na jej szczyt. 9 Sortowanie bąbelkowe (bubblesort) • Przykład zastosowania dla nieuporządkowanego ciągu liczb <<2, 4, 1, 3>>. Sortowanie bąbelkowe (bubblesort) • Gdy ciąg wejściowy będzie posortowany, to algorytm wykona tylko jeden przebieg. • Najgorszym zestawem danych dla tego algorytmu jest ciąg posortowany nierosnąco. 10 Sortowanie przez zliczanie (countingsort) • Zaleta: działa w czasie liniowym (jest szybki) • Wada: może sortować wyłącznie liczby całkowite • Sposób sortowania: Polega na liczeniu, ile razy dana liczba występuje w ciągu, który mamy posortować. Następnie wystarczy utworzyć nowy ciąg, korzystając z danych zebranych wcześniej. Sortowanie przez zliczanie (countingsort) • Przykład: posortować ciąg: 3,6,3,2,7,1,7,1. Po zliczeniu (w jednym kroku) operujemy danymi na temat liczności poszczególnych liczb: – – – – – – – Liczba 1 występuje 2 razy Liczba 2 występuje 1 raz Liczba 3 występuje 2 razy Liczba 4 występuje 0 razy Liczba 5 występuje 0 razy Liczba 6 występuje 1 raz Liczba 7 występuje 2 razy • Na podstawie tych danych tworzymy ciąg: 1,1,2,3,3,6,7,7. Jest to ciąg wejściowy, ale posortowany. 11 Sortowanie przez zliczanie (countingsort) • Proces zliczania odbył się w jednym kroku • Nie doszło do ani jednej zamiany elementów • Proces tworzenia tablicy wynikowej odbył się w jednym kroku • Do przechowywania liczby wyrazów ciągu musimy użyć tablicy, o liczbie elementów równej największemu elementowi ciągu • Sortować można jedynie liczby całkowite Schematy blokowe – pętla FOR x←a x ≤b NIE for ((x=$a; $x<=$b; x++)) TAK Blok instrukcji x ←następna wartość x do {blok instrukcji} done 12 Schematy blokowe – pętla WHILE x>a NIE while [ x –gt a ] do TAK Blok instrukcji {blok instrukcji} done Wykonywanie w przypadku spełnienia warunku. Zapętlenie algorytmu • Zapętlenie algorytmu to błąd w projektowaniu kroków algorytmu polegający na pominięciu warunku (np. licznika), który kończy działanie w pętli (iterację). W takiej sytuacji iteracja trwa w nieskończoność, gdyż program wykonujący działanie nie wie kiedy ma ją przerwać. 13 Translacja • TRANSLACJA to tłumaczenie programu na język wewnętrzny komputera, wykonywane za pomocą wyspecjalizowanego programu, tzw. translatora. Translacja Kompilacja Interpretacja Typy translacji Kompilacja i interpretacja • KOMPILACJA - przetłumaczenie programu w całości, tak by mógł on być wykonany przez komputer przy każdorazowym uruchomieniu. Raz skompilowany program nie wymaga już powtórnej operacji tłumaczenia. Do wykonania kompilacji służą programy narzędziowe kompilatory. • INTERPRETACJA - tłumaczenie programu tworzonego w jednym z języków programowania instrukcja po instrukcji, tak by każda wywołana instrukcja była wykonana przez komputer. Tłumaczenie następuje każdorazowo przy uruchomieniu programu. 14 Inne pojęcia • PROGRAMOWANIE STRUKTURALNE to rozbicie działania programu na procedury (podprogramy), z których każda odpowiada za rozwiązanie określonego problemu. • PROCEDURA to wyodrębniona część programu, mająca jednoznaczną nazwę i ustalony sposób wymiany danych z innymi częściami programu. • PARAMETRY to zmienne, poprzez które procedura komunikuje się z innymi fragmentami programu. Parametry formalne to zmienne wpisane w procedurę, które zastępowane są przez konkretne dane (parametry aktualne) w momencie wywołania programu. Złożoność obliczeniowa • Jest to jeden z najważniejszych parametrów charakteryzujących algorytm. Decyduje on o efektywności całego programu. Podstawowymi zasobami systemowymi uwzględnianymi w analizie algorytmów są czas działania oraz obszar zajmowanej pamięci. Na złożoność czasową składają się dwie wartości: pesymistyczna, czyli taka, która charakteryzuje najgorszy przypadek działania oraz oczekiwana. Najczęściej algorytmy mają złożoność czasową proporcjonalną do funkcji: – log(n)- złożoność logarytmiczna – n - złożoność liniowa – nlog(n) - złożoność liniowo-logarytmiczna – n2 - złożoność kwadratowa – nk - złożoność wielomianowa – 2n - złożoność wykładnicza – n! - złożoność wykładnicza, ponieważ n!>2n już od n=4 15 Rzędy wielkości funkcji • Służą do opisu czasu działania algorytmu. • Istnieją 3 notacje: • Notacja O (omikron) • Notacja Θ (theta) • Notacja Ω (omega) Notacja O (omikron) • Jest to ograniczenie funkcji od góry. Gdy mówimy, że pewna f(n) funkcja jest rzędu g(n), co zapisujemy f(n)=O(g(n)), to znaczy, że istnieje taki argument n0, od którego począwszy, dla każdego niemniejszego od n0 wartości funkcji f(n) są niewiększe od wartości funkcji g(n) z dokładnością do stałej c. Na prawo od punktu od n0 funkcja f(n) znajduje się pod funkcją c*g(n), czyli jest przez nią ograniczona z góry. Jest to asymptotyczna granica górna. Służy do szacowania czasu działania algorytmu w przypadku pesymistycznym. 16 Notacja Θ (theta) • Notacja ta ogranicza funkcję f(n) od góry, tak jak notacja O oraz dodatkowo od dołu. Oznacza to, że jeżeli f(n)=Θ(g(n)), to istnieje taki argument n0, od którego począwszy dla każdego argumentu od niego niemniejszego: – wartości funkcji f(n) są niewiększe od wartości funkcji g(n) z dokładnością do stałej c1 – wartości funkcji f(n) są niemniejsze od wartości funkcji g(n) z dokładnością do stałej c2 Na prawo od punktu od n0 funkcja f(n) znajduje się pod funkcją c1*g(n), czyli jest przez nią ograniczona z góry i nad funkcją c2*g(n), czyli jest przez nią ograniczona z dołu Jest to asymptotyczne oszacowanie dokładne. Notacja Ω (omega) • Notacja ta ogranicza funkcję f(n) od dołu. Oznacza to, że jeśli f(n)=Ω(g(n)), to istnieje taki argument n0, od którego począwszy dla każdego argumentu od niego niemniejszego funkcja f(n) jest niemniejsza niż g(n) z dokładnością do stałej c. Na prawo od punktu od n0 funkcja f(n) znajduje się nad funkcją c*g(n). Jest to asymptotyczna granica dolna. Służy więc do oszacowania działania algorytmu w najlepszym przypadku. 17 Oprogramowanie • Oprogramowanie tworzą programiści w procesie programowania. • Oprogramowanie jako przejaw twórczości jest chronione prawem autorskim. • Twórcy zezwalają na korzystanie z niego na warunkach określanych w licencji. Rodzaje licencji • Licencje własnościowe (ang. proprietary licences, closed source - kod źródłowy niedostępny) • Wolne oprogramowanie źródłowy jest udostępniony) (open source, kod • Domena publiczna (dzieła, z których nastąpiło zrzeczenie się domniemanego autorstwa przez ich twórcę, dane ogółowi do dyspozycji, de facto brak licencji) • Nieznana licencja 18 Licencje własnościowe • Freeware (użytek bez ograniczeń, (zwykle) bez prawa do deassemblacji/dekompilacji binariów) • Demo (wersja demonstracyjna) • Trialware (czasowe ograniczenia, zaimplementowana pełna funkcjonalność lecz (najczęściej) na pewnych zasadach) • Shareware (programy na licencji testowej, funkcjonalność (zwykle) zaimplementowana, lecz niedostępna do czasu rejestracji) • Donation-ware (można "odpłacić" twórcy przekazując darowiznę/podarki, np. postcardware dobrowolne wysłanie pocztówki, beerware - funduje się piwo… i wiele innych) • Abandonware (często NIEUZNAWANA PRAWNIE!, programy niewspierane już traktowane jako porzucone, a więc nieprzynoszące zysków autorowi) • Firmware (licencja na oprogramowanie układowe, modyfikacja zwykle zabroniona) • Adware (darmowe, pokazujące reklamy) Wolne oprogramowanie • Licencje Copyleft ((na ogół) dzieła pochodne muszą być na tej samej licencji, zakaz rozpowszechniania bez źródeł) przy redystrybucji programu nie można wprowadzać ograniczeń odmawiając wolności innym. • General Public License (w różnych rewizjach tejże licencji, również tzw. Lesser /Library GPL) – zasady licencyjne określone przez konsorcjum Free Software Foundation, zakazujące redystrybucji oprogramowania w formie czysto binarnej; udostępniane wraz z postacią źródłową. • Licencje permisywne (brak ograniczeń nakładanych na licencjonowanie dzieł pochodnych) – np. trójklauzulowa licencja BSD (bez konieczności reklamowania twórcy dzieła). 19 Dodatkowo… • Pełna wersja – program komercyjny bez żadnych ograniczeń. Rozprowadzanie w innych mediach (np. w internecie) jest niezgodne z prawem • Licencja jednostanowiskowa (one-site licence) – instalacja nabytego oprogramowania tylko w jednym komputerze. Licencja jednostanowiskowa, jak każda, nie zabrania sporządzenia kopii zapasowej oprogramowania. • Licencja grupowa (site licence) – użytkowanie oprogramowania w sieci lub w zestawie komputerów: szkoła, pracownia; określenie maksymalnej liczby stanowisk. Rodzaje licencji • Licencja GPL (General Public Licence) – zasady licencyjne określone przez konsorcjum Free Software Foundation, zakazujące redystrybucji oprogramowania w formie czysto binarnej; udostępniane wraz z postacią źródłową. • Licencja typu Public Domain – licencja dobroczynna czyniąca z oprogramowania własność ogółu, w myśl której autor lub autorzy oprogramowania zrzekają się praw do upowszechniania oprogramowania na rzecz ogółu użytkowników. • Nieznana licencja – program nie posiadający pliku licencyjnego lub innej formy dokumentu określającego sposób jego licencjonowania. 20 Oprogramowanie Wersje testowe: • alfa – testowanie składników, • beta – testowanie całego systemu przez użytkowników; często "final beta" są darmowe, ale z błędami. Dziękuję za uwagę 21