Rekurze - tvorba a zápis algoritmů v jazyce Pascal



Podobné dokumenty
přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk

PROGRAMOVÁNÍ. Cílem předmětu Programování je seznámit posluchače se způsoby, jak algoritmizovat základní programátorské techniky.

Blended learning v podnikovém vzdělávání případová studie

P ř e d m ě t : M A T E M A T I K A

ŠVP Gymnázium Ostrava-Zábřeh Úvod do programování

METODICKÉ LISTY. výstup projektu Vzdělávací středisko pro další vzdělávání pedagogických pracovníků v Karlových Varech. číslo)

1. Úroveň znalostí a dovedností

Pravidla pro hodnocení a klasifikaci žáků v jednotlivých vzdělávacích oborech

Učební osnova předmětu stavba a provoz strojů

MATEMATIKA Charakteristika vyučovacího předmětu 2. stupeň

PROFIL BUDOUCÍHO ABSOLVENTA OBORU INFORMATIKA

INSPEKČNÍ ZPRÁVA. Střední odborné učiliště nábytkářské s.r.o. Horská 167, 460 Liberec. Identifikátor:

INSPEKČNÍ ZPRÁVA. Základní škola Vodňany, Bavorovská 1046, okres Strakonice. Bavorovská 1046, Strakonice. Identifikátor školy:

H O D N O C E N Í Ž Á K Ů A A U T O E V A L U A C E Š K O L Y

Č E S K Á Š K O L N Í I N S P E K C E. Čj.: / Oblastní pracoviště č. 9 Hradec Králové Signatura: bi3cs104 Okresní pracoviště Náchod

Volitelná výpočetní technika

ČESKÁ ŠKOLNÍ INSPEKCE. Inspekční zpráva

Základní škola Moravský Beroun, okres Olomouc

Téma Stručná anotace Počet h o d

INSPEKČNÍ ZPRÁVA. Soukromá střední škola výpočetní techniky s.r.o. Litvínovská 600, Praha 9. Identifikátor školy:

Matematika Vzdělávací oblast Matematika a její aplikace

ŠKOLNÍ VZDĚLÁVACÍ PROGRAM

Rybí pásma - zákonitosti

Seminář z matematiky. jednoletý volitelný předmět

MAP Železnobrodsko. Vyhodnocení dotazníkového šetření MŠMT - ZÁKLADNÍ ŠKOLY. registrační číslo projektu: CZ /0.0/0.

INSPEKČNÍ ZPRÁVA. Střední odborná škola elektrotechnická a strojní a Střední odborné učiliště, Pardubice, Do Nového 1131

Učební osnovy Vzdělávací oblast: Matematika a její aplikace Vzdělávací obor: Matematický kroužek pro nadané žáky ročník 9.

IN SP EKČ N Í ZP R ÁVA

INSPEKČNÍ ZPRÁVA. Střední odborné učiliště dopravní, Praha 6-Ruzyně, K Letišti 278. K Letišti 278, Praha 6 - Ruzyně

INSPEKČNÍ ZPRÁVA. Střední průmyslová škola chemická Pardubice. Na Třísle 135, Pardubice. Identifikátor školy:

ČESKÁ ŠKOLNÍ INSPEKCE. Inspekční zpráva

PRAVIDLA PRO HODNOCENÍ VÝSLEDKŮ VZDĚLÁVÁNÍ ŽÁKŮ

Pořadové číslo: Název vzdělávacího programu: Počítač ve výuce matematiky

INSPEKČNÍ ZPRÁVA. Základní škola Opava, Šrámkova 4. Adresa: Šrámkova 4, Opava. Identifikátor školy:

Cílová skupina Výuka je určena pro pracovníků v oblasti zemědělství či zpracovatelské oblasti

Česká školní inspekce Moravskoslezský inspektorát INSPEKČNÍ ZPRÁVA. Základní škola Frýdek-Místek, Jana Čapka 2555

ČESKÁ ŠKOLNÍ INSPEKCE. Inspekční zpráva

Matematika a její aplikace Matematika - 2.období

5.3. Matematika a její aplikace

MINISTERSTVO ŠKOLSTVÍ, MLÁDEŽE A TĚLOVÝCHOVY. Učební osnova předmětu MATEMATIKA. pro studijní obory SOŠ a SOU (13 15 hodin týdně celkem)

Česká školní inspekce Středočeský inspektorát INSPEKČNÍ ZPRÁVA. Čj. ČŠIS-927/13-S

