Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Programování 01 Algoritmizace.

Podobné prezentace


Prezentace na téma: "Programování 01 Algoritmizace."— Transkript prezentace:

1 Programování 01 Algoritmizace

2 Úvod do programování program počítač vstupy výstupy
Program je předpis pro transformaci vstupů na výstupy. Niklaus Wirth: program = algoritmus + datové struktury

3 Algoritmus Algoritmus je konečný soubor pravidel, jež dávají návod k vyřešení určité třídy úloh. Základní požadavky na algoritmus determinovanost (algoritmus musí být přesný a jednoznačný) rezultativnost (v konečném počtu kroků se musí dospět k výsledku) efektivnost (jednotlivé operace musejí být proveditelné v konečném časovém intervalu) hromadnost (algoritmus se týká celé skupiny úloh téhož typu)

4 Vývojové diagramy Použití: Účel: při konstrukci či analýze algoritmů
pro dokumentaci, pro zachycení myšlenky Účel: názornost a přehlednost pro pochopení při algoritmizaci jednoznačný převod z textu programu do vývojového diagramu spíše nevhodné při návrhu celého (složitějšího) programu Programování 10

5 Prostředky vyjádření algoritmu
Přirozený jazyk Jazyk matematiky Grafické prostředky (vývojové diagramy, struktogramy, … ) Pseudojazyky (liší se od programovacích jazyků volnějšími pravidly syntaxe) Programovací jazyky

6 Příklad slovního vyjádření algoritmu
Euklidův algoritmus pro výpočet největšího společného dělitele dvou celých kladných čísel (předpokládáme, že zadaná čísla jsou uložena v proměnných M a N): 1. Urči zbytek R po celočíselném dělení hodnoty M hodnotou N. 2. Hodnotu N přesuň do proměnné M a hodnotu R do proměnné N. 3. Je-li N nulové, pak hodnota největšího společného dělitele je obsažena v M a výpočet končí. V opačném případě se výpočet vrací na krok 1.

7 Programovací jazyky ?. generace - přirozený jazyk?
4. generace - neprocedurální a problémově orientované jazyky 3. generace - procedurální jazyky vysoké úrovně 2. generace - assembler 1. generace - strojový jazyk počítač

8 Definice programovacího jazyka
Složky definice programovacího jazyka: Abeceda základní (terminální) symboly jazyka Syntaxe pravidla pro tvorbu jazykových konstrukcí Sémantika význam jazykových konstrukcí

9 Kompilační překladače
generují program ve strojovém kódu, který pak může být opakovaně využíván. Interpretační překladače interpretují příkazy programu. Jejich použití je méně efektivní, protože při každém výpočtu musí být program vždy znovu interpretován.

10 Programovací styly Algoritmus = logika (funkce) + řízení
CO SE DĚLÁ JAK SE TO DĚLÁ Imperativní styl - výrazná řídicí složka Procedurální jazyky (Fortran, Pascal, C, ... ) Neimperativní styl - výrazná složka logiky (funkce) Neprocedurální jazyky logické programování (Prolog) funkcionální programování (Lisp, Haskell, … )

11 Vývojové diagramy Pro znázornění algoritmů se používají grafické značky spojené orientovanými spojnicemi. Tvary a významy některých značek, které budeme při kreslení vývojových diagramů používat, jsou na následujícím obrázku.

12 Algoritmizace 1. Zpracování
symbol představující jakýkoliv druh zpracování nebo provedení definované operace nebo skupiny operací - např. změna hodnoty, umístění a pod. možnost vstupu do tohoto symbolu je z libovolné strany a těchto vstupů může být i několik přitom to mohou být vstupy samostatné, nebo se může jednat o jednu spojnici výslednou, která vznikla spojením několika spojnic dílčích výstup je však v zásadě vždy jenom jeden                                               

