Právní upozornění Všechna práva vyhrazena. Žádná část této tištěné či elektronické knihy nesmí být reprodukována a šířena v papírové, elektronické či jiné podobě bez předchozího písemného souhlasu nakladatele. Neoprávněné užití této knihy bude trestně stíháno. Používání elektronické verze knihy je umožněno jen osobě, která ji legálně nabyla v rozsahu stanoveném autorským zákonem. Elektronická kniha je datový soubor, který lze užívat pouze v takové formě, v jaké jej lze stáhnout z portálu. Jakékoliv neoprávněné užití elektronické knihy nebo její části, spočívající např. v kopírování, úpravách, prodeji, pronajímání, půjčování, sdělování veřejnosti nebo jakémkoliv druhu obchodování nebo neobchodního šíření je zakázáno! Zejména je zakázána jakákoliv konverze datového souboru nebo extrakce části nebo celého textu, umisťování textu na servery, ze kterých je možno tento soubor dále stahovat, přitom není rozhodující, kdo takového sdílení umožnil. Je zakázáno sdělování údajů o uživatelském účtu jiným osobám, zasahování do technických prostředků, které chrání elektronickou knihu, případně omezují rozsah jejího užití. Uživatel také není oprávněn jakkoliv testovat, dekompilovat, zkoušet či obcházet technické zabezpečení elektronické knihy. Děkujeme že elektronické knihy nelegálně nešíříte. Podporujete tak vznik dalších elektronických titulů. Kopírování zabíjí elektronické knihy!
(c) Computer Media s.r.o. Všechna práva vyhrazena. www.computermedia.cz
[email protected]
Další servery s elektronickým obsahem v i d e o p r í r u c k y. c z
Programování v jazyce Visual Basic Josef Myslín
Nakladatelství a vydavatelství
Vzdìlávání, které baví www.c-media.cz
R
Programování v jazyce Visual Basic Programování v jazyce Visual Basic Josef Myslín © Computer Media s.r.o. Vydání první, 2004. Všechna práva vyhrazena. Cena: 130,- Kč.
ISBN: 80-86686-14-0
Žádná část této publikace nesmí být publikována a šířena žádným způsobem a v žádné podobě bez písemného svolení vydavatele. Adresa: Computer Media, s.r.o. Hrubčická 495 798 12 Kralice na Hané Telefon: 582 302 666 Fax: 582 302 667 E-mail:
[email protected] http://www.c-media.cz Zajímá nás Váš názor! Líbí se Vám tato kniha? Co v ní postrádáte? Své tipy, postřehy a názory pište na adresu
[email protected]. Děkujeme Vám.
2
Obsah Obsah Vysvětlivky k prvkům použitým v knize...................................................... 6 Slovo autora.................................................................................................... 7 Prostředí jazyka Visual Basic....................................................................... 8 CO JE PROJEKT..........................................................................................................................................9 Vytvoření nového projektu............................................................................................................................9 OTEVŘENÍ EXISTUJÍCÍHO PROJEKTU.................................................................................................... 10 Přidání existujícího formuláře do projektu a odstranění formuláře z projektu......................................... 10 ULOŽENÍ PROJEKTU................................................................................................................................. 11
Základy objektového programování.......................................................... 12 OBJEKTY.................................................................................................................................................... 12 VLASTNOSTI.............................................................................................................................................. 12 UDÁLOSTI................................................................................................................................................... 13 METODY..................................................................................................................................................... 13
Identifikátory................................................................................................ 13 PROCEDURY A FUNKCE........................................................................................................................... 14 KLÍČOVÁ SLOVA......................................................................................................................................... 14 ROZSAH PLATNOSTI IDENTIFIKÁTORŮ.................................................................................................. 15
Vkládání ovládacích prvků a psaní kódu................................................... 16 VKLÁDÁNÍ OVLÁDACÍCH PRVKŮ............................................................................................................. 16 Práce s ovládacím prvkem..................................................................................................................... 16 PSANÍ ZDROJOVÉHO KÓDU.................................................................................................................... 16 Pravidla a tipy pro psaní zdrojového kódu.................................................................................................. 18 SPOUŠTĚNÍ PROGRAMU......................................................................................................................... 21 VYTVOŘENÍ SPUSTITELNÉHO SOUBORU (EXE)................................................................................... 21
Komponenty a jejich použití....................................................................... 22 FORMULÁŘ (FORM)..................................................................................................................................22 MODUL (MODULE)..................................................................................................................................... 24 TEXTOVÉ POLE (TEXTBOX)..................................................................................................................... 24 POPISEK (LABEL)......................................................................................................................................25 TLAČÍTKO (COMMANDBUTTON)..............................................................................................................26 ZATRŽÍTKO (CHECKBOX).........................................................................................................................26 PŘEPÍNAČ (OPTION)................................................................................................................................. 27 SEZNAM (LIST) A ROLETKA (COMBO).................................................................................................... 28 RÁMEČEK (FRAME)...................................................................................................................................29 DALŠÍ KOMPONENTY...............................................................................................................................30
Proměnné a konstanty................................................................................ 30 PROMĚNNÉ................................................................................................................................................30 Datové typy............................................................................................................................................. 31 Deklarace lokálních proměnných...........................................................................................................32 Deklarace pole.......................................................................................................................................32 Použití pole a odkaz na jeho položky..................................................................................................... 34 Deklarace globálních proměnných......................................................................................................... 34 KONSTANTY...............................................................................................................................................35
Operátory a výrazy....................................................................................... 36 PŘÍKAZ PŘIŘAZENÍ...................................................................................................................................36 OPERÁTORY..............................................................................................................................................36 Aritmetické operátory............................................................................................................................. 37 Logické a bitové operátory..................................................................................................................... 37 Relační operátory...................................................................................................................................38 Řetězcové operátory..............................................................................................................................40 PRIORITA OPERÁTORŮ............................................................................................................................ 41 3
Programování v jazyce Visual Basic PŘÍKLADY...................................................................................................................................................43 Příklad 1................................................................................................................................................43 Příklad 2................................................................................................................................................43 Příklad 3................................................................................................................................................43
Souhrnný příklad 1........................................................................................ 45 VYTVOŘENÍ NOVÉ APLIKACE..................................................................................................................45 VYTVOŘENÍ VZHLEDU APLIKACE...........................................................................................................45 VYTVOŘENÍ ZDROJOVÉHO KÓDU..........................................................................................................46
Podmíněné příkazy....................................................................................... 48 PODMÍNĚNÝ PŘÍKAZ IF... THEN...............................................................................................................48 PODMÍNĚNÝ PŘÍKAZ SELECT CASE.......................................................................................................50 VOLBA PODMÍNĚNÉHO PŘÍKAZU............................................................................................................53 PŘÍKLADY...................................................................................................................................................54 Příklad 1................................................................................................................................................54 Příklad 2................................................................................................................................................55 Příklad 3................................................................................................................................................55
Příkazy cyklu................................................................................................. 56 CYKLUS FOR... NEXT................................................................................................................................56 CYKLUS DO... LOOP..................................................................................................................................58 VNOŘENÉ CYKLY......................................................................................................................................60 PŘÍKLADY................................................................................................................................................... 61 Příklad 1................................................................................................................................................ 61 Příklad 2................................................................................................................................................62 Příklad 3................................................................................................................................................62 Příklad 4................................................................................................................................................63 Příklad 5................................................................................................................................................64 Příklad 6................................................................................................................................................64 Příklad 7................................................................................................................................................65 Příklad 8................................................................................................................................................66
Souhrnný příklad 2........................................................................................ 68 VYTVOŘENÍ VZHLEDU APLIKACE...........................................................................................................68 VYTVOŘENÍ ZDROJOVÉHO KÓDU..........................................................................................................68
Vestavěné funkce Visual Basicu................................................................. 70 MATEMATICKÉ FUNKCE........................................................................................................................... 71 PŘÍKLADY NA MATEMATICKÉ FUNKCE................................................................................................... 72 Příklad 1................................................................................................................................................72 Příklad 2................................................................................................................................................73 Příklad 3................................................................................................................................................73 Příklad 4................................................................................................................................................ 74 ŘETĚZCOVÉ FUNKCE............................................................................................................................... 74 PŘÍKLADY NA ŘETĚZCOVÉ FUNKCE...................................................................................................... 76 Příklad 1................................................................................................................................................76 Příklad 2................................................................................................................................................76 Příklad 3................................................................................................................................................76 FUNKCE PRO PRÁCI S DATEM A ČASEM...............................................................................................77 PŘÍKLADY NA FUNKCE DATA A ČASU..................................................................................................... 79 Příklad 1................................................................................................................................................79 Příklad 2................................................................................................................................................80 Příklad 3................................................................................................................................................80 Příklad 4................................................................................................................................................80 Příklad 5................................................................................................................................................ 81 PŘEVODNÍ FUNKCE..................................................................................................................................82 PŘÍKLADY NA PŘEVODNÍ FUNKCE.........................................................................................................84 Příklad 1................................................................................................................................................84 Příklad 2................................................................................................................................................85 4
Obsah ZJIŠŤOVACÍ A OVĚŘOVACÍ FUNKCE.......................................................................................................86 PŘÍKLADY NA ZJIŠŤOVACÍ A OVĚŘOVACÍ FUNKCE............................................................................... 87 Příklad 1................................................................................................................................................87 Příklad 2................................................................................................................................................88
Uživatelské funkce a procedury................................................................. 88 VYTVÁŘENÍ FUNKCÍ A PROCEDUR.........................................................................................................88 Umístění zdrojového kódu funkcí a procedur.........................................................................................89 Předčasné opuštění těla procedury či funkce........................................................................................89 Lokální proměnné...................................................................................................................................89 Volání podprogramů...............................................................................................................................89 PŘÍKLADY...................................................................................................................................................90 Příklad 1................................................................................................................................................90 Příklad 2................................................................................................................................................90 Příklad 3................................................................................................................................................91 Příklad 4................................................................................................................................................92 Příklad 5................................................................................................................................................92 PARAMETRY VOLANÉ ODKAZEM A HODNOTOU..................................................................................93 PŘÍKLADY...................................................................................................................................................94 Příklad 1................................................................................................................................................94 Příklad 2................................................................................................................................................95 REKURZIVNÍ FUNKCE...............................................................................................................................96 PŘÍKLADY................................................................................................................................................... 97 Příklad 1................................................................................................................................................97 Příklad 2................................................................................................................................................97
Aplikace s více formuláři............................................................................. 98 SDI APLIKACE............................................................................................................................................98 Předávání informací mezi formuláři...................................................................................................... 100 Příklad 1..............................................................................................................................................100 Příklad 2.............................................................................................................................................. 101 MDI APLIKACE......................................................................................................................................... 102 Tvorba nabídky v MDI formuláři............................................................................................................ 103
Souhrnný příklad 3...................................................................................... 104 VYTVOŘENÍ VZHLEDU APLIKACE......................................................................................................... 104 VYTVOŘENÍ ZDROJOVÉHO KÓDU........................................................................................................ 106
Práce se soubory........................................................................................ 109 PŘÍKAZY PRO MANIPULACI SE SOUBORY.......................................................................................... 109 PŘÍKAZY A FUNKCE PRO MANIPULACI S DATY V SOUBORECH........................................................111 Otevření a uzavření souboru.................................................................................................................111 Funkce sloužící ke zjišťování vlastností souboru.................................................................................. 113 Čtení dat ze souboru............................................................................................................................ 113 Zápis dat do souboru............................................................................................................................117 PŘÍKLADY NA PRÁCI SE SOUBORY...................................................................................................... 119 Příklad 1.............................................................................................................................................. 119 Příklad 2.............................................................................................................................................. 119 Příklad 3.............................................................................................................................................. 120
Souhrnný příklad 3 – pokračování............................................................ 121 Ošetřování chybových stavů..................................................................... 122 Testování aplikací a hledání chyb............................................................ 123 KROKOVÁNÍ............................................................................................................................................. 124 SLEDOVÁNÍ PROMĚNNÝCH (WATCHES)............................................................................................... 124 BREAKPOINTY......................................................................................................................................... 125 PŘÍMÉ VSTUPY........................................................................................................................................ 126 PŘÍKLAD LADĚNÍ APLIKACE.................................................................................................................. 126
5
Programování v jazyce Visual Basic Vysvětlivky k prvkům použitým v knize V knize naleznete několik značek, které mají svůj smysl. Na první pohled tak snadno vizuálně pochopíte, zda je text důležitý, zda se jedná o poznámku nebo na co si máte dávat pozor.
Poznámka: Tímto symbolem jsou v textu označeny poznámky. Poznámkou je myšlen text, který není nezbytně nutný pro pochopení vysvětlovaného problému. Má za úkol pouze upřesnit nebo doplnit význam textu, případně odkázat na jiné stránky s podobným tématem. Tip: Tímto symbolem jsou v textu označeny všechny tipy. Tipem je myšlen text, který podává návod na vyzkoušení dalších postupů a ukazuje i jiné možnosti řešení daného problému. Upozornění: Tímto symbolem jsou v textu označena všechna upozornění. Upozornění varuje před záludnými překážkami a úskalími, na něž je nutné dávat pozor. Rovněž upozorňuje na nebezpečí v programech a na časté chyby v postupech. Pamatujte: Tímto symbolem jsou v textu označeny pasáže, které je dobré si zapamatovat a znát. Většinou se jedná o základy probírané látky daného tématu. Bez znalosti těchto pasáží obvykle není možné úspěšně pokračovat v dalším studiu.
Zdrojové texty obsáhlých příkladů naleznete v elektronické podobě na internetových stránkách www.c-media.cz (v sekci KNIHY na stránce o této publikaci).
6
Slovo autora Slovo autora Mezi činnostmi, které můžete provozovat na svém PC, patří programování bezesporu k těm náročnějším a obtížnějším. Vyžaduje nejen poměrně značné znalosti, ale také schopnost a ochotu přemýšlet, logicky uvažovat a vyhodnocovat. Tyto požadavky jsou však bohatě vykoupeny možností vytvořit si vlastní program, který bude pracovat přesně podle vašich požadavků, řešit vámi zadané úkoly a pomáhat při studiu i při práci. Práce kvalitních programátorů je také velmi dobře ohodnocena. To je však zatím hudba budoucnosti. Nejprve se programování musíte naučit, což znamená, že musíte zvládnout některý z mnoha dostupných programovacích jazyků. Tato kniha vás naučí programovat v jazyce Visual Basic. Je to moderní, progresivní, stále se vyvíjející jazyk s mnoha možnostmi. Zároveň však patří mezi jednodušší jazyky s jednodušší syntaxí, které nejsou tak náročné na pochopení. Velkou část programu – jeho vzhled - nemusíte ve skutečnosti programovat, tzn. psát zdrojový kód, ale prostě jej nakreslíte pomocí myši. Máte tak více času na samotné programování aplikace a jejích funkcí. Tvůrcem Visual Basicu je společnost Microsoft. Je tak zaručena kompatibilita s ostatními aplikacemi a především s operačním systémem Windows. Přesto nelze říci, že by se díky Visual Basicu programování stalo zábavou pro každého, nebo dokonce že by u něj nebylo nutné přemýšlet. Naopak, programovat se nedá automaticky. Nad každým řádkem kódu je nutné důkladně přemýšlet, jak jej napsat co nejlépe. Proto se v knize budu snažit uvádět i složitější případy, na kterých bude vysvětlen postup. A nyní se již můžeme vrhnout do světa programování a Visual Basicu. Pevně doufám, že s pomocí této knihy pochopíte tento programovací jazyk a že toto pochopení vás bude inspirovat k tomu, abyste programovali co nejvíce, ale také abyste se dále vzdělávali a získávali další informace. Učitelům, kteří budou podle této knihy učit, pak přeji, aby jim pomohla vysvětlit studentům programování, aby je nejen pochopili a aby se je naučili, ale také aby je zaujalo natolik, že budou v programování pokračovat. Josef Myslín
7
Programování v jazyce Visual Basic Prostředí jazyka Visual Basic Než se budete věnovat samotnému programování, musíte se seznámit s prostředím Visual Basicu. Jedná se o typický program pro operační systém Windows. Novější verze, kterou se budete učit, je určena výhradně pro 32bitovou verzi Windows, tj. Windows 95/98/2000. Hardwarové požadavky jsou na dnešní dobu velmi skromné. Program se dá úspěšně využívat na starším stroji s Pentiem na frekvenci 200 MHz, 64 MB paměti RAM a několika sty MB volného místa na pevném disku (závisí na typu instalace). Visual Basic je dodáván jako kompletní vývojové prostředí. To znamená, že se uživateli dostává do rukou kompletní sada nástrojů pro vývoj nových aplikací. S jednotlivými částmi prostředí se postupně seznámíte v jednotlivých kapitolách této knihy. Program komunikuje v angličtině, takže je nanejvýš vhodné znát alespoň základy tohoto světového jazyka. V opačném případě budete odkázáni na to, že si vše zapamatujete. Základní podoba prostředí Visual Basicu je vidět na obrázku.
Hlavní nabídka a panely nástrojů Project Explorer
Panel komponent
Pracovní plocha
Vlastnosti
Náhled
Na obrázku vidíte hlavní součásti prostředí Visual Basicu, které budete při své práci využívat. Je to jednak hlavní nabídka a panely nástrojů. Ty představují cestu ke všem příkazům a funkcím prostředí. Dále je to panel komponent, který budete využívat pro výběr komponent, ze kterých se bude skládat váš program. Máte na výběr například textová pole, popisky, rozbalovací seznamy, zatržítka, přepínače či obrázky. Poznámka: Toto jsou základní komponenty, které se vyskytují snad v každém programu. Visual Basic je velice modulární a umožňuje přidat další komponenty. Ty mohou plnit často velmi specifické úkoly, jako je například prohlížení html kódu, spojení s jiným PC, přehrávání MP3 apod. Některé komponenty jsou součástí Visual Basicu, další lze stáhnout bezplatně z internetu. Ostatní jsou běžné komerční zboží, za které je nutné zaplatit. Snažte se mít v projektu vždy jen ty komponenty, které jsou v něm skutečně využity. Ostatní jen zvyšují prostorové nároky výsledného instalátoru aplikace. Nyní zaměřte svůj zrak na pravou stranu obrazovky. Tam se nachází Project Explorer, který slouží k rychlé orientaci v projektu. Projekt se může skládat z mnoha souborů různých typů a právě díky Project Exploreru v nich budete mít pořádek. Velice důležitá je i další součást, a to vlastnosti. Zde máte možnost nastavit vlastnosti jednotlivých komponent, které umístíte do svého projektu. Pro vizuální kontrolu, jak budou jednotlivá okna 8
Podmíněné příkazy Poznámka: Teď si jistě mnozí z vás kladou otázku, k čemu může být rozdělení na sudá a lichá čísla nebo na ty, kdo budou, či nebudou zkoušeni. Kromě toho, že tyto příklady jsou ilustrací probírané látky, slouží v mnoha praktických úlohách. Například číslo, které je sudé, nemůže být prvočíslem. A co se týká zkoušení? Jste vyučující a chcete si udělat seznam studentů k dozkoušení. Všechny studenty máte v tabulce. Když je „propasírujete“ tímto filtrem, do druhé tabulky uložíte jen ty, kteří budou zkoušeni, a poté je programově setřídíte, máte snadno vytvořený abecední seznam zkoušených.
VOLBA PODMÍNĚNÉHO PŘÍKAZU Mnohokrát budete při programování stát před volbou, který ze dvou příkazů použít. Tento odstavec se vám pokusí dát několik základních pravidel, kterými se můžete řídit. Lze však říci, že příkazy jsou ekvivalentní a zaměnitelné. Při špatné volbě však dojde k tomu, že se budete s programem dřít, přestože pouhou změnou příkazu by vše šlo vyřešit elegantně a snadno. Příkaz If... Then si vyberete tehdy • když máte pouze jednu nebo dvě možnosti – podmínka splněna, či nesplněna • potřebujete vyhodnotit složitější podmínky. Příkaz Select Case si vyberete tehdy • když máte více možností • když jsou jednotlivé případy rozlišeny jako hodnoty, jejich seznamy, rozsahy či jednoduché podmínky. Jako vždy si uvedeme příklady. Máte za úkol vytvořit program, který budou využívat například kina, divadla či cirkusy, jež určují vstupné podle věku návštěvníků. Program tedy bude obsahovat podmínku, která rozhodne o výši vstupného pro konkrétní osobu. Pro ilustraci vám uvedu obě varianty – sami posuďte, která z nich je výhodnější. Řešení pomocí příkazu If... Then Dim Vek As Integer Dim Cena As Integer Vek = 38 If Vek <= 15 Then Cena = 20 ElseIf Vek > 15 And Vek >= 18 Then Cena = 30 ElseIf Vek > 18 And Vek <= 60 Then Cena = 50 Else Cena = 30 End If Print Cena Řešení pomocí příkazu Select Case Dim Vek As Integer Dim Cena As Integer Vek = 60 Select Case Vek Case Is <= 15 Cena = 20 Case 15 To 18 Cena = 30 Case 18 To 60 Cena = 50 Case Else Cena = 30 End Select Print Cena
53
Programování v jazyce Visual Basic Osobně mi druhý způsob připadá přehlednější a jednodušší na pochopení. Podmínky jsou napsány tak, jak bychom je napsali ve skutečnosti, zatímco první způsob je více šroubovaný. Nutno však říci, že jsou naprosto ekvivalentní a v praxi je možno využít oba. Osobně ale doporučuji používat postupy, které co nejvíce odrážejí logický způsob řešení. Jinak je tomu v následujícím příkladu, kdy máme určit, zda dané číslo patří do intervalu 0 až 100. Opět uvádím obě varianty. Řešení pomocí If... Then Dim Cislo As Integer Cislo = 40 If Cislo > 0 And Cislo < 100 Then Print „Patří do intervalu“ Else Print „Nepatří do intervalu“ End If Řešení pomocí Select Case Dim Cislo As Integer Cislo = 40 Select Case Cislo > 0 And Cislo < 100 Case True Print „Patří do intervalu“ Case False Print „Nepatří do intervalu“ End Select V tomto případě je pro změnu jasně lepší volbou příkaz If... Then, který vystihuje jádro problému. Konstrukce s příkazem Select Case mi připadá příliš šroubovaná a umělá a nepamatuji si, že bych někdy něco podobného použil. I zde však oba způsoby splní účel. Tip: Lze tedy říci, že dostanete-li se do situace, kdy se musíte rozhodnout pro jeden z příkazů, je dobré uvědomit si, jak byste tuto situaci řešili vy sami. Poté budeme mít rozhodování snazší. Programování je totiž do jisté míry přepis činnosti pro počítač tak, jak by byla řešena reálně. Není tedy žádným uměním ani důkazem programátorských znalostí, pokud někdo úmyslně využívá složité a šroubované konstrunkce. Naopak, důkazem vyspělosti je čistý, jednoduchý a jednoznačný kód.
PŘÍKLADY Zde najdete několik příkladů, jak lze využít podmínek. Protože se však podmínky využívají neustále, budete se s nimi setkávat i v dalších kapitolách.
Příklad 1 Váš program má na základě zadaného čísla rozhodnout – 1. zda se jedná o číslo celé, či desetinné, 2. zda je číslo záporné, či kladné. Pro jednoduchost bude nula považována za kladné číslo. Dim Cislo As Single Cislo = -40 If Cislo \ 1 <> Cislo Then If Cislo >= 0 Then Print „Kladné desetinné číslo“ Else Print „Záporné desetinné číslo“ End If Else If Cislo >= 0 Then Print „Kladné celé číslo“ Else Print „Záporné celé číslo“ End If End If 54
Podmíněné příkazy Program využívá vnořené podmínky. Ve vnější podmínce je určeno, zda se jedná o číslo kladné, nebo záporné. Číslo je celočíselně děleno číslem 1. Pokud je celé, musí se tento podíl rovnat danému číslu. Pak se v příslušné větvi rozhodne, zda je číslo kladné, či záporné. Vždy máme pouze dvě možnosti, proto je využit příkaz If... Then.
Příklad 2 Máte vytvořit jednoduchou kalkulačku, jež má zadána dvě čísla a řetězec, který určuje operaci. Vy máte příslušnou operaci provést. Nezapomeňte, že nelze dělit nulou. Pokud je zadán řetězec, který neodpovídá žádné (naprogramované) operaci, vypište chybové hlášení. Dim C1 As Integer Dim C2 As Integer Dim Vysledek As Single Dim Operace As String C1 = 35 C2 = 5 Operace = „/“ Select Case Operace Case „+“ Print C1 + C2 Case „-“ Print C1 - C2 Case „*“ Print C1 * C2 Case „/“ If C2 <> 0 Then Print C1 / C2 Case Else Print „Nesprávný operátor“ End Select Tentokrát máte přesně definované případy, proto použijete příkaz Select Case a definujete řešení pro jednotlivé případy. To sestává pouze z výpisu výsledku. Výjimkou je dělení, kde musíte pomocí podmínky If... Then rozhodnout, zda je dělitel různý od nuly.
Příklad 3 Abyste neměli pocit, že existují jenom čísla, bude se další příklad věnovat řetězcům. Postupně zadáváte různé znaky. Pokud tyto znaky odpovídají číslicím, jsou připojeny k prvnímu řetězci. Pokud ne, jsou připojeny ke druhému řetězci. Na konci tyto řetězce spojíte. Protože dosud neznáte cykly, vytvořte jen tu část programu, která rozhoduje o připojení k tomu či onomu řetězci. Dim C As String Dim Z As String Dim Retezec As String Retezec = „8“ Select Case Retezec Case „0“ To „9“ C = C + Retezec Case Else Z = Z + Retezec End Select Zde máte sice jen dvě možnosti, ale kdybyste chtěli pomocí If... Then testovat, zda se jedná o číslici, byl by problém složitější. Zde pouze využijeme rozsah „0“ To „9“. Teď možná zbystříte a ptáte se. Jak je možné použít běžný operátor zřetězení na číslice? Žádné číslice neexistují, pouze znaky s hodnotou číslic. Ale jsou to řetězce, takže používáme běžný operátor +. Poznámka: U čísel je použití rozsahu jasné, ale zde? Jak je možné u řetězců vytvářet rozsahy. Znaky jsou uspořádány za sebou v tabulce, která se nazývá ASCII. Každý znak má své číslo. Znak „0“ má hodnotu 48 a znaku „9“ odpovídá hodnota 57. Rozsah se tedy týká těchto hodnot, a to je přípustné a korektní. 55
Programování v jazyce Visual Basic Příkazy cyklu Cykly jsou stejně důležité a stejně často používané jako podmínky. Jedná se o speciální příkazy, které umožňují opakování zadané činnosti tolikrát, kolikrát je to zapotřebí. Stejně jako bez podmínek, ani bez cyklů se při programování neobejdete. Visual Basic disponuje mnoha typy cyklů, jež umožňují vyřešit jakýkoliv problém, který je třeba zpracovat. Všechny typy cyklů mají dvě základní části – je to samotný příkaz cyklu, který obsahuje podmínku, při jejímž splnění se vykoná tzv. tělo cyklu, tedy posloupnost výkonných příkazů, a příkaz cyklu s podmínkou, která určuje, kdy bude cyklus pokračovat a kdy bude ukončen. Samotný příkaz cyklu totiž není výkonný – lze tedy vytvořit cyklus, který kromě toho, že zpomalí a zahltí počítač, nevykoná žádnou akci. Nyní si tedy představíme jednotlivé typy cyklů.
CYKLUS FOR... NEXT Cyklus FOR...NEXT je základním, velmi často používaným cyklem. Má následující syntaxi: For promenna=od To do [Step krok] . [Exit For] . . Next promenna Promenna se nazývá řídicí proměnná cyklu, od a do jsou hranice intervalu, mezi kterými se hodnota řídicí proměnné pohybuje. Volitelně můžete určit i krok, což je přírůstek v každém opakování cyklu. Pokud krok neuvedeme, Visual Basic automaticky pracuje s krokem 1. Příkaz Next promenna ukončuje tělo cyklu. Program zvýší hodnotu řídicí proměnné o krok a vrací běh programu na začátek těla cyklu. Příkaz Exit For umožňuje kdykoliv během vykonávání cyklu opustit cyklus a pokračovat ve vykonávání dalších příkazů. Jako příklad využití cyklu For... Next si můžeme uvést program, který vypisuje čísla od jedné do sta. Dim A As Integer For A = 1 To 100 Print A Next A Velice jednoduché řešení – proměnná A představuje řídicí proměnnou, která postupně nabývá hodnot od jedné do sta (podle zadání). Protože není krok uveden, je nastaven na 1, což přesně odpovídá zadání. V samotném těle cyklu se pouze vypíše hodnota řídicí proměnné. Dalším příkladem může být program, který vypisuje násobky daného čísla v rozsahu od 0 do daného čísla. Tento problém můžeme řešit i způsobem, kdy dané číslo postupně násobíme čísly od 0 do x. Proč x? Protože v zadání máme jasně řečeno, že násobky mají být vypsány pouze v daném rozsahu. Pokud bychom chtěli násobit, museli bychom nejprve určit největší násobek, který bude součástí daného rozsahu. Ale proč si komplikovat situaci? Mnohem jednodušší je využití cyklu s definovaným krokem. Program bude vypadat takto: Dim Max As Integer Dim Cislo As Integer Dim A As Integer Max = 100 Cislo = 5 For A = 0 To Max Step Cislo Print A Next A Nejprve nadeklarujeme a definujeme horní hranici intervalu a číslo, jehož násobky budeme chtít vypsat. Program poté vypisuje přímo hodnotu řídicí proměnné. Ta totiž obsahuje požadované násobky. Protože cyklus běží pouze do hodnoty Max, máme zaručeno, že pouze do této hodnoty se budou vypisovat naše násobky. Na obrázcích jsou ukázky možných výsledků pro hodnoty proměnné Cislo 5 a 8 a hodnoty proměnné Max 100.
56
Příkazy cyklu Upozornění: Proč je počátek vykonávání u prvního příkladu nastaven na číslo 1 a v druhém případě na nulu? Zatímco v prvním případě chceme skutečně vypisovat čísla od jedné, v druhém případě je tomu jinak. Při každém průchodu cyklem se zvýší hodnota řídicí proměnné A o krok, v našem případě tedy o číslo. Kdybyste začali počítat od čísla 1, pak byste v tomto případě dostali posloupnost 1,6,11,16,..., což v žádném případě nejsou násobky čísla 5. Kdybyste se rozhodli, že budete vypisovat jen nenulové násobky, pak by stačilo změnit hodnotu dolní hranice cyklu na hodnotu Cislo. Z předchozích vět vyplývá jediné, správné určení dolní a horní hranice cyklu, resp. určení podmínky u jiných typů cyklů má rozhodující vliv na správnost celého programového řešení. Pokud totiž hranice či podmínku zadáte nesprávně, zcela tím změníte funkci programu. Tuto skutečnost si ukážeme na následujícím příkladu. Máte určit součet prvních n přirozených čísel menších než číslo x. Správný kód je následující: Dim X As Integer Dim A As Integer Dim Soucet As Integer Soucet = 0 X = 10 For A = 1 To X - 1 Soucet = Soucet + A Next A Print Soucet Velice důležitá je především horní hranice, která je X-1, což je v souladu se zadáním (číslo je menší než X, a protože se jedná o přirozená čísla, pak je menší o číslo 1). Kdybyste však zadali horní hranici jako X, program by zcela změnil svou funkci. Počítal by totiž součet čísel nejvýše rovných X. Všechny výsledky by se od správného lišily právě o X. Poznámka: V uvedených případech v těle cyklu vždy figurovala hodnota řídicí proměnné cyklu, což není v žádném případě nutnost. V těchto případech tedy existovala vazba mezi řídicí proměnnou a tělem cyklu. Existují však případy, kdy řídicí proměnná pouze určuje počet opakování. Příkladem může být program, který generuje 6 náhodných čísel jako simulaci tahu sportky. Zdrojový kód řešící tento problém může být následující: Dim A As Integer Randomize For A = 1 To 6 Print Int(Rnd(1) * 49) + 1 Next A V těle cyklu je sice použita konstrukce, které prozatím nerozumíte, ale to není důležité. Jedná se zkrátka o kód, který definuje náhodná (přesněji tzv. pseudonáhodná) celá čísla v rozsahu 0 až 49. Příkaz Randomize aktivuje tento generátor. Přesněji se s tímto příkazem seznámíte později. Nyní si pouze všimněte, že v těle cyklu nenaleznete proměnnou A. To tedy znamená, že tělo cyklu je nezávislé na této proměnné, a to, že je uvedeno For A= 1 To 6, pouze definuje, že se toto tělo vykoná právě šestkrát. Nyní je třeba uvést příklad předčasného ukončení cyklu pomocí příkazu Exit For. Představte si fiktivní hru, ve které si předem určíte, kolikrát budete házet kostkou. Poté házíte. Pokud však v kterémkoliv okamžiku dosáhne součet hodnoty větší než 20, prohráli jste a nemá smysl pokračovat v házení. Proto bude cyklus ukončen. Jak je však vidět z kostrbatosti a umělosti příkladu, předčasné ukončení tohoto typu cyklu (na rozdíl od jiných typů) není příliš častý a využívá se minimálně. Přesto zde máte k dispozici zdrojový kód této netradiční hry. Dim PocHod As Integer Dim A As Integer Dim Soucet As Integer Randomize Soucet = 0 PocHod = 100 For A = 1 To PocHod Soucet = Soucet + Int(Rnd(1) * 6) + 1 If Soucet > 20 Then Exit For Next A Print Soucet 57
Programování v jazyce Visual Basic Opět je zde použit náš „známý neznámý“ generátor náhodných čísel – tentokrát od 1 do 6. Při každém průchodu cyklem je k hodnotě Soucet přičtena hodnota tohoto náhodně vygenerovaného čísla (které představuje počet bodů na fiktivní kostce). Cyklus sice probíhá od 1 do PocHod (uživatelsky určený počet hodů), nicméně v každém průchodu je testováno, zda součet již nepřekročil „kritickou“ hodnotu 20. Pokud ano, je cyklus ukončen. Poznámka: Možná se ptáte, proč se cyklus vůbec ukončuje. Je přece možné nechat jej doběhnout a až poté testovat, zda hodnota nepřekročila povolenou hranici. Ano, je to možné, ale představte si, že by se někdo rozhodl, že kostkou bude házet milionkrát. Přestože již po dvacátém prvním pokusu (zcela jistě) je jasné, že nemůže uspět, bude tento člověk neúnavně házet znovu a znovu? To se jistě nestane, člověk nebude plýtvat energií a časem. Stejně se snažíme postupovat při programování. Ani zde neplýtváme výkonem počítače, i když je u dnešních počítačů dostatečný, aby milion hodů zvládl. Ale milion není konečnou hranicí a i nejvýkonnější počítač lze zahltit nesmyslnými požadavky. Odpověď je tedy jasná - ukončení cyklu provádíme proto, abychom zabránili nesmyslným úkonům. Cyklus For... Next je důležitý, přesto má zásadní omezení. Jedná se o tzv. nepodmíněný cyklus. Již v době návrhu a tvorby programu lze určit, kolikrát proběhne. Nicméně existují situace, ve kterých je třeba pružně reagovat na vývoj situace, a tudíž je třeba mít pod kontrolou každý průběh cyklem. Dalším z cyklů, které máte ve Visual Basicu k dispozici, je tzv. podmíněný cyklus. Ten nezávisí na hodnotě řídicí proměnné, ale na vyhodnocení řídicí podmínky cyklu. Poznámka: Pomocí příkazu Exit For (popsaného v jednom z předchozích odstavců) je možné upravit cyklus For...Next tak, aby plnil úlohu podmíněného cyklu. Je to ale krajně nepraktické a zejména nelogické, protože máte k dispozici jednoduše použitelný podmíněný cyklus. Některé programovací jazyky nemají tak rozsáhlé možnosti. Protože jste se však rozhodli pro Visual Basic, na tyto problémy v žádném případě nenarazíte.
CYKLUS DO... LOOP Cyklus Do... Loop je oním cyklem, o němž jsme hovořili v předchozím odstavci. Je to tedy podmíněný cyklus, jehož běh či ukončení nezávisí na hodnotě proměnné, ale na obecné podmínce (tj. na hodnotě logického výrazu, přičemž není vyloučeno, aby i zde byla rozhodujícím faktorem obyčejná hodnota proměnné). Cyklus Do... Loop má dvě varianty – jejich syntaxe je následující: 1. varianta Do . . [Exit Do] . Loop [Until | While podminka] 2. varianta Do [Until | While podminka] . . [Exit Do] . Loop V obou variantách nalezneme stejné prvky – jsou to zejména klíčová slova Do a Loop, která uvozují počátek a konec cyklu. Podmínka je logický výraz, který rozhoduje, zda cyklus poběží dále, či nikoliv. To, jakým způsobem rozhoduje, určuje klíčové slovo před touto podmínkou. Možnosti jsou následující: • While – cyklus pokračuje, je-li podmínka splněna, tedy pokud je její hodnota True • Until – cyklus pokračuje, není-li podmínka splněna, tedy pokud je její hodnota False Tyto možnosti jsou vzájemně zaměnitelné, přesto je v některých případech vhodnější jedna, a jindy zase druhá možnost. Stejně jako u cyklu For... Next existuje i zde možnost cyklus předčasně ukončit příkazem Exit Do. Ovšem 58