5.1.7 Informatika a výpočetní technika. Časové, obsahové a organizační vymezení. ročník hodinová dotace

Výkaznictví sociálních služeb. 1. hodnotící zpráva

INSPEKČNÍ ZPRÁVA. Základní škola Bruntál, Cihelní Bruntál, Cihelní 6. Identifikátor školy:

INSPEKČNÍ ZPRÁVA. Střední odborné učiliště, Odborné učiliště a Učiliště, Vimperk, Nerudova 267. Adresa: Nerudova 267, Vimperk

INSPEKČNÍ ZPRÁVA. Základní škola Litoměřice, Ladova 5. Ladova 5, Litoměřice. Identifikátor školy:

Č E S K Á Š K O L N Í I N S P E K C E INSPEKČNÍ ZPRÁVA. Mgr. Petr Stempěn Město Karviná ŠÚ Karviná, Mírová 1429, Karviná-Nové Město

STUDIJNÍ A ZKUŠEBNÍ ŘÁD OSTRAVSKÉ UNIVERZITY V OSTRAVĚ

Pořadové číslo: 7. Téma Stručná anotace Počet h o d

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Průvodní list kurzu. Název kurzu: Autor kurzu: Vyučovací předmět: Ročník: Téma: Účel; co kurzem řeším: Kapaliny a plyny. Mgr.

ČESKÁ ŠKOLNÍ INSPEKCE. Inspekční zpráva

INFORMAČNÍ A KOMUNIKAČNÍ TECHNOLOGIE. A/ Charakteristika předmětu. INFORMAČNÍ A KOMUNIKAČNÍ TECHNOLOGIE 2. STUPEŇ Ročník: devátý.

INSPEKČNÍ ZPRÁVA. Gymnázium Třinec, Komenského 713. Komenského 713, Třinec. Identifikátor školy:

ŠVP ZV LMP Charakteristika vyučovacího předmětu Matematika na II. stupni

INSPEKČNÍ ZPRÁVA. Základní škola a mateřská škola Srní, okres Klatovy. Srní 10, Kašperské Hory. Identifikátor školy:

Název DUM: VY_32_INOVACE_2B_15_Základy_práce_v_tabulkovém_editoru_EXCEL_2007

Dodatek č. 3 ke školnímu vzdělávacímu programu. Strojírenství. (platné znění k )

ČESKÁ REPUBLIKA Česká školní inspekce. Zlínský inspektorát - oblastní pracoviště INSPEKČNÍ ZPRÁVA. Základní škola Ludslavice, okres Kroměříž

S M Ě R N I C E Ř E D I T E L E Š K O L Y MATURITNÍ PRÁCE (PROJEKT)

ALGORITMY A DATOVÉ STRUKTURY

3. Hodnocení učitelů žáky

23-41-M/01 STROJÍRENSTVÍ M/01 TECHNICKÁ ZAŘÍZENÍ BUDOV M/01 INFORMAČNÍ TECHNOLOGIE

ŠKOLNÍ VZDĚLÁVACÍ PROGRAM

Metodika využití národního rámce kvality při inspekční činnosti ve školách a školských zařízeních

Dodatek č. 3 ke Školnímu vzdělávacímu programu pro základní vzdělávání, č.j.: 142/2013, ze dne

Změňte styly nadpisů takto: Nadpis úvodní styl: Nadpis1 Nadpisy kurzivou Nadpis2 Podtržené nadpisy Nadpis3. Do dokumentu vložte č. stránek.

F. Pravidla pro hodnocení výsledků vzdělávání a chování žáků

ČESKÁ ŠKOLNÍ INSPEKCE. Inspekční zpráva

V Y H L Á Š E N Í V Ý Z V Y

Matematická statistika

INSPEKČNÍ ZPRÁVA. Česká školní inspekce Moravskoslezský inspektorát. Gymnázium a Střední odborná škola, Orlová-Lutyně, příspěvková organizace

Česká školní inspekce Pražský inspektorát INSPEKČNÍ ZPRÁVA. čj. ČŠIA-401/10-A

ČESKÁ ŠKOLNÍ INSPEKCE. Inspekční zpráva

Český jazyk a literatura CHARAKTERISTIKA VYUČOVACÍHO PŘEDMĚTU. 1. Obsahové, časové a organizační vymezení předmětu

Obsah. KAPITOLA 1 Dříve než začneme 19 Kdysi dávno aneb střípky z historie algoritmických strojů třicátá léta 22

ČESKÁ REPUBLIKA Česká školní inspekce. Královéhradecký inspektorát - oblastní pracoviště INSPEKČNÍ ZPRÁVA