13 Algoritmizace 2. Rozhodování
symbol představuje rozhodovací nebo přepínací funkci symbol má jeden vstup (ten může být realizován jako výsledná spojnice) a alternativní výstupy daný výstup je aktivován po vyhodnocení podmínek uvnitř symbolu příslušné výsledky vyhodnocení podmínky mohou být zapsány přidruženě u spojnic reprezentujících dané cesty dalšího řešení tato značka má obyčejně dva výstupy - obecně může mít i tři výstupy a může mít i jeden větvený výstup (viz spojnice).                                                              

14 Algoritmizace 3. Příprava
tento symbol představuje úpravu nebo modifikaci (proto se mu někdy také říká modifikační symbol) činnosti, která mění vlastní postup následné činnosti, např. nastavení přepínače, vyjmenování hodnot, kterých nabývá proměnná cyklu, úprava indexového registru symbol má dva vstupy, jeden sekvenční, druhý pro návrat po provedení příslušného bloku operací dva výstupy, jeden vstupující do daného bloku operací, druhý sekvenční, který pokračuje do další části programu                               

15 Algoritmizace 4. Data - vstup a výstup dat
symbol reprezentuje vstupně - výstupní operace s daty, tj. dodání dat pro zpracování v programu nebo zpracování dat do požadované formy výstupu druh vstupního nebo výstupního zařízení nebo nosiče dat je buď jednoznačně určen charakterem zpracovávané úlohy, nebo může být popsán slovně, nebo k tomuto symbolu je možné připojit symbol charakterizující vstupně-výstupné zařízení nebo nosič dat v případě použití vstupně - výstupního zařízení je tento připojen k uvedenému symbolu paralelně symbol má jeden vstup (realizovaný jako výsledná spojnice) a jeden výstup

16 Algoritmizace 5. Ruční vstup
tento symbol představuje všechny nosiče a zařízení pro ruční vstup informací jako jsou např. spřažená klávesnice počítače, světelné péro, snímač čárového kódu, různé přepínače apod. symbol má jenom jeden výstup

17 Algoritmizace 6. Interní paměť
symbol představuje nosič dat v případě, že nosičem je vnitřní paměť počítače data v tomto případě mohou do programu z tohoto nosiče vstupovat, nebo se mohou z programu do této paměti ukládat symbol může tak mít jeden výstup nebo jeden vstup                                     

18 Algoritmizace 7. Paměť s přímým přístupem
symbol představuje nosič s přímým přístupem dat - magnetický disk, magnetický buben nebo pružný disk (disketa) podobně jako u interní paměti mohou data do programu z tohoto nosiče vstupovat, nebo se mohou z programu do této paměti ukládat symbol může mít tak jenom jeden vstup nebo jeden výstup

19 Algoritmizace 8. Zobrazení
tento symbol představuje zařízení pro vizuální zobrazení dat, jako je např. monitor počítače, spřažené indikátory, signální zařízení apod. symbol má jenom jeden vstup

20 Algoritmizace 9. Dokument
symbol představuje zařízení pro tištěný výstup, kterým může být klasická tiskárna, ale i zařízení pro tvorbu mikrofilmu, pokladní tiskárna a jiné symbol má jenom jeden vstup

21 Algoritmizace 10. Spojka tento symbol představuje přechod z jedné části vývojového diagramu na jinou část používá se k přerušení spojnice a k jejímu pokračování na jiném místě odpovídající symboly musí obsahovat stejné označení spojka má buď pouze jeden vstup nebo jeden výstup spojku lze použít i pro zobrazení větvení programu pomocí přepínače                             

22 Algoritmizace 11. Mezní značka
symbol představuje vstup z vnějšího prostředí do programu nebo výstup z programu do vnějšího prostředí např. začátek nebo konec programu, zastavení programu nebo začátek a konec samostatně zpracované části programu (např. podprogram) a pod. podobně jako spojka může mít buď jenom jeden výstup nebo jeden vstup

23 Algoritmizace 12. Spojnice
symbol ve tvaru svislé nebo vodorovné čáry představuje tok dat nebo řízení a slouží ke spojení jednotlivých symbolů ve vývojovém diagramu standardní směr toku informací je shora dolů a zleva doprava spojnice by měly do symbolu vstupovat shora nebo zleva a vystupovat dole nebo vpravo je možné spojnice opatřit šipkou pro zvýšení názornosti a jasnosti vývojového diagramu křížení spojnic se nedoporučuje větvení spojnic se používá v případě výstupu z podmíněného symbolu

