CU 01 Zklady algoritmizace Zklady algoritmizace Strukturovan programovn
- Slides: 26
CU 01 Základy algoritmizace
Základy algoritmizace § Strukturované programování § Dekompozice problému na prvky, které lze přepsat do příkazů v programovacím jazyce § Program = algoritmus + data § Skalární a strukturovaná data § Datový typ skalárních dat – rozsah paměti, povolené operace § Strukturovaná data § § § Pole Objekty Kolekce jako pole objektů § Třída objektu jako zobecněný typ (C) J. Macur, AIU FAST, 2008 2
Reprezentace skalárních dat v počítači Typ Počet bajtů, popis Rozsah Byte Integer 1, binární data 2, celé číslo 0 to 255 -32, 768 — 32, 767 Long 4, celé číslo -2, 147, 483, 648 — 2, 147, 483, 647 Single 4, reálné číslo -3. 4 E 38 — 3. 4 E 38 Double 8, reálné číslo -1. 79 E 308 — 1. 79 E 308 Currency 8, číslo s pevným počtem des. míst -922, 337, 203, 685, 477. 5808 — +922, 337, 203, 685, 477. 5807 String 4, řetězec znaků 2 miliardy znaků Boolean 1, logická hodnota True — False Date 8, datum/čas Rok 100 — 9999, čas na ms Object 4, objektová reference 16 plus 1 B/znak v případě řetězce. Podle kontextu obsahuje Long, Double, Date, String, referenci. Ukazatel (adresa) Variant (C) J. Macur, AIU FAST, 2008 Obsahuje cokoli. Zpomaluje výpočet, neefektivní práce s pamětí, zdroj chyb. 3
Deklarace dat § § § Identifikátor proměnné jako symbolická adresa Pravidla pro tvorbu identifikátorů (VB je case insensitive) Explicitní a implicitní deklarace (option explicit) Dim a – deklarace proměnné typu Variant Dim b as Integer – explicitní deklarace Dim pocet, a, b, c as Integer – hromadná deklarace § Pole – indexovaná homogenní množina nemusíme deklarovat velké množství proměnných k prvkům pole lze přistupovat pomocí hodnot indexů hodnotu indexu lze vypočítat – dynamický přístup k prvkům pole § použití prvku s indexem 0 Dim pole. Cisel(10) as Integer – deklarace pole s 11 prvky (v deklaraci uvádíme nejvyšší hodnotu indexu) Dim vektor(3) as Single Dim matice(2, 2) as Single – deklarace 2 D pole 3 x 3 § § § (C) J. Macur, AIU FAST, 2008 4
Přiřazovací příkaz u skalárních proměnných § <identifikátor> = <výraz> § Modifikace obsahu proměnné § Výrazy § Aritmetické § Logické § Volání funkcí Dim a, b, c as Integer Dim pozdrav, jmeno, veta as String a=2 pozdrav = "Ahoj" b=4 jmeno = "Mirku" c = a*b veta = pozdrav & ", " & jmeno (veta obsahuje "Ahoj, Mirku") § Omezená možnost přiřazení u strukturovaných proměnných Dim pole(10) as integer pole = 2 * pole NELZE (C) J. Macur, AIU FAST, 2008 5
Řízení běhu programu § Rozhodovací struktury (podmíněný příkaz) If <podmínka> Then <příkaz> If <podmínka> Then <příkaz 1> Else <příkaz 2> If <pod 1> Then <př 1> Else. If <pod 2> Then <př 2>. . . if diskriminant<0 then msg. Box("Rovnice nemá reálné řešení") § Více příkazů za podmínkou (víceřádkový podmíněný příkaz) vyžaduje ukončení End if if diskriminant>0 then x 1 = (-b+Math. sqrt(diskriminant))/(2*a) x 2 = (-b -Math. sqrt(diskriminant))/(2*a) elseif diskriminant=0 then x 1 = -b/(2*a) else msg. Box("Rovnice nemá reálné řešení") end if (C) J. Macur, AIU FAST, 2008 6
Řízení běhu programu § Cyklus Do While <podmínka> <příkaz> Loop Do Until <podmínka> <příkaz> Loop Do <příkaz> Loop Until <podmínka> Do <příkaz> Loop While <podmínka> Dim pole(100) as Double Dim i as Integer. . . i = 0 Do while i<=100 if pole(i)<0 then pole(i)=0 i = i+1 loop (C) J. Macur, AIU FAST, 2008 7
Řízení běhu programu § Počítaný cyklus For. . Next Dim pole 1(100), pole 2(100) as Double Dim i as Integer. . . For i = 0 to 100 pole 1(i) = pole 2(i) Next i Step, downto (C) J. Macur, AIU FAST, 2008 8
Řízení běhu programu § Počítaný cyklus pro prvky kolekce For Each. . Next Dim doc as Document Dim i as Integer. . . For Each doc In Documents msg. Box doc. Name Next (C) J. Macur, AIU FAST, 2008 9
CU 01 Visual Basic a MS Word
Objekty a jejich atributy § § § § VB je objektově orientovaný jazyk Objekty Wordu: dokumenty, tabulky, odstavce, komentáře, odkazy, atd. Kolekce – objekt, který obsahuje další objekty obvykle stejného typu. Připomíná pole objektů. Množina atributů (vlastností) objektu charakterizuje jeho stav (např. atributem dokumentu může být jeho obsah, název, nastavení jazyka apod. ) Původní myšlenka OOP – atributy jsou přístupné pouze prostřednictvím metod. Praxe – přímý přístup k atributům, atributy pouze ke čtení, měnitelné atributy, které mění vlastnost objektu. Přístup k atributům: <název objektu>. <název atributu> Sub jmeno() Dim jmeno. Dokumentu As String jmeno. Dokumentu = Active. Document. Name Msg. Box jmeno. Dokumentu End Sub (C) J. Macur, AIU FAST, 2008 11
Metody § Akce, které je objekt schopen na požádání vykonat. Charakterizují chování objektu, zatímco atributy charakterizují stav objektu. § Např. objekt třídy Document „se umí“ vytisknout pomocí své metody Print. Out § Metoda je součástí objektu stejně jako atribut. 1. Volání metod v případě procedur: <objekt>. <metoda> argument 1, . . . , argumentn 2. Volání metod v případě funkcí: <proměnná> = <objekt>. <metoda>(argument 1, . . . ) § Metoda má často mnoho argumentů. Abychom je nemuseli všechny uvádět ve správném pořadí, můžeme použít pro jejich nastavení jména parametrů: <jméno par. >: =<hodnota> Sub tiskni. Tri. Strany() Active. Document. Print. Out Pages: ="1 -3" End Sub (C) J. Macur, AIU FAST, 2008 12
Přístup k objektům § V aplikacích je zavedena struktura objektové hierarchie, tzv. DOM – Document Object Model § V programech potřebujeme obvykle přistoupit k nějakému objektu z hierarchie a zjistit nebo změnit jeho atribut, resp. využít jeho metodu. § Často máme k dispozici celý model pomocí univerzální funkce Create. Object("<Aplikace>. Application"), která vytvoří objekt třídy Application – vrchol objektové hierarchie. § V případě Wordu např. získáme kolekci dokumentů jako atribut tohoto vrcholu: Set docs=Create. Object("Word. Application"). documents docs(1). Close docs("pokus. doc"). Close (C) J. Macur, AIU FAST, 2008 13
Instance a třídy objektů Dim obj. Kolekce as Documents, obj. Dokument as Document Set obj. Kolekce=Create. Object("Word. Application"). documents Set obj. Dokument = obj. Kolekce(1) obj. Dokument. Close § § § § Při deklaraci uvádíme název objektu (instance) a třídu (šablonu, zobecněný typ). Do verze VB. NET lze třídu v deklaraci vynechat, avšak nedoporučuje se. Poslední verze VB. NET je již ryze typový jazyk. Třída (šablona) definuje strukturu a implementuje chování objektu. Třídu vytváří programátor při procesu programování aplikace. Instance objektu je třída (šablona) naplněná daty, která se vyvíjí v paměti. Fyzicky se objekt vytváří až při běhu programu, třída při programování. Lze pracovat s více instancemi téže třídy. Mohou dokonce obsahovat i stejná data, existují však v různých částech paměti. § Použití konstruktoru pro vytvoření instance objektu pomocí operátoru new Set <objekt>=new <třída>(<parametry>) § Obvykle používáme metody, které vytvářejí objekty samy, např. Set muj. Dokument=moje. Aplikace. documents. Add § Nové třídy vytváříme zřídka, využijeme materiál vytvořený programátory (C) J. Macur, AIU FAST, 2008 14
DOM - příklad (C) J. Macur, AIU FAST, 2008 15
DOM § Hierarchie objektů v dané aplikaci vytvářená vložením objektů, resp. jejich kolekcí do jiných (nadřazených) objektů prostřednictvím atributů. § Při vytváření programů pak využíváme metod objektů v hierarchii nebo měníme jejich atributy. § K témuž objektu lze často přistoupit více způsoby: Set muj. Dokument = moje. Aplikace. active. Document Set muj. Dokument = moje. Aplikace. documents(1) Hierarchii lze zkrátit pomocí pseudooperátoru with: With Selection. Font. Name = "Times New Roman". Size = 14. All. Caps = True End With (C) J. Macur, AIU FAST, 2008 16
Reference na jeden objekt a kopie objektu § Identifikátor objektu (instance třídy) lze zjednodušeně považovat za adresu objektu v paměti počítače § Příkaz Set muj. Objekt = jiny. Objekt vytvoří další identifikátor, ale nikoliv další instanci, tj. změna stavu prostřednictvím identifikátoru muj. Objekt se promítne do stavu zjištěného pomocí identifikátoru jiny. Objekt. § Oba identifikátory „ukazují“ na tentýž objekt § Kopii objektu provádíme pomocí speciálních, k tomu určených metod objektů, např. Set Range 2 = Range 1. Duplicate (C) J. Macur, AIU FAST, 2008 17
Moduly, jmenné prostory § Definice procedur (podprogramů) a funkcí logicky členíme do modulů – nahrazují třídy v případě, že jednoduchost programů (maker) striktně definovanou strukturu třídy nevyžaduje. Jedná se o analogii adresářů Module <název> … End Module § V aplikaci Word a Excel existuje mnoho objektů se podobným významem, stejným názvem, ale odlišnou strukturou (např. rozsah Range znamená ve Wordu souvislý rozsah textu v Excelu pole buněk). Odlišení stejných názvů tříd, atributů apod. se provádí pomocí jmenných prostorů Namespace <název> … End Namespace § Použití tříd z jmenného prostoru bez nutnosti uvádění názvu prostoru: Imports <název> … (C) J. Macur, AIU FAST, 2008 18
Příklady (objekt Range) § Procedura naformátuje první tři odstavce dokumentu Sub tri. Odstavce() Dim rozsah As Range Set rozsah = Active. Document. Range( _ Start: =Active. Document. Paragraphs(1). Range. Start, _ End: =Active. Document. Paragraphs(3). Range. End) With rozsah. Font. Name = "Times New Roman". Paragraph. Format. Alignment = wd. Align. Paragraph. Left End With End Sub Pojmenované konstanty zlepšují čitelnost programu – u Wordu prefix wd (C) J. Macur, AIU FAST, 2008 19
Příklad – vložení a formát textu Sub vloz. Titulek() Dim rozsah As Range Set rozsah = Active. Document. Range(Start: =0, End: =0) With rozsah. Insert. After Text: ="Můj titulek" Pojmenované. Insert. Paragraph. After parametry With. Font. Name = "Tahoma". Size = 24. Bold = True End With Active. Document. Paragraphs(1). Alignment = wd. Align. Paragraph. Center. Space. After = 36 End With End Sub (C) J. Macur, AIU FAST, 2008 20
Příklad – vzhled stránky Sub okraje() With Active. Document. Page. Setup. Left. Margin =. Left. Margin + Inches. To. Points(0. 5). Right. Margin =. Right. Margin + Inches. To. Points(0. 5) End With Vestavěná funkce End Sub (C) J. Macur, AIU FAST, 2008 21
Příklad – procházení kolekcí Sub odsad. Odstavce() Dim obj. Odstavec As Paragraph For Each obj. Odstavec In Active. Document. Paragraphs If obj. Odstavec. Space. Before = 12 Then obj. Odstavec. Space. Before = 6 End If Next obj. Odstavec End Sub Změní mezeru před těmi odstavci, kde je mezera 12 pt. Cyklus procházení všemi položkami z kolekce for each <položka> in <kolekce> (C) J. Macur, AIU FAST, 2008 22
Vyhledávání - Objekt Find With Selection. Find. Clear. Formatting. Forward = True. Wrap = wd. Find. Continue. Text = str. To. Find. Execute End nebo With Selection. Find. Clear. Formatting. Execute Find. Text: =str. To. Find, Forward: =True, _ Wrap: =wd. Find. Continue End With End Lze použít metodu Execute s nastavením atributů nebo nastavit atributy formou argumentů metody. Metoda nastaví objekt Selection na nalezený výskyt hledaného řetězce. Rychlejší než programové vyhledávání. (C) J. Macur, AIU FAST, 2008 23
Vyhledávání Nalezený text zformátuje tučně Set rozsah = Active. Document. Content rozsah. Find. Execute Find. Text: ="tučně", Forward: =True If rozsah. Find. Found = True Then rozsah. Bold = True End If With Active. Document. Content. Find. Clear. Formatting. Style = wd. Style. Heading 3 Do While. Execute (Find. Text: ="", Forward: =True, Format: =True) = True With. Parent. Start. Of Unit: =wd. Paragraph, Extend: =wd. Move. Insert. After "Tip: ". Move Unit: =wd. Paragraph, Count: =1 End With Loop End With (C) J. Macur, AIU FAST, 2008 24
Nahrazení Sub Replace. Text(str. Find As String, str. Replace As String) Application. Screen. Updating = False Active. Document. Content. Select With Selection. Find. Clear. Formatting. Forward = True. Wrap = wd. Find. Continue. Execute Find. Text: =str. Find, Replace: =wd. Replace. All, _ Replace. With: =str. Replace End With End Sub Objekt Find lze použít i pro nahrazování řetězců (C) J. Macur, AIU FAST, 2008 25
Příklad Sub formatuj() ' Vyhledá na naformátuje tučně všechna slova se zadaným slovním základem ' (kybernetickou, kybernetický ap. ) str. Text = "kybernet" With Selection. Find. Clear. Formatting. Format = False. Execute Find. Text: =str. Text, Forward: =True Do While. Found = True ' And Msg. Box(prompt: ="pokračovat? ", buttons: =vb. Yes. No) = vb. Yes. Parent. Expand Unit: =wd. Word. Parent. Font. Bold = True. Parent. Collapse wd. Collapse. End. Execute Find. Text: =str. Text, Forward: =True Loop End With End Sub (C) J. Macur, AIU FAST, 2008 26