Česká školní inspekce Středočeský inspektorát INSPEKČNÍ ZPRÁVA. Čj. ČŠIS-1326/14-S

INSPEKČNÍ ZPRÁVA. Gymnázium, Praha 2, Botičská 1. Botičská 1, Praha 2. Identifikátor školy:

Základní škola Pomezí, okres Svitavy. KLASIFIKAČNÍ ŘÁD ( vnitřní metodický pokyn ) Platnost od: na základě Vyhlášky MŠMT ČR č.256/2012sb.

1.3. Cíle vzdělávání v oblasti citů, postojů, hodnot a preferencí

VLASTNÍ HODNOCENÍ ŠKOLY

Č E S K Á R E P U B L I K A. Inspekční zpráva

Úprava učebních plánů výtvarného oboru základních uměleckých škol

Č E S K Á Š K O L N Í I N S P E K C E. Čj.: / Oblastní pracoviště č. 06 INSPEKČNÍ ZPRÁVA

Vzdělávací oblast: Matematika a její aplikace Vzdělávací obor: Matematický kroužek pro nadané žáky ročník 9.

10/2005 Sb., Vyhláška o vyšším odborném vzdělávání, ve znění účinném k

Mapa školy PRO STŘEDNÍ ŠKOLY

UČEBNÍ OSNOVA PŘEDMĚTU

Česká školní inspekce Královéhradecký inspektorát INSPEKČNÍ ZPRÁVA. Čj. ČŠIH-505/15-H

METODICKÉ LISTY. výstup projektu Vzdělávací středisko pro další vzdělávání pedagogických pracovníků v Sokolově

ČESKÁ ŠKOLNÍ INSPEKCE. Inspekční zpráva

1. VYMEZENÍ ODBORNÉ STÁŽE

Rekurze. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Česká republika Česká školní inspekce. Středočeský inspektorát - oblastní pracoviště INSPEKČNÍ ZPRÁVA

Česká školní inspekce Pražský inspektorát INSPEKČNÍ ZPRÁVA. Čj. ČŠIA-2049/14-A. Gymnázium, Praha 4, Postupická 3150

Výuka IVT na 1. stupni

ČESKÁ ŠKOLNÍ INSPEKCE

Česká školní inspekce Liberecký inspektorát INSPEKČNÍ ZPRÁVA. čj. ČŠI-267/09-L

Transkript:

Rekurze - tvorba a zápis algoritmů v jazyce Pascal 1 Autor kurzu Zbyněk Hamerník 2 Vyučovací předmět (volitelný) seminář z IVT 3 Ročník maturitní ročník gymnázia 4 Téma Vysvětlení myšlenky rekurze, užití rekurze v programování, zápis rekurze s prostředky programovacího jazyka Pascal 5 Účel Podpořit formální výuku rekurze konanou dle běžného rozvrhu v rámci semináře v oblastech: poskytnutí studentům dostupného síťového úložiště materiálů a odkazů při výuce i mimo výuku testování studentů seznámení studentů s prostředím LMS (zejména s interaktivními prvky a nástroji komunikace) 6 Počet učitelů (vzdělavatelů) a jejich potřebná aprobace Pro realizaci kurzu je zamýšlen jeden učitel s aprobací výuky informatiky pro střední školu 7 Vzdělávací program Kurz navazuje na v současné době dobíhající učební osnovy informatiky a výpočetní techniky pro gymnázia a zároveň respektuje v současnosti zaváděný ŠVP (v srpnu 2009 je ve fázi dokončování a tedy ještě nezveřejněn, stane se tak v průběhu září 2009 mj. na webu www.gymberoun.cz) 8 Časový harmonogram Měsíc výuky zejména v rámci běžného rozvrhu a doplňkově mimo rozvrh formou domácí samostatné práce studentů 9 Časová dotace na projekt Sedm výukových hodin v rámci běžné výuky plus nejméně tři hodiny mimo výuku 10 Předpokládané vstupní znalosti, dovednosti žáka, požadavky kladené na žáka, aby mohl kurz absolvovat Kurz je určen pro středně pokročilé studenty ovládající: editaci, kompilaci a debugging zdrojového kódu ve vývojovém prostředí FreePascal zápis řídících struktur větvení a cyklů v jazyce Pascal tvrobu podprogramů v jazyce Pascal a předávání parametrů podprogramům tvorbu vlastního datového typu pro proměnné, včetně typu záznam