24 Algoritmizace 13. Anotace
                                                                                          13. Anotace symbol se používá k připojení popisných komentářů nebo vysvětlujících textů přerušovaná čára symbolu anotace je připojena k příslušnému výkonnému symbolu, nebo může být připojena k ohraničené skupině symbolů

25 Příklad grafického vyjádření algoritmu
Začátek Operace mod dává zbytek po celočíselném dělení R := M mod N M := N N := R ne N = 0 Hodnota největšího společného dělitele se nachází v proměnné M ano Konec

26 Algoritmizace problému
Přímý postup: problém se známým algoritmem, triviální problém Přeformulování problému: zjednodušení, zobecnění, ekvivalentní přeformulování Rozklad problému na podproblémy: konjunktivní: řešení problému se nalezne řešením všech podproblémů disjunktivní: řešení problému se nalezne řešením pouze jednoho z podproblémů repetiční: řešení se nalezne opakovaným řešením podproblémů (iterační rozklad) nebo téhož problému se zmenšující se dimenzí (rekurzivní rozklad)

27 Příklady přeformulování problému
Zjednodušující přeformulování Místo výrazu r 2 vyhodnocujeme výraz 3,14 ·r 2 Ekvivalentní přeformulování Soustavu n lineárních rovnic o n neznámých postupně transformujeme ekvivalentními úpravami (násobení rovnice nenulovým číslem, přičtení rovnice k jiné rovnici) na soustavu s jednotkovou maticí, což je triviální problém. Zobecňující přeformulování Místo problému nalezení kořenů rovnice 2x2 – 6x + 3 = 0 algoritmizujeme problém ax2 + bx + c = 0

28 Příklady rozkladu problému
Konjunktivní rozklad Aritmetický průměr n čísel získáme postupným řešením těchto dvou podproblémů: a) Výpočet součtu čísel zadaných čísel. b) Podělení součtu hodnotou n. Disjunktivní rozklad Kořeny kvadratické rovnice získáme v závislosti na hodnotě diskriminantu řešením jednoho z těchto dvou podproblémů: a) Výpočet reálných kořenů. b) Výpočet komplexních kořenů.

29 Příklady rozkladu problému
Iterační rozklad (v kombinaci s konjunktivním) Výpočet součtu čísel x1 , x2 , … , xN : Konjunktivní rozklad: a) Vynulování proměnné S (S := 0) b) Iterační rozklad: pro I = 1, 2, … , N postupně sečítáme hodnoty S a xI a výsledek ukládáme do S (S := S + xI) Rekurzivní rozklad (v kombinaci s disjunktivním) Výpočet faktoriálu F přirozeného čísla N (F = N!): Disjunktivní rozklad: a) Je-li N = 0, pak F := 1 b) Je-li N > 0, pak F := N  (N – 1)! … rekurzivní rozklad

30 Základní řídicí struktury
Řídicí struktury zajišťují organizaci výpočtu. Jakýkoli algoritmus lze napsat pomocí těchto základních struktur: sekvence (odpovídá konjunktivnímu rozkladu) větvení (odpovídá disjunktivnímu rozkladu) iterace (odpovídá iteračnímu rozkladu) s testem zahájení s testem ukončení Charakteristický rys základních řídicích struktur: Mají jeden vstupní a jeden výstupní bod pro předání řízení.

31 Sekvence Akce1; Akce2; Akce3
Jednotlivé akce v sekvenci jsou oddělovány středníkem. Pokud potřebujeme, aby sekvence navenek vystupovala jako jediná akce, musíme ji uzavřít do příkazových závorek begin a end. begin end Akce1 Akce2 Akce3

32 Příklad sekvence Výměna obsahu proměnných X a Y: Pom:=X; Pom := X
X:=Y; Y:=Pom X := Y Y := Pom

