Tento výukový materiál vznikl v rámci Operačního programu Vzdělávání pro konkurenceschopnost 1. KŠPA Kladno, s. r. o., Holandská 2531, Kladno, Číslo projektu: CZ.1.07/1.5.00/ Číslo materiálu: VY_32_INOVACE_VYA-1-20 Tematický celek (sada): Algoritmizace Téma (název) materiálu: Třídící vývojové diagramy Předmět: Vývoj aplikací Ročník / Obor studia: 1.ročník/ Informační technologie Autor / datum vytvoření: Ing. Bc. Jaroslava Horová/ Anotace: Žáci se seznámí se seznámí s pojmem třídící vývojové diagramy. Metodický pokyn: Určeno k prezentaci nebo samostudiu. 1
data řadíme podle velikosti nebo alfanumerických údajů úlohy hromadného zpracování dat data po setřídění jsou snadněji a rychleji analyzovatelná načtená data musí být před tříděním uložena Výsledné číslo ve dvojkové soustavě zapisujeme od spodu:
podle zadání vstupních dat: 1. setřídění předem známého počtu čísel nebo znaků 2. setřídění neznámého počtu čísel podle vlastního způsobu seřazování: 1. složitostí vývojového diagramu 2. počtem pomocných proměnných 3. počtem porovnání Výsledné číslo ve dvojkové soustavě zapisujeme od spodu:
na začátku vývojového diagramu pro třídění se vyskytuje načtení dat, je pro všechny třídící vývojové diagramy stejné ve vývojovém diagramu nebude rozpracováno načtení dat, bude označeno značkou podprogramu 4 Načti vektor A[N] Načtení n čísel do strukturované proměnné pole A o n položkách.
postupně vybíráme jeden prvek po druhém a porovnáváme s prvním prvkem nesetříděné posloupnosti, je-li prvek, který je na řadě menší než první, vymění se vzestupné třídění – od nejmenšího prvku k největšímu, popř. od A do Z sestupné třídění – od největšího k nejmenšímu, popř. od Z do A 5
Výhody: velmi jednoduchá metoda snadno naprogramovatelná Nevýhody: velký počet porovnání, který se nesníží ani tím, že jsou prvky částečně nebo úplně setříděny poměrně náročná na čas 6
7 Obr. 1
8 Obr. 2
Princip řešení: 1. načteme všechny položky do pole n – podprogram Načti vektor A[N] 2. najdeme ze všech položek minimum a uložíme do položky A[1] 3. v položce A[1] máme minimum, nebudeme si jí nadále všímat, ze zbývajícího počtu položek n-1 najdeme minimum a uložíme do položky A[2] a tak dále 9
vývojový diagram se bude skládat ze dvou vnořených cyklů vnitřní cyklus: minimum z řady čísel – metoda přímého výběru – řídící proměnná cyklu má dolní mez stanovenou obecně vnější cyklus – nastavení dolní meze řídící proměnné vnitřního cyklu 10
11 Začátek Nastavení dolní meze řídící proměnné vnitřního cyklu. Vnitřní cyklus vyhledává minimum z dosud nesetříděných prvků. POM:= A[I] A[I]:= A[J] A[J]:= POM Konec Cyklus 1 I: =1,N-1 Konec cyklu2 Načti vektor A[N] Cyklus 2 J: =I +1,N Konec cyklu Zobraz vektor A[N] Srovnává se postupně každý prvek nesetříděné posloupnosti s prvním prvkem nesetříděné posloupnosti.
název vychází z analogie s kapalinou s různě velkými bublinkami vzduchu, nejdříve vybublá nahoru ta největší princip postupného porovnávání dvou sousedících prvků, je-li prvek větší než následující, prohodí se 12
Výhody: velmi jednoduchá metoda snadno naprogramovatelná Nevýhody: velký počet porovnání, který se nesníží ani tím, že jsou prvky částečně nebo úplně setříděny (každý s každým) poměrně náročná na čas 13
14 Obr. 3
Princip řešení: 1. načteme všechny položky do pole n – podprogram Načti vektor A[N] 2. najdeme ze všech položek maximum a uložíme do položky A[N] 3. v položce A[N] máme maximum, nebudeme si jí nadále všímat, ze zbývajícího počtu položek n-1 najdeme maximum a uložíme do položky A[N-1] a tak dále 15
vývojový diagram se bude skládat ze dvou vnořených cyklů vnitřní cyklus: maximum z řady čísel – metoda probubláváním– řídící proměnná cyklu má dolní mez stanovenou obecně vnější cyklus – nastavení horní meze řídící proměnné vnitřního cyklu 16
17 Začátek Nastavení horní meze řídící proměnné vnitřního cyklu. Vnitřní cyklus vyhledává maxima z dosud nesetříděných prvků. POM:= A[J] A[J]:= A[J+1] A[J+1]:= POM Konec Cyklus 1 I: =N,2 Konec cyklu2 Načti vektor A[N] Cyklus 2 J: = 1,I-1 Konec cyklu Zobraz vektor A[N] Srovnává se postupně každý prvek nesetříděné posloupnosti s prvkem o jedno vyšším nesetříděné posloupnosti.
základem je předchozí vývojový diagram, ale vylepšený o test, zda je řada setříděna nebo ne pokud jsou prvky setříděny, nepokračuje se v procházení prvků a třídění se ukončí dříve 18
Výhody: pokud jsou data částečně nebo úplně setříděna, algoritmus se ukončí dříve je-li na začátku řady velký prvek, rychle se dostane na konec Nevýhody: velký počet porovnání, pokud není posloupnost úplně setříděna je-li na konci řady malý prvek, pomalu se dostane na začátek 19
Princip řešení: 1. základem je algoritmus Bubble Sort zjednodušený 2. zavedeme novou proměnnou ZM – indikátor, zda došlo alespoň jednou během jednoho porovnávání k prohození prvků 20
Princip řešení: 3. před vstupem do vnitřního cyklu nastavíme ZM na 0 4. do vnitřního cyklu, v místě, kde dochází k prohození hodnot prvků v případě, že je prvek větší než následující, přidáme indikátor změny ZM a nastaví na 1 21
Princip řešení: 5. po dokončení celého průchodu řadou čísel, po opuštění vnitřního cyklu se otestujeme, zda se měnilo pořadí (ZM = 1), nebo zda byla setříděna (ZM = 0) 6. pokud se něco na pořadí měnilo, pak pokračujeme v rámci vnitřního cyklu, jinak je setříděno 22
23 Začátek Vynuluje se indikátor změny pořadí. Cyklus 1 I: =N,2 Konec cyklu2 Načti vektor A[N] Cyklus 2 J: = 1,I Měnilo se pořadí indikátor změny se nastaví na 1. ZM:= 0 POM:= A[J] A[J]:= A[J+1] A[J+1]:= POM ZM:= 1
24 Pokud se nic neměnilo, řada čísel byla setříděna. Konec Konec cyklu Zobraz vektor A[N] Měnilo se pořadí, je nutné projít řadu znovu.
odstraňuje nevýhodu s pomalým přesouváním malých prvků pokud jsou prvky setříděny, nepokračuje se v procházení prvků a třídění se ukončí dříve 25
Výhody: řada se rovná zároveň od začátku a od konce odstraňuje nedostatky předchozích Nevýhody: složitější zápis vývojového diagramu 26
27 Obr. 4
vychází z klasického Bubble Sort oproti Bubble Sort má dvě zlepšení: 1. jednou se řada prochází zepředu dozadu a „vybublá“ největší prvek zleva doprava; podruhé se prochází odzadu dopředu a „potopí“ se nejmenší prvek zprava doleva, řada se rovná od začátku a od konce, nejdéle nesetříděná je uprostřed, hlídají se horní a dolní meze, které se postupně posouvají doprostřed řady, algoritmus končí při překrytí mezí 28
2. hlídání místa, kde došlo k poslední změně pořadí – zavede se proměnná PZM (poslední změna), do které se ukládá pořadí prvku, který se přehazoval se sousedním 29
Princip řešení: 1. zavedeme PZM, do níž se ukládá pořadí (index) prvku, který se přehazoval se sousedním, jestliže za tímto prvkem nedojde ke změně – posloupnost je tam setříděna 2. v dalším kroku můžeme posloupnost procházet až od místa poslední změny 30
Princip řešení: 3. horní mez (proměnná H) při směru dolů bude rovna místu poslední změny, ale zmenšenému o hodnotu 1 (PZM – 1) 4. dolní mez (proměnná D) při směru nahoru bude rovna místu poslední změny, ale zvětšenému o hodnotu 1 (PZM + 1) 31
D – dolní mez nesetříděné části posloupnosti H – horní mez nesetříděné části posloupnosti PZM – místo poslední změny v posloupnosti J – řídící proměnná cyklů, ve kterých se nachází nesetříděná část posloupnosti A[J] – J-tý prvek v řadě A[J+1] – prvek, který stojí oproti J-tému o jednu vpravo, ke konci řady 32
33 Začátek Načti vektor A[N] D:= 1 H:= N - 1 PZM:= 1 Cyklus 1 J: =D, H + - POM:= A[J] A[J]:= A[J+1] A[J+1]:= POM PZM:= J Konec cyklu1 1 3 Dolní mez je na začátku, horní mez umožní srovnání s prvkem o jedno vyšším a PZM nepřekáží. Průchod řadou zdola nahoru. Poslední změna se uloží.
34 1 H:= PZM - 1 Cyklus 2 J: =H, D + - POM:= A[J] A[J]:= A[J+1] A[J+1]:= POM PZM:= J Konec cyklu2 2 Posune se horní mez. Průchod řadou seshora dolů. Poslední změna.
35 2 H:= PZM Zobraz vektor A[N] Konec Posune se dolní mez. Zda se již meze překryly?
Materiály jsou určeny pro bezplatné používání pro potřeby výuky a vzdělávání na všech typech škol a školských zařízení. Jakékoli další využití podléhá autorskému zákonu. PŠENČÍKOVÁ, Jana. Algoritmizace. Kralice na Hané: Computer Media s.r.o., 2007, ISBN Není-li uvedeno jinak jsou vývojové diagramy vlastní tvorby. Obr. 1. MARCO POLO. [online]. [cit ]. Dostupný pod licencí volné dílo na WWW: Obr. 2. JOESTAPE89. [online]. [cit ]. Dostupný pod licencí Svobodné licence GNU pro dokumenty na WWW: 36
Materiály jsou určeny pro bezplatné používání pro potřeby výuky a vzdělávání na všech typech škol a školských zařízení. Jakékoli další využití podléhá autorskému zákonu. Obr. 3 NMNOGUEIRA. [online]. [cit ]. Dostupný pod licencí Creative Commons na WWW: Obr. 4 SIMPSONS CONTRIBUTOR. [online]. [cit ]. Dostupný pod licencí GNU Free Documentation License na WWW: 37