11 Cíle kurzu 11.1.Obecný vzdělávací cíl kurzu Studenti se prostřednictvím kurzu seznámí se základy rekurzivního programování, přičemž získávají/posilují další programátorské kompetence 11.2.Konkrétní cíle student si procvičí/upevní kompetence dosažené v dříve probíraných oblastech programování v jazyce Pascal, na které kurz navazuje (zejména návrh a zápis vhodného algoritmu resp. posouzení nabízených variant; tvorbu podprogramů a předávání parametrů podprogramů; definování a užití vlastního datového typu; čtení/tvorbu vývojových diagramů) student si vybaví souvislosti s jinými oblastmi, ve kterých jsou rekurzivní postupy užity (zejména matematika, grafika, jazyk) student vysvětlí princip rekurze student vyjádří členy posloupnosti zadané rekurentně student vysvětlí rozdíl mezi přímou a nepřímou rekurzí student užije volání podprogramu z těla hlavního programu, z těla jiného podprogramu i z těla podprogramu samotného a to v souladu se syntaktickými pravidly jazyka Pascal rekurentní volání student vždy zapisuje podmíněně student použije ve vhodném případě direktivu forward student porovná populární metody třídění Bubblesort, Quicksort, Mergesort podle principu, složitosti a zápisu student při analýze zadaného problému rozezná možnost použít rekurzivní řešení (zejména půlení intervalů a podobné problémy vhodné k řešení metodou rozděl a panuj ) a zapíše jej jako rekurzivní podprogram 12 Pomůcky pro práci v kurzu PC nebo podobné zařízení s připojením k Internetu s níže vyjmenovanými hardwareovými a softwareovými požadavky; psací prostředky 13 Technické vybavení potřebné k uspořádání e-learningového kurzu ve škole učebna pro výuku informatiky vybavená prostředky pro šestnáct studentů (PC v síti s dostatečným výkonem pro běh níže uvedeného programového vybavení bez problému vyhovuje PC pořízené v roce 2004) domácí počítačové pracoviště pro část práce určené pro domácí samostatnou práci v obou případech slouží počítače jak pro potřeby kurzu, tak pro programování; vedle počítače se nepochybně najde část volného stolu pro psaní poznámek nebo vypracování písemných úkolů 14 Softwarové vybavení k uspořádání e-learningového projektu ve škole webový prohlížeč pro zobrazení prvků kurzu (včetně obrázků a odkazů na jiné webové stránky) vývojové prostředí FreePascal (nebo podobné, např. TurboPascal, Delphi) pro editaci, kompilaci a debugging zdrojového kódu operační systém Microsoft Windows podporující běh spustitelných předloh uložených v kurzu 15 URL projektu http://moodle.gymcheb.cz/course/view.php?id=1009