33 Větvení a) if Podmínka then Akce1 else Akce2 Význam: jestliže platí Podmínka, pak proveď Akci1, jinak proveď Akci2. ano Podmínka ne Akce1 Akce2 b) ano Podmínka ne if Podmínka then Akce Význam: jestliže platí Podmínka, pak proveď Akci. Akce

34 Příklady větvení a) b) ano ne ano ne Určení maxima z čísel A a B :
if A>B then Max:=A else Max:=B ano A > B ne Max := A Max := B b) ano X < 0 ne Náhrada hodnoty proměnné X její absolutní hodnotou: if X<0 then X:= –X X := –X

35 Iterace s testem zahájení
while Podmínka do Akce Význam: pokud platí Podmínka, prováděj Akci. Akce ve struktuře while se nemusí provést ani jednou (když podmínka není splněna hned napoprvé). Akce musí měnit proměnné, na nichž závisí podmínka, takovým způsobem, aby iterace skončila v konečném počtu kroků. Provádí se pouze jedna akce. Má li se provádět sekvence akcí, musí být uzavřena mezi begin a end. Podmínka ne ano Akce

36 Příklad iterace s testem zahájení
F:=1 Výpočet faktoriálu F přirozeného čísla N : F:=1; while N>0 do { F:=FN; N:=N-1 } N>0 ne ano F:=F*N N:=N–1

37 Iterace s testem ukončení
repeat Akce1; Akce2 until Podmínka Význam: opakuj Akci1 a Akci2 dokud neplatí Podmínka Akce ve struktuře repeat se provedou vždy alespoň jednou. Akce1 Akce2 ne Podmínka ano

38 Příklad iterace s testem ukončení
R := M mod N Výpočet největšího společného dělitele dvou celých kladných čísel M a N : Repeat{ R:= M mod N; M:= N; N:= R} until (N=0) {Vysledek je v M} M := N N := R ne N = 0 ano

39 Vztahy mezi strukturami while a repeat
Algoritmus a1: Algoritmus a2: while B do A if B then repeat A until not B Algoritmus b1: Algoritmus b2: repeat A until B A; while not B do A Algoritmus a2 je ekvivalentní algoritmu a1. Algoritmus b2 je ekvivalentní algoritmu b1.

40 Výpočet aritmetického průměru P z čísel X1, … , XN
ano ne S := 0 S := S + XI I := 1 Začátek Konec I  N I := I + 1 P := S / N S=0; I=1; while (IN) { S:=S+XI; I:=I+1; } P=S/N;

41 Příklad č.1 Příklad č.1: Sestavíme algoritmus programu, který přečte čtveřici čísel a vytiskne číslo, které se rovná součinu součtu prvých dvou čísel a rozdílu druhých dvou čísel (např. pro vstupní data 4, 2, 3, 7 bude výsledek -24). Pro uložení vstupních dat zavedeme proměnné A, B, C, D (A pro první číslo, B pro druhé číslo atd.) a pro výsledek proměnnou VYSL.

42 Řešení příkladu č.1 výsledné diagramy:

43 Vývojové diagramy - Větvení:
I v poměrně jednoduchých případech jsou zapotřebí řídicí struktury, které předepisují různé alternativy dalšího postupu vázané na splnění určité podmínky (tzv. větvení) resp. opakované provádění určitých akcí (tzv. cykly). Větvení budeme předepisovat řídicí strukturou, kterou nazveme podmíněný příkaz a jejíž vyjádření vývojovým diagramem, struktogramem a pascalskou notací je na následujícím obrázku.

