zde - Univerzita Karlova
zde - Univerzita Karlova zde - Univerzita Karlova
Algoritmy ve výuce na střední škole 1 Hashim Habiballa, PřF OU Ostrava 2 Antonín Jančařík, PedF UK Praha 3 Abstrakt. Příspěvek ukazuje spojení teoretické (matematické) informatiky s algoritmizací a praxí. Zvolená úloha jasně ukazuje význam teoretických disciplín, konkrétně teorie formálních jazyků a automatů, pro schopnost středoškolských studentů naučit se návrhu efektivních algoritmů. Tato úloha zahrnuje pro informační technologie a programování nezbytnou syntaktickou analýzu a překlad. Vybraný příklad jazyka aritmetických výrazů je navíc vhodný pro výuku v rámci matematiky, neboť jde o všeobecně používaný matematický aparát. Úvod V dnešní době se ve výuce informatiky na střední škole bohužel často projevuje trend klesající odborné úrovně. Jde zejména o výuku orientovanou na aplikační programy, bez důrazu na principy informatiky, zahrnující především algoritmy a teoretické disciplíny zkoumající související pojmy, jako je teorie formálních jazyků a automatů, formální logika nebo vyčíslitelnost a složitost. Tento článek navazuje na některé již uveřejněné materiály, viz např. [8], [9], [10]. Úloha, kterou přinášíme, má hodně společného s typickou úlohou v informatické praxi, a tou je překlad, resp. interpretace, nějakého zdrojového kódu (programu) do jiného jazyka (včetně optimalizací vzniklého kódu). S tímto se setkáváme prakticky každodenně (otázkou je, zda si to uvědomujeme). Samozřejmě nejprve informatika asi napadne úloha typu – programuji řešení zadaného úkolu v nějakém programovacím jazyce (např. Pascalu) a pak použiji překladač, který mi vyrobí kód v nějakém počítačově použitelném formátu (třeba .exe soubor pro počítač typu PC pod platformou MS-DOS). Nemusí však jít jen o tento „programátorský případ. Aniž si to mnohdy uvědomujeme, pokud prohlížíme libovolnou webovou stránku, tak náš webový prohlížeč získává z daného URL kód v jazyce HTML. Ten by samozřejmě pro člověka asi nebyl na čtení to nejlepší. Proto prohlížeč musí PŘELOŽIT a interpretovat tento kód tak, 1 Příspěvek byl vypracován s podporou grantu GAČR 406/05/P561. 2 e-mail: habiballa@volny.cz, www: http://www.volny.cz/habiballa/ 3 e-mail: antonin.jancarik@pedf.cuni.cz 104
aby byl pro člověka příjemný. Jde o zobrazení různých velikostí písma, tabulek, obrázků, pozadí stránek atd. Jakkoliv to vypadá naprosto přirozeně, při zkoumání principů a metod programů pro tuto činnost zjistíme, že to není až tak triviální činnost a souvisí neoddělitelně právě s teorií formálních jazyků. I zdánlivě jednoduchá součást tohoto procesu je bez dobré znalosti pojmů a postupů, které přináší teorie formálních jazyků a automatů, takřka neřešitelný úkol. Touto jednoduchou úlohou, se kterou se nyní důkladně seznámíme a ukážeme si její obecně použitelné řešení, je kontrola, překlad a vyhodnocení aritmetického výrazu. Úlohu si samozřejmě pro naše účely výkladu algoritmů zjednodušíme oproti klasickým programovacím jazykům, kde můžeme používat reálná čísla v různých tvarech nebo číselné proměnné. To ale nijak nesnižuje obecnost principů, které se zde naučíme. Aritmetickým výrazem budeme myslet řetězce s číslicemi 0–9, operace sčítání a násobení, +, ∗, lze používat i pomocné symboly závorek (, ). Na místě operandu může stát struktura obecně stejného typu, jako jsme právě definovali (výraz lze vnořit do výrazu). Příkladem budiž velmi jednoduchý výraz 5 + 3 ∗ 2, jehož hodnotu lehce spočítáme. Uvědomíme si prioritu operátorů a nejprve spolu vynásobíme 3 ∗ 2=6atentomezivýsledek pak použijeme při operaci s nejnižší prioritou 5 + 6 = 11. Tato jednoduchost je však jen zdáním, uvědomme si, že počítač pracuje s datovými strukturami bez „lidského vidění. To zahrnuje velmi rychlé vyhodnocení hierarchie formule. Navíc tento postup předpokládá, že ve výrazu není žádná syntaktická chyba (např. chybějící párová závorka). Takovou chybu by musel člověk rovněž odhalit. Poznámka. Zobecnění na složitější operandy, jako jsou reálná čísla, není principiálně problém – stačí během analýzy nevytvářet jen znaky jako výstup, ale struktury obsahující přímo reálné číslo. Stejně tak lze navázat i jinými operacemi. Takovéto výrazy jsou nedílnou součástí každého vyššího procedurálního programovacího jazyka (řešení všech problémů obvykle stavíme na správně formulovaných podmínkách a aritmetických výpočtech). Samozřejmě úloha má ještě důležitou část, která je již za hranicí tohoto článku – jsou jím různé optimalizace kódu; lze např. u logických podmínek vyhodnotit, zda formule není platná či nesplnitelná, případně ji značně zmenšit. Ale jak tuto činnost překladače – programy – realizují? Uvažujeme-li jako lidé s inteligencí a schopností číst text nejen lineárně 105
- Page 53 and 54: 6. Situácia v hre je ako na obr. 7
- Page 55 and 56: Turnaj měst v České republice s
- Page 57 and 58: Ve školním roce 2006/2007 se dík
- Page 59 and 60: 2. V rovině je dán tečnový čty
- Page 61 and 62: Řešení 2 Čtverec můžeme rozř
- Page 63 and 64: Řešení 8 (bez komentáře, chyb
- Page 65 and 66: 1 Vztah matematiky a fyziky Fyzika
- Page 67 and 68: řujeme platnost navržených hypot
- Page 69 and 70: 6,8 cm, pohybující se ve vzdálen
- Page 71 and 72: 5 Matematika a problémy astronomic
- Page 73 and 74: Úloha 6.2 Lyžař sjíždí po dlo
- Page 75 and 76: graficky. Z grafu 1 vidíme, že p
- Page 77 and 78: změn síly F = F (x), kde x je dé
- Page 79 and 80: Pokud jde o obor racionálních č
- Page 81 and 82: Dedekindova poznámka o tom, že al
- Page 83 and 84: taková úplná korespondence mezi
- Page 85 and 86: Nemoha se dočkat odpovědi, píše
- Page 87 and 88: soutěžích, vyjádřené 11 zlat
- Page 89 and 90: koslovenska nejprve do válkou rozb
- Page 91 and 92: Výpočetní technika dovoluje prov
- Page 93 and 94: obtížnosti, problém je proto vho
- Page 95 and 96: tohoto zařízení, ta jím prochá
- Page 97 and 98: v pracovních sešitech a knížká
- Page 99 and 100: Z výše uvedeného dělení lidsk
- Page 101 and 102: žáky nechat zakreslovat pohled do
- Page 103: http://hlavolamy.zde.cz (odtud je p
- Page 107 and 108: matika (BKG) je jedním z možných
- Page 109 and 110: Velice oblíbenou, jednoduchou a p
- Page 111 and 112: if not((ch in [’0’..’9’])or
- Page 113 and 114: egin err:=0; {inicializace prom.} i
- Page 115 and 116: Náš kód už tedy zbývá jen obo
- Page 117 and 118: Literatura [1] Češka, M., Rábov
- Page 119 and 120: Nejčastěji respondenti uváděli,
- Page 121 and 122: v jakémkoliv oboru - umění, spor
- Page 123 and 124: • rozšiřování učiva (0/0)
- Page 125 and 126: Algoritmy a RVP Autoři článku pr
- Page 127 and 128: postupy, se kterými se v matematic
- Page 129 and 130: však právě srovnávat rychlost a
- Page 131 and 132: • Významný model pro hledání
- Page 133 and 134: 2. vnější - využití funkcí k
- Page 135 and 136: Dále je zde také uvedena historie
- Page 137 and 138: zkumu se v tomto případě ukázal
- Page 139 and 140: si lépe zapamatovat, snadněji neg
- Page 141 and 142: D5: „Už to zkouším počtvrté!
- Page 143 and 144: 2.5 Ukázky dialogů E: „Rozumít
- Page 145 and 146: pomocných záznamů, jen s dotýk
- Page 147 and 148: Vývoj nových forem péče o talen
- Page 149 and 150: 10. Která odpověď na otázku „
- Page 151 and 152: 18. Kolik litrů horké vody o tepl
- Page 153 and 154: Jeden žák naší školy stráví
aby byl pro člověka příjemný. Jde o zobrazení různých velikostí písma,<br />
tabulek, obrázků, pozadí stránek atd. Jakkoliv to vypadá naprosto přirozeně,<br />
při zkoumání principů a metod programů pro tuto činnost zjistíme,<br />
že to není až tak triviální činnost a souvisí neoddělitelně právě s teorií<br />
formálních jazyků. I zdánlivě jednoduchá součást tohoto procesu je bez<br />
dobré znalosti pojmů a postupů, které přináší teorie formálních jazyků<br />
a automatů, takřka neřešitelný úkol.<br />
Touto jednoduchou úlohou, se kterou se nyní důkladně seznámíme a<br />
ukážeme si její obecně použitelné řešení, je kontrola, překlad a vyhodnocení<br />
aritmetického výrazu. Úlohu si samozřejmě pro naše účely výkladu<br />
algoritmů zjednodušíme oproti klasickým programovacím jazykům, kde<br />
můžeme používat reálná čísla v různých tvarech nebo číselné proměnné.<br />
To ale nijak nesnižuje obecnost principů, které se <strong>zde</strong> naučíme. Aritmetickým<br />
výrazem budeme myslet řetězce s číslicemi 0–9, operace sčítání<br />
a násobení, +, ∗, lze používat i pomocné symboly závorek (, ). Na místě<br />
operandu může stát struktura obecně stejného typu, jako jsme právě definovali<br />
(výraz lze vnořit do výrazu). Příkladem budiž velmi jednoduchý<br />
výraz 5 + 3 ∗ 2, jehož hodnotu lehce spočítáme. Uvědomíme si prioritu<br />
operátorů a nejprve spolu vynásobíme 3 ∗ 2=6atentomezivýsledek<br />
pak použijeme při operaci s nejnižší prioritou 5 + 6 = 11. Tato jednoduchost<br />
je však jen zdáním, uvědomme si, že počítač pracuje s datovými<br />
strukturami bez „lidského vidění. To zahrnuje velmi rychlé vyhodnocení<br />
hierarchie formule. Navíc tento postup předpokládá, že ve výrazu<br />
není žádná syntaktická chyba (např. chybějící párová závorka). Takovou<br />
chybu by musel člověk rovněž odhalit.<br />
Poznámka. Zobecnění na složitější operandy, jako jsou reálná čísla,<br />
není principiálně problém – stačí během analýzy nevytvářet jen znaky<br />
jako výstup, ale struktury obsahující přímo reálné číslo. Stejně tak lze<br />
navázat i jinými operacemi.<br />
Takovéto výrazy jsou nedílnou součástí každého vyššího procedurálního<br />
programovacího jazyka (řešení všech problémů obvykle stavíme<br />
na správně formulovaných podmínkách a aritmetických výpočtech). Samozřejmě<br />
úloha má ještě důležitou část, která je již za hranicí tohoto<br />
článku – jsou jím různé optimalizace kódu; lze např. u logických podmínek<br />
vyhodnotit, zda formule není platná či nesplnitelná, případně ji<br />
značně zmenšit. Ale jak tuto činnost překladače – programy – realizují?<br />
Uvažujeme-li jako lidé s inteligencí a schopností číst text nejen lineárně<br />
105