16 Vyučovací metody/strategie a organizační řešení Kurz je součástí a podporou formální výuky (blended learning). V rámci běžného rozvrhu semináře budou ve vyučovacích hodinách probrány všechny výkladové části kurzu, všechny řešené příklady a základní zadání všech cvičení a jejich vyhodnocení/porovnání se vzorovým řešením. K domácí práci jsou určena rozšířující zadání některých cvičení, studium poskytnutých dalších zdrojů a samostatné vypracování některých cvičení. Volba metod je ovlivněna osobní pedagogickou zkušeností autora s výukou programování. Ve vyšší míře je dán prostor pro tvůrčí samostatné alternativní vypracování zadání a pestrost hodiny (aktivit, náročnosti, metod). Používané výukové metody jsou: frontální výklad pro vysvětlení obecných pojmů a postupů (metoda nenáročná na prostředky a velmi efektivní je-li použita v kombinaci se samostatnou a skupinovou prácí) multimediální ukázky podporující frontální výklad (pro motivaci studentů, oživení jejich zájmu a soustředění a pro lepší pochopení vysvětlovaného, resp. pochopení v souvislostech) diskuse nad společně vytvářenými grafickými znázorněními vhodných algoritmů na tabuli (vytváří-li vývojové diagramy nebo jiná znázornění algoritmů alespoň zčásti studenti, je dosaženo větší motivace, vyšší úrovně dosaženého osvojení a jsou včas podchycena případná nedorozumění/nepochopení v zadání/řešení úloh) komentování společně prováděných prací (krokování, testování spustitelných předloh je vhodné nechat provádět tyto činnosti studenty samotné nebo vybrané studenty nechat tuto činnost předvádět ostatním a zasahovat pouze komentováním důsledkem je lepší soustředění a pochopení) samostatné nebo skupinové řešení problémových úloh s neúplným zadáním nebo zadáním obsahujícím chyby (výrazně lepších výsledků vzdělávání v oblasti programování je dosaženo, pokud studenti nemusí vytvářet celý kód požadovaného programu, ale jen jeho chybějící/chybnou část; pokud by studenti museli kód celý vytvářet nový, je to pro ně demotivující, pro výuku je to zbytečná časová zátěž, navíc v předložené části zadání je studentům předkládána požadovaná štábní kultura zápisu a také správné řešení problémů spadajících do některých dříve probíraných témat; dobrých výsledků při realizaci cvičení je dosaženo jen tehdy, pokud studenti pochopí smysl předkládané části kódu je proto třeba věnovat jeho výkladu dostatek času; v tomto kurzu jsou všechna zadání alespoň zčásti vypracována, žádoucí nicméně je, nechat studenty např. v rámci projektu tvorby složitějšího programu tvořit občas také celý kód na zelené louce ) samostatné nebo skupinové řešení úloh dle předlohy (je efektivnější podpořit zadání cvičení pomocí předlohy, než pouhým slovním zadáním je dosaženo snazšího pochopení, vyšší motivace a možnosti porovnání vypracovaného řešení se vzorovým) učitelem komentované prezentování řešení úloh studenty (tato metoda je náročnější na čas než pouhé odhalení vzorového řešení, ale přináší možnost ukázky alternativních postupů, odhalení skrytých chyb a otevřenější diskuzi) skupiny jsou obvykle dvojice (extrémní programování); volba mezi samostatným a skupinovým a také volba mezi vypracováním cvičení na výukové hodině nebo v rámci domácí přípravy vždy závisí na okolnostech (čas, stav studentů, charakter úloh) 17 Postup 17.1.Úvod Na úvod je třeba seznámit studenty s cílem (seznámení s rekurzivním programováním + procvičení dalších oblastí programování) a rozsahem (cca jeden měsíc, resp. devět základních příkladů) tématu. Pokud se studenti neorientují v prostředí LMS, je potřeba věnovat čas navíc jejich seznámení s prostředím, zejména orientací v aktivitách řazených buď v tématech/týdnech nebo dle druhu (stránky/odkazy/úkoly/testy) a v přístupu k dostupným souborům ke stažení. Na úvod není potřeba opakovat požadované předpoklady, k tomu dojde u jednotlivých příkladů, navíc se předpokládá časové navázání rekurze těsně na předchozí témata programování. Doporučuji netrávit úvodem mnoho času a využít vyšší motivace u nového tématu k rychlému