44 Vývojové diagramy - podmínka
B je logický výraz, který buď platí nebo neplatí (tzn. nabývá pravdivostních hodnot "pravda" - angl. true resp. "nepravda„– angl. false) a vyjadřuje testovanou podmínku, P1 a P2 jsou příkazy předepisující dvě alternativy postupu. Jestliže B platí, provede se příkaz P1, jinak se provede příkaz P2.

45 Příklad č.2: Sestavme algoritmus, který přečte dvě zadaná čísla a
vytiskne větší z nich. Pro vstupní hodnoty 3, 4 má být výsledek 4, pro vstupní hodnoty 7, 7 má být výsledek rovněž 7.

46 Řešení přikladu č.2 Řešení:

47 Vývojové diagramy - větvení
Zvláštním případem větvení z předposledního obrázku je situace, kdy k příkazu P1 není alternativní příkaz P2, tzn. kdy se jedná o podmíněné provedení příkazu v závislosti na splnění určité podmínky. Formy zápisu pro podmíněný příkaz "jestliže platí B, proveď P" jsou na následujícím obrázku.

48 Příklad č. 3 K řešení problému z příkladu č.2 můžeme přistoupit také
tímto způsobem: nezavedeme zvláštní proměnnou (Z) pro výstupní hodnotu, ale vytiskneme např. hodnotu proměnné X. Předtím však musíme zajistit, aby v případě, že platí X < Y, byla do ní přiřazena hodnota Y. Tento algoritmus je na následujícím obrázku.

49 Řešení příkladu č.3 Řešení: Programování 10

50 Příklad č.4: Uvažujme znovu dvojici čísel x, y a sestavme algoritmus,
který vytiskne číslo 1, jestliže x<y, nebo číslo 2, jestliže x>y, nebo číslo 0, jestliže x=y. V programu zavedeme proměnné X a Y pro uložení zadaných čísel a proměnnou V, které nejprve přiřadíme požadovanou hodnotu 0,1 nebo 2 a pak tuto hodnotu vytiskneme. Postup vedoucí ke správnému přiřazení můžeme slovně popsat takto: Je-li X<Y, potom proveď V:=1, jinak je-li X=Y, potom proveď V:=0, jinak proveď V:=2.

51 Řešení příkladu č. 4

52 Vývojové diagramy -Cykly
Pro výpočty realizované na počítačích je typické opakované provádění příkazů. Předepisujeme je řídícími strukturami, které nazýváme cykly. Základní řídící strukturu cyklu můžeme obecně vyjádřit příkazem „pokud platí B opakuj P“, kde B je podmínka, při jejímž splnění se příkaz P opakuje (tento příkaz nazýváme tělem cyklu). Cyklus končí (resp. se neprovede ani jednou), když podmínka B není splněna. Zápis tohoto příkazu vývojovým diagramem, struktogramem a v pascalské notaci je na následujícím obrázku. Další často používanou řídící strukturou pro cyklus je příkaz „opakuj P až do splnění B“. Tento případ si přiblížíme si později.

53 Vývojové diagramy - opakování
„pokud platí B opakuj P“

54 Příklad č. 5 Sestavíme algoritmus pro výpočet zbytku po dělení dvou přirozených čísel. Vstup: x y , kde x a y jsou přirozená čísla. Výstup: q , kde q je zbytek po dělení čísla x číslem y.Postup založíme na tom, že dělení nahradíme opakovaným odčítáním podle vztahu x – y – y – y = q , q < y (1.1) Pro jednotlivé hodnoty zavedeme proměnné X (dělenec), Y (dělitel) a Q (zbytek). Podle vztahu (1.1) můžeme zbytek vypočítat tak, že proměnné Q přiřadíme hodnotu dělence a potom od ní, pokud to ještě není zbytek, opakovaně odečítáme dělitele, tzn. opakovaně provádíme příkaz Q:=Q-Y.

55 Řešení přikladu č.5 Základem algoritmu tedy bude cyklus "pokud Qł Y (tzn. Q Není zbytkem) opakuj Q:=Q-Y". Tento cyklus skončí, až neplatí podmínka Qł Y, tzn. Platí Q<Y, což znamená, že hodnotou Q je hledaný zbytek. Celý algoritmus (ve třech formách zápisu) je následujícím obrázku.

56 Řešení příkladu č. 5

57 Vývojové diagramy - opakování
„opakuj P až do splnění B“ kde P je opět tělo cyklu (tj. příkaz, který se má opakovat), B je podmínka, při jejímž splnění cyklus končí (při nesplnění se tělo cyklu opakuje).

58 Příklad č. 6 Příklad č.6: Sestavíme algoritmus pro výpočet faktoriálu, tělo cyklu budou ho tvořit příkazy I:=I+1; F:=F*I. Podmínka ukončení cyklu se bude tentokrát testovat až po provedení těchto příkazů. Cyklus má skončit po vynásobení F zadanou hodnotou n (která bude uložena v proměnné N), podmínka ukončení cyklu tedy bude I=N. Chceme-li, aby algoritmus pracoval i pro n=1, musíme za počáteční hodnotu proměnné I zvolit nulu.

59 Řešení příkladu č.6 Řešení:

60 Příklad č. 7 Je dán obdélník o stranách A, B. Vytvořte algoritmus pro výpočet obvodu (O) a obsahu (S) tohoto obdélníka.

61 Příklad č.8 Je dána kružnice o poloměru R. Vytvořte algoritmus pro výpočet obvodu (O) této kružnice a výpočet obsahu (S) kruhu, který leží uvnitř této kružnice.

62 Příklad č.9 Je dán rovnostranný trojúhelník o stranách A. Vytvořte algoritmus pro výpočet obvodu (O) a obsahu (S) tohoto trojúhelníka. Malá nápověda

63 Příklad č.10 Je dán pravoúhlý trojúhelník o stranách A, B, C. Vypočítejte stranu C podle Pythagorovi věty.

64 Příklad č. 11 Vytvořte algoritmus pro výpočet výrazu tak, aby se výpočet alespoň jednou uskutečnil.

65 Příklad č.12 Vytvořte algoritmus pro výpočet výrazu

66 Příklad č. 13 Vytvořte algoritmus pro výpočet výrazu

67 Příklad č. 14 Vytvořte algoritmus pro zjištění zda zadané číslo je kladné, či záporné

68 Příklad č. 15 Vytvořte algoritmus pro porovnávání a řazení dvou čísel od největšího do nejmenšího

69 Příklad č. 16 Vytvořte algoritmus pro nalezení největšího ze tří zadaných čísel

70 Řešení příkladu č.16

71 Řešení příkladu č.16

72 Příklad č. 17 Vytvořte algoritmus pro určení, zda tři čísla A, B, C mohou tvořit strany trojúhelníka 7

73 Příklad č. 18 Vytvořte algoritmus pro řešení lineární rovnice
A*X + B =0 Proměnné A, B jsou načítány zvenčí X – hledaný kořen rovnice

74 Příklad č. 19 Vytvořte algoritmus pro zjištění zda daný žák prospěl s vyznamenáním, prospěl nebo neprospěl. Pro vstup použijte známky ze dvou předmětů. Diagram nakreslete ve wordu a uložte ho na flash disk. Ukládaný soubor pojmenujte svým příjmením.

75 Příklad č. 20 Vytvořte algoritmus pro vytvoření kalkulačky, která bude pracovat se dvěma čísly. Požadované matematické operace: Sčítání Odečítání Násobení Dělení

76 Příklad č. 21 Vytvořte algoritmus pro výpočet veličin rychlost, dráha a čas pohybu rovnoměrného přímočarého

77 Cykly Jsou jedním z nejsilnějších nástrojů algoritmů
Podstatou je opakování určité části algoritmu Cyklus musí být konečný Cykly s pevným počtem opakování Cykly řízené podmínkou s podmínkou na začátku cyklu Cykly řízené podmínkou s podmínkou na konci cyklu 8

78 Nekonečný cyklus

79 Cyklus s pevným počtem opakování

80 Čekací smyčka

81 Příklad č. 22 Vytvořte algoritmus pro výpočet výsledného odporu R, který se skládá ze dvou paralelních odporů R1 a R2. Algoritmus bude fungovat tak, že budete moci postupně zadávat různé hodnoty odporů R1 a R2 pro výpočet výsledného odporu R.

82 Příklad č. 23 Vytvořte algoritmus pro zobrazení čísel od jedničky do desítky

83 Příklad č. 24 Vytvořte algoritmus pro sečtení čísel od jedničky do desítky


Stáhnout ppt "Programování 01 Algoritmizace."

Podobné prezentace


Reklamy Google