190 likes | 352 Views
Informatika I 2. přednáška. RNDr. Jiří Dvořák, CSc. dvorak @uai.fme.vutbr.cz. Obsah přednášky. Vývojové diagramy Algoritmizace Základní řídicí struktury Algoritmizace s použitím základních řídicích struktur. Vybrané značky vývojových diagramů. zpracování. větvení. mezní značka. spojka.
E N D
Informatika I2. přednáška RNDr. Jiří Dvořák, CSc. dvorak@uai.fme.vutbr.cz
Obsah přednášky • Vývojové diagramy • Algoritmizace • Základní řídicí struktury • Algoritmizace s použitím základních řídicích struktur Informatika I: přednáška 2
Vybrané značky vývojových diagramů zpracování větvení mezní značka spojka spojnice Spojnice spojují jednotlivé značky. Mohou být kresleny vodorovně či svisle a mohou být zalomené. Jejich orientace určuje postup výpočtu. Orientace není nutná v tzv. preferovaných směrech, tj. shora dolů nebo zleva doprava. Informatika I: přednáška 2
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 ano Hodnota největšího společného dělitele se nachází v proměnné M Konec Informatika I: přednáška 2
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) Informatika I: přednáška 2
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 Informatika I: přednáška 2
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ů. Informatika I: přednáška 2
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 Informatika I: přednáška 2
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í. Informatika I: přednáška 2
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 Akce1; Akce2; Akce3 end Akce1 Akce2 Akce3 Informatika I: přednáška 2
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 Informatika I: přednáška 2
Větvení a) • if Podmínkathen • Akce1else • Akce2 • Význam: • jestliže platí Podmínka, pak proveď Akci1, jinak proveď Akci2. ano Podmínka ne Akce1 Akce2 b) • if Podmínkathen • Akce • Význam: • jestliže platí Podmínka, pak • proveď Akci. ano Podmínka ne Akce Informatika I: přednáška 2
Příklady větvení a) Určení maxima z čísel A a B: if A>B then Max:=A elseMax:=B ano A > B ne Max := A Max := B b) Náhrada hodnoty proměnné X její absolutní hodnotou: if X<0 then X:= –X ano X < 0 ne X := –X Informatika I: přednáška 2
Iterace s testem zahájení • whilePodmínkado • Akce • Význam: • pokud platí Podmínka, • provádějAkci. • 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 Informatika I: přednáška 2
Příklad iterace s testem zahájení Výpočet faktoriálu F přirozeného čísla N: F:=1; whileN>0do begin F:=FN; N:=N-1 end F:=1 N>0 ne ano F:=F*N N:=N–1 Informatika I: přednáška 2
Iterace s testem ukončení • repeat • Akce1; • Akce2 • until Podmínka • Význam: • opakujAkci1 a Akci2 • dokudneplatí Podmínka • Akce ve struktuře repeat se • provedou vždy alespoň jednou. Akce1 Akce2 ne Podmínka ano Informatika I: přednáška 2
Příklad iterace s testem ukončení 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} R := M mod N M := N N := R ne N = 0 ano Informatika I: přednáška 2
Vztahy mezi strukturami while a repeat Algoritmus a1: Algoritmus a2: whileBdoAifBthen repeatAuntil not B Algoritmus b1: Algoritmus b2: repeatAuntilBA; while not BdoA Algoritmus a2 je ekvivalentní algoritmu a1. Algoritmus b2 je ekvivalentní algoritmu b1. Informatika I: přednáška 2
Výpočet aritmetického průměru P z čísel X1, … , XN Začátek • Zápis v pseudo Pascalu: • S:=0; I:=1; • whileINdo • begin • S:=S+XI; • I:=I+1 • end; • P:=S/N • V Pascalu by se podmínka • cyklu a indexovaná proměnná zapsaly takto: • I<=N • X[I] S := 0 I := 1 ne I N ano S := S + XI P := S / N I := I + 1 Konec Informatika I: přednáška 2