vyřešení prvního tématu. 17.2.Vzájemné volání podprogramů Je vhodné nejdříve připomenout pojem volání podprogramu (funkce/procedury) na konkrétním příkladě lze využít řešení příkladu funkce9.pas, který je dostupný ze stránky Řešený příklad rekurze01.pas. V tomto příkladu by měli studenti ukázat volání obou dostupných funkcí (např. zvýrazněním kódu na interaktivní tabuli nebo množinovým zakreslením modulů programu a volání mezi nimi). Zároveň si na tomto příkladu připomenou Hornerovo schéma. Poté následuje odůvodnění možného volání podprogramů mezi sebou frontálním výkladem, jehož osnova je uvedena na stránce Proč by se měly podprogramy volat mezi sebou?. Jako jednoduchá ukázka možného volání podprogramů mezi sebou slouží řešený příklad na stránce Řešený příklad rekurze01.pas - i v něm by měli studenti najít volání podprogramů, resp. znázornit je. Pokud studenti ztrácí koncentraci, je možné výuku okamžitě oživit anketou Porovnání dvojí implementace Hornerova schématu, jinak ji lze použít až po kompilaci kódu rekurze01.pas. V úkolu Kompilace rekurze01.pas si studenti samostatně zkopírují poskytnutý kód a v něm přehodí pořadí obou podprogramů na toto přehození by si studenti měli přijít sami a měli by jej i odůvodnit učitel toto zdůvodnění graficky zvýrazní na tabuli. Následující cvičení rekurze02 je zamýšleno částečně jako domácí práce. V rámci výuky by ale mělo být provedeno minimálně prozkoumání zadání a otestování jeho částečné funkcionality. Při tom by studenti měli pod dohledem učitele provést kompilaci a krokování kódu dostupného ze zadání úkolu Cvičení rekurze02. Za podpory učitele by dále měli odhadnout funkci podprogramů (generuj_prvocisla, je_prvocislo, dalsi_prvocislo) a na základě toho navrhnout dle nápovědy v komentářích procedury vypocet její vylepšení. Zápis algoritmu je možno nechat jako domácí práci. Tímto příkladem si studenti zároveň připomenou hledání rozkladu čísla na prvočinitele, k čemuž se v následující výuce ještě vrátíme. Po odevzdání řešení rekurze02 by měl následovat rozbor cvičení dle osnovy v Poznámky a doplňující úkoly ke cvičení rekurze02. V rámci tohoto rozboru formou otázek studentům by: měl být připomenut algoritmus Eratosthenova síta realizovaný s využitím pole boolean (viz odkaz na kód bool3.pas), měly by být vyjasněny vztahy mezi součinitely rozkladu zadaného čísla (menší z obou musí být menší nebo roven odmocnině z čísla), měla by být zdůrazněna nutnost testování zadání zde je vhodné připomenout převod stringu na číselnou hodnotu, měla by být připomenuta obecná výhodnost užívání konstant (nevýhodou by mohla být zbytečně předimenzovaná datová struktura na malé hodnoty zadání) měl by být zopakován rozdíl mezi předáváním parametru hodnotou a odkazem a v tomto konkrétním příkladě zdůrazněna výhoda šetření paměti při předávání pole prvočísel odkazem. 17.3.Rekurze - vysvětlení pojmu Frontální výklad pojmu je obohacen odkazy a aktivitami. Úvodní frontální výklad by se měl držet osnovy na stránce Co to je rekurze, která obsahuje několik odkazů (včetně videa). Vzbudí-li bod o rekurzivních zkratkách zájem studentů, nabízí se tvůrčí úloha vymyslení vlastní zkratky. Na závěr výkladu by mělo být zdůrazněno pravidlo o nutnosti podmíněnosti rekurzivního volání. Úkol Zápis průběhu hádání čísla je možné spojit s výkladem Hádání čísla metodou půlení intervalů a studenty nechat provést zápis na tabuli při vysvětlování/krokování pseudokódu. Přitom je vhodné vysvětlit obě zvýrazněná místa v kódu. U odkazovaného staršího příkladu repeat9.pas je vhodné zdůraznit, že obsahuje kód pro chování počítače (tedy toho, kdo nechává hádat ), kdežto nově probíraný kód popisuje chování toho, kdo hádá. 17.4.Fibonacciho a jiné posloupnosti Toto téma obsahuje jednodušší úlohy, na kterých je představen zápis rekurze v Pascalu.

