CU 01 Zklady algoritmizace Zklady algoritmizace Strukturovan programovn

  • Slides: 26
Download presentation
CU 01 Základy algoritmizace

CU 01 Základy algoritmizace

Základy algoritmizace § Strukturované programování § Dekompozice problému na prvky, které lze přepsat do

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í

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ů

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é §

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>

Ří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>

Ří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)

Ří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

Ří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

CU 01 Visual Basic a MS Word

Objekty a jejich atributy § § § § VB je objektově orientovaný jazyk Objekty

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

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 –

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

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 - 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

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ě

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ů –

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

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

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 =.

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

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 =

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

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

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

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