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

Podobne dokumenty