Fibonacciho posloupnost není třeba zvlášť představovat, studenti ji typicky již znají buď z předchozího studia programování nebo odjinud. Pro zájemce je na stránce O Fibonacciho posloupnosti uveden odkaz k dalšímu studiu. Je potřeba studentům zdůraznit, že rekurzivní výpočet je neefektivní. Programová realizace rekurzivního výpočtu je rozdělena do dvou částí na stránce Řešený příklad rekurze03.pas je uveden matematický zápis posloupnosti a jeho přepis do kódu v Pascalu a v úkolu Úkoly ke zpracování rekurze03.pas jsou rozepsány aktivity, které mají studenti provést. Zakreslení grafu stromu volání je vhodné předvést na tabuli, doplnění funkce o evidenci počtu volání je možné ponechat jako domácí úkol (resp. úkol na přestávku ) a realizaci alternativní funkce fib2 ponechat jako dobrovolný domácí úkol. Řešení úkolu Cvičení rekurze04 je velmi jednoduchou variantou předchozího příkladu a není vhodné jej vypracovávat skupinově. Naopak řešení Cvičení rekurze05 je relativně obtížné a vhodné pro skupinovou výuku. Je žádoucí důkladně vysvětlit posloupnost samotnou a řídit studenty při ručním výpočtu členů ve tvaru zlomků. Příklad je vhodné ponechat k dodělání na domácí práci a na následující hodině nechat vybrané studenty prezentovat jejich řešení. Před studenty by nemělo zůstat utajeno, že příklady tohoto tématu (tj. rekurze03, rekurze04, rekurze05) jsou poněkud školometské a uvedené výpočty členů posloupnosti realizované rekurzivně neefektivní. To však není při výuce na závadu naopak může být motivující ukázat na výpočtu fibonacciho čísel, že i pro nevelké zadání může trvat výpočet na špičkovém stroji velmi dlouho (je vhodné to zmínit jako důvod pro pokoru před jednoduchou úlohou starou půl tisíciletí a jako zrelativnění technické vyspělosti současných počítačů). 17.5.Cvičení na programování rekurze Oproti předchozímu tématu obsahuje (dva) příklady, kde je rekurze užita vhodně a s respektováním logiky problému. Na stránce Poznámky k cifernému součtu je odkaz na dříve řešený kód ciferného součtu pomocí celočíselných operátorů div, mod pro dělení deseti. Je vhodné tento kód připomenout. Zároveň je na této stránce vysvětlena změna zadání oproti uvedenému příkladu. Úkol Cvičení rekurze06 obsahuje zdrojový kód záměrně nešikovný, byť správný, aby vyniklo elegantní zjednodušení pomocí rekurze. Je vhodné vést u tohoto příkladu studenty frontálně. Stránka Nepřímá rekurze obsahuje výklad nepřímé rekurze a užití direktivy forward. Je žádoucí provést kompilaci a krokování uvedeného kódu. Nepřímá rekurze nicméně není v dalších příkladech užita. Kód příkladu rekurze07.pas vychází z dříve probíraného rekurze02.pas. Rozšiřuje jej z jednorázového hledání nejmenšího celočíselného dělitele zadaného čísla na úplný rozklad na prvočinitele pro zadané číslo. Svým rozsahem je kód největší z příkladů v celém kurzu a proto je mu věnována speciální aktivita test. Test není zamýšlen jako součást klasifikace studentů, studenti svůj výsledek nicméně mohou užít pro vlastní sebehodnocení. Před projitím testu je třeba na stránce Zadání testu rekurze07 seznámit studenty s kódem zadání. Studenti by při řešení testu měli mít kód otevřený ve vývojovém prostředí a měli by jej postupně upravovat s pomocí odhalení správných odpovědí na testové otázky. Při úpravě kódu budou studentům také pomáhat komentáře a místa zvýrazněná otazníky. První tři otázky směřují k pochopení programu. Od čtvrté otázky dál již studenti zároveň kód dotváří. Čtvrtá a pátá otázka napovídá k dopsání hlavního kódu programu, šestá až devátá otázka řeší vynechaná místa v proceduře rozklad. U všech těchto otázek se po odeslání odpovědi zobrazí nápovědný komentář. Na stránce Poznámky a doplňující úkoly ke cvičení rekurze07 jsou dva podněty k rozšíření kódu. Nejsou příliš složité a je vhodné je ponechat jako domácí práci. 17.6.Rekurzivní třídící algoritmy Závěrečné téma má nejen přispět k prohloubení znalostí a dovedností o rekurzi, ale i o třídění.

Oba příklady této části nejsou z toho důvodu příliš náročné na tvorbu kódu, důraz je kladen zejména na seznámení s principy probíraných algoritmů. Na stránce O třídění je tento záměr studentům naznačen a zároveň jsou zde uvedeny odkazy na dříve probírané algoritmy třídění. Je vhodné při té příležitosti nechat studenty nějaké třídění reálně provést (např. seřazení balíčku karet lze pořádat i soutěž a statisticky zaznamenávat výsledky). Jako první cvičení (rekurze08) je probírán mergesort. Ve výuce se obvykle dává v pořadí probírání přednost quicksortu, ale autor kurzu považuje opačný postup za vhodnější. Důvody se dají vyčíst ze závěrečné stránky Porovnání QuickSortu a MergeSortu. V češtině není na webu tolik kvalitních zdrojů k mergesortu jako ke quicksortu, v kurzu jsou uvedeny tři. Aplikace Algovision je velmi kvalitním výukovým nástrojem, ale bohužel na některých kombinacích typů/verzí prohlížečů a javy se nezobrazí. Jedná se o sbírku javovských appletů demonstrujících širokou paletu algoritmů, kterou vytvořil prof. Kučera na podporu výuky algoritmů na MFF UK. Video uváděné mezi odkazy může algoritmus spíše zamlžit, je tedy vhodné jej prohlížet s učitelovým doprovodným komentářem (nebo vůbec ne). Názorné naopak může být předvedení nějakého reálného třídění (balíček karet) mergesortem. Zadání úkolu Cvičení rekurze08 MergeSort není příliš tvůrčí po studentech se chce doslovný přepis vývojového diagramu do podoby zdrojového kódu. Je vhodné jej ponechat jako samostatnou (domácí) práci s tím, že učitelem (na hodině) je vysvětlen jednak algoritmus a dále je rozebrán vývojový diagram (počet podmínek, počet a typ cyklů). Na stránce Poznámky k rekurze08 jsou uvedeny dva body, oba je vhodné krátce zmínit, mají za úkol fixovat již dříve získané poznatky. Quicksort je velmi známým algoritmem a je vhodné při jeho výkladu ukázat jeho kód ještě dříve (např. na odkazovaném článku na české wikipedii), než budou studenti řešit cvičení. Je vhodné při výkladu pustit některé z odkazovaných videí/animací velmi užitečné pro připomenutí bubblesortu je Animované porovnání BubbleSortu a QuickSortu z YouTube. Při výkladu algoritmu opět doporučuji předvést reálné třídění např. balíčku mariášek v duchu "Kancelářské" parodie QuickSortu z YouTube (mimochodem - kolik listů papíru je během tohoto videa setříděno?). Na stránce Zadání cvičení rekurze09 je detailně probráno chování upravené verze quicksortu pro modelové zadání osmimístného pole. Vzhledem k tomu, že je velmi detailní, nemá smysl s ním ztrácet čas, pokud je zřejmé, že významná část studentů algoritmus již pochopila. Nicméně je potřeba studentům zdůraznit, kdy a za jakých podmínek dochází v této upravené verzi algoritmu k rekurzivnímu volání a jaká část pole má být při tom předána k dalšímu zoracování. Úkol Cvičení rekurze09 QuickSort je vzhledem ke své složitosti vhodné realizovat ve skupinách. Výsledná řešení je možno při veřejné prezentaci porovnat jak se vzorovým řešením, tak s obvyklou variantou quicksortu. Zároveň je vhodné otestovat studentská řešení speciálními případy zadání konstatntní, rostoucí a klesající posloupností. Poslední stránka Porovnání QuickSortu a MergeSortu je souhrnem celého tématu a zároveň připomenutím pojmu složitost. 17.7.Závěr Jedna z moudrých pedagogických zásad (má, tuším číslo 253) docenta Caldy zní téma necháme doznít. Držíce se této rady, je vhodné po probrání všech příkladů věnovat čas na zrekapitulování celého kurzu, zhodnocení úspěšnosti výuky jednotlivých témat a cvičení a případně vyjmenování nedosažených cílů. Zároveň by měly být zdůrazněny přesahy do jiných okruhů programování i ostatních předmětů výuky. Dle okolností je třeba uvážit, má-li následovat nějaká aktivita s klasifikačním výstupem. Doporučuji provést test s podobným charakterem, jako měla probíraná cvičení, a to po probrání více než tohoto jediného okruhu (rekurze) např. spojit test s předchozím tématem definice uživatelských typů nebo s navazujícími dynamickými proměnnými a strukturami. Alternativně lze zadat samostatný domácí programový projekt.

18 Hodnocení práce žáků V rámci výuky jsou zohledněny aktivity konané v rámci kurzu i mimo kurz. Mimo kurz je konán výše zmíněný test obsahující úlohy i z oblastí programování mimo rekurzi (hodnocený stupnicí výborný nedostatečný). V rámci kurzu je sledována aktivita a samostatnost při řešení cvičení a dodržení termínů odevzdání zadaných úkolů. 19 Doplnění a rozšíření pro zkušené studenty V rámci kurzu jsou na několika místech uvedeny rozšiřující témata pro nadané studenty (např. poznámky ke cvičení rekurze02, rekurze07, rekurze08) 20 Shrnutí/Závěr Vzhledem k termínům zadání a odevzdání závěrečné práce (v jejímž rámci vznikl kurz), které kolidovaly s reálnou výukou v prostředí, pro které je kurz určen, nebyl kurz realizován. Přes pokusy přimět čerstvé absolventy loňského maturitního semináře k projití kurzu v čase jejich prázdnin není v tomto okamžiku dostupná žádná zpětná vazba. Je vysoce pravděpodobné, že po otestování kurzu v reálných podmínkách by došlo k úpravám jeho obsahu. Prioritou by bylo v tom případě nezvětšovat příliš objem, ale vyměňovat neefektivní prvky kurzu za efektivnější. Dá se nicméně očekávat, že takto vytvořený kurz bude znamenat pozitivní přínos pro výuku programování, protože pro studenty je zpestřením výukových prostředků při zachování ostatních prvků výuky (osnova výuky, výukové metody, typická zadání úloh řešených i k procvičení, použití studentům dobře známého software, stavba i rozsah tématu jsou podobné ostatním tématům programování). Podmínkou pro pozitivní přínos je zajištění předpokládaných vstupních požadavků na studenty a dále užití kurzu pouze jako podpory běžné výuky (blended learning) a nikoliv jako samostatného kurzu.