Zadání semestrálního projektu Algoritmy I. zimní semestr 2018/2019

Podobné dokumenty
Zadání semestrálního projektu Algoritmy II. letní semestr 2017/2018

Hledání správné cesty

Hodnocení soutěžních úloh

Zadání soutěžních úloh

Regionální kolo soutěže Baltík 2008, kategorie A a B

Zdokonalování gramotnosti v oblasti ICT. Kurz MS Excel kurz 4. Inovace a modernizace studijních oborů FSpS (IMPACT) CZ.1.07/2.2.00/28.

Ovládání Open Office.org Calc Ukládání dokumentu : Levým tlačítkem myši kliknete v menu na Soubor a pak na Uložit jako.

Cvičení č. 3. Sdílené prostředky a synchronizace Program Banka. 4 body

Vzorce. Suma. Tvorba vzorce napsáním. Tvorba vzorců průvodcem

MS Excel makra a VBA

Vánoční turnaj GP Praha 2012

STATISTICA Téma 1. Práce s datovým souborem

Zdokonalování gramotnosti v oblasti ICT. Kurz MS Excel kurz 3. Inovace a modernizace studijních oborů FSpS (IMPACT) CZ.1.07/2.2.00/28.

Práce s MS Excel v Portálu farmáře a využití pro stažení dat KN z LPIS a sestav z EPH

Třídy složitosti P a NP, NP-úplnost

KAPITOLA 8 TABULKOVÝ PROCESOR

Univerzální prohlížeč naměřených hodnot

Uživatelský manuál. Aplikace GraphViewer. Vytvořil: Viktor Dlouhý

Školní kolo soutěže Baltík 2009, kategorie C

Zadání soutěžních úloh

I. Příprava dat Klíčový význam korektního uložení získaných dat Pravidla pro ukládání dat Čištění dat před analýzou

Prohledávání do šířky = algoritmus vlny

Excel - pokračování. Př. Porovnání cestovních kanceláří ohraničení tabulky, úprava šířky sloupců, sestrojení grafu

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Regionální kolo soutěže Baltík 2009, kategorie A a B

UŽIVATELSKÝ MANUÁL. pro nákup pneumatik a pneuservisních služeb.

Úvodem... 9 Kapitola 1 Karetních

Výsledný graf ukazuje následující obrázek.

Zadání soutěžních úloh

Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Jarkovský, L. Dušek, M. Cvanová. 5. Statistica

Zadání soutěžních úloh

Dirk Baumann * 1971 diplomovaný informatik a autor her. Autor: Dirk Baumann Ilustrace: Grafika/návrh: Rolf Vogt Redakce: Thorsten Gimmler

Excel tabulkový procesor

Profesis on-line Obrázky v prezentaci byly upraveny pro potřeby prezentace.

Regionální kolo soutěže Mladý programátor 2012, kategorie A, B

Up & Down Opce. Manuál. Obsah

Datum odevzdání 12. prosince Vypočtěte velikost strany čtverce ABCD s vrcholem A = [0, 0], jestliže

Algoritmizace. 1. Úvod. Algoritmus

ŘEŠENÍ PRO ŘÍZENÍ FIREM Jednání. JRV.CZ s.r.o. RosaData Jednání. Uživatelský manuál. Jiří Rouča [Vyberte datum.] JRV.CZ s.r.o. Bulharská Brno

Výukový materiál zpracován v rámci projektu EU peníze školám

Sada 2 Microsoft Word 2007

AutoPEN, Ing. Lubomír Bucek, Halasova 895, Liberec 6 autopen@volny.cz ,

Metody návrhu algoritmů, příklady. IB111 Programování a algoritmizace

Studijní skupiny. 1. Spuštění modulu Studijní skupiny

7. přednáška Systémová analýza a modelování. Přiřazovací problém

UniLog-D. v1.01 návod k obsluze software. Strana 1

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

Rámcový návod pro školitele. doktorských studijních programů

Semestrální práce 2 znakový strom

Tabulkový kalkulátor

Malý program pro EET Uživatelský manuál

CZ.1.07/2.2.00/ )

Nápověda ke cvičení 8

Řešte s námi! Dlouhodobá soutěž v řešení sudoku a logických úloh TOP 10

4EK213 Lineární modely. 12. Dopravní problém výchozí řešení

Formulář pro křížový filtr

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

Cvičení 5 - Inverzní matice

Návod na používání webmailu

Soukromá střední odborná škola Frýdek-Místek, s.r.o. VY_32_INOVACE_03_IVT_MSOFFICE_02_Excel

MANUÁL PRO UŽIVATELE WEBU ADRESÁŘ DESIGNÉRŮ

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

Školní kolo soutěže Baltík 2009, kategorie A a B

Uživatelský manuál

Podrobný návod. Učíme se používat prostředí TwinSpace

Magické čtverce. Bára Kociánová

Dodatek k manuálu service.cbf.cz - organizační pracovník klubu

Školní kolo soutěže Mladý programátor 2015, kategorie A, B

Uživatelská příručka Autor: Martin Fiala

59. ročník Matematické olympiády 2009/2010

Manuál k ovládání aplikace INFOwin.

Úvod do problematiky ÚPRAVY TABULKY

Psaní programu pro PLC SIMATIC S7-300 pomocí STEP 7

Program pro tvorbu technických výpočtů. VIKLAN - Výpočty. Uživatelská příručka. pro seznámení se základními možnostmi programu. Ing.

Návod na základní používání Helpdesku AGEL

8. Formátování. Úprava vzhledu tabulky

Tisk deníku příjmů a výdajů na jednu stranu

Vypracoval: Antonín Krumnikl Mob.: Tel.:

Pracovní prostředí Excel 2010

Obsah. Funkce grafu Zdrojová data pro graf Typ grafu Formátování prvků grafu Doporučení pro tvorbu grafů Zdroje

Návod k použití oddílového webu

Regionální kolo soutěže Baltík 2007, kategorie A a B

ON!Track webová aplikace uživatelská příručka. Webová aplikace příručka verze 1.1

Ignijet_2007 Externí monitor

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

Informační systém Národní soustavy kvalifikací (IS NSK) Návod na obsluhu interního webu - tvorba kvalifikačního a hodnoticího standardu

Dealer Extranet 3. Správa objednávek

Kombinované úlohy - cvičení

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

63. ročník Matematické olympiády 2013/2014

Manuál pro modul Vypisování témat prací oponent

Pro označení disku se používají písmena velké abecedy, za nimiž následuje dvojtečka.

Externí Helpdesk Uživatelská příručka. verze 1.00

EXCELentní tipy a triky pro mírně pokročilé. Martina Litschmannová

ZÁKLADY POŘIZOVÁNÍ TEXTU

CERTIFIKOVANÉ TESTOVÁNÍ (CT) Výběrové šetření výsledků žáků 2014

Pomůcka/manuál pro redakční systém verze 1.0

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Transkript:

Zadání semestrálního projektu Algoritmy I. zimní semestr 08/09 doc. Mgr. Jiří Dvorský, Ph.D. Verze zadání. listopadu 08 První verze Obecné pokyny. Celkem jsou k dispozici tři zadání projektů.. Každý student má přiděleno jedno zadání. Na webu předmětu Algoritmy I je zveřejněn seznam studentů a jim přiřazených zadání. Kdo by se tam případně nenašel, nechť mě neprodleně kontaktuje emailem.. Termín odevzdání je. prosince 08 :9. Tento termín je striktní, nebude dále posunován.. Projekt odevzdáváte pomocí úložiště Dropbox na URL https://www.dropbox.com/request/gcrvfeonyvjwz7uadyp. Pro odevzdání projektu není nutné mít zde založený účet.. Projekt odevzdáváte jako zip archiv s řešením (solution) pro vývojové prostředí Visual Studio 07. Jméno zip archivu bude odpovídat Vašemu loginu. Například student James Bond má login bon007, archiv se bude jmenovat bon007.zip. 6. Než projekt odešlete, vyčistěte projekt smazáním souborů vzniklých při kompilaci. Vyčištění provedete přímo ve Visual Studiu menu Build, pak Clean Solution. Takto vyčištěný projekt zabalte do zip archivu a nahrajte na Dropbox. 7. Součástí zdrojových kódů Vašeho programu bude programátorská dokumentace ve formě dokumentačních komentářů, zpracovatelných programem Doxygen, viz www.doxygen. org. Vygenerovanou dokumentaci není nutné odevzdávat, postačuje pokud Vámi odevzdaný archiv bude obsahovat konfigurační soubor doxyfile, případné adresáře pro vygenerovanou dokumentaci, vkládané obrázky atd. 8. Termíny obhajoby budou vypsány v systému Edison. 9. Řešení projektu bude hodnoceno podle následujících kritérií:

(a) správnost řešení, (b) návrh implementace (rozložení implementace do funkcí, hlavičkových a zdrojových souborů atd.), (c) styl zápisu, čitelnost, zdrojových kódů (odsazování, pojmenování proměnných, funkcí, tříd atd.) a (d) efektivita implementovaného algoritmu. Správnost řešení je podmínka nezbytná, aplikace, která nebude poskytovat správné výsledky bude hodnocena automaticky 0 body. 0. Použité zdroje je nutné správně citovat. K řešení můžete používat odbornou literaturu, učebnice, příklady zdrojových kódů z ostatních předmětů, internetové zdroje. V tom případě je nutné uvést, že Tento algoritmus jsem převzal z..., Tuto část kódu jsem převzal z.... Poznámka na závěr Úloha není tak složitá jak vypadá. Doporučuji nejprve vše pořádně rozmyslet, rozkreslit si postup rekurze, čmárat a čmárat na papír a až celou věc pochopíte, zjistíte, že jde o funkci o cca dvaceti řádcích. Čili toto zadání je delší než Váš budoucí program! Mnoho zdaru! Jiří Dvorský Smyslem tohoto kritéria není nutit Vás k implementaci nejlepšího známého algoritmu, což může být mnohdy nad Vaše síly. Úlohy můžete řešit algoritmy jednoduchými, přímočarými v tom nevidím problém. Tímto kritériem si ponechávám prostor pro případné snížení bodového hodnocení za použití algoritmu zcela nevhodného, nesmyslného.

. zadání Nalezení cesty bludištěm V tomto semestrálním projektu máte najít cestu bludištěm. Ukázkové bludiště je uvedeno na obrázku. Bludiště je sestaveno ve čtvercové síti, černé čtverečky představují zdi bludiště, bílé jsou cestičky, červený čtvereček představuje vchod do bludiště a modrý čtvereček označuje východ z bludiště. Nalezená cesta je pro ukázkové bludiště zobrazena na obrázku. V programu je bludiště zadáno čtvercovou maticí A o rozměrech N N, kde N je konstanta daná v kódu. V našem projektu je N =. Prvky matice A jsou celá čísla, reprezentuje zeď, 0 reprezentuje cestičku. Vchod a východ z bludiště nemají v matici A žádnou zvláštní hodnotu, vchod a východ jsou zadány jen souřadnicemi (,0) pro vchod a (9,0) pro východ. Cestičkami v bludišti se můžete pohybovat všemi směry: dopředu, dozadu, nahoru, dolů. Nalezenou cestu vypište na standardní výstup buď jako seznam souřadnic čtverečků, kterými prochází nalezená cesta, nebo můžete vypsat celé bludiště a cestu označit například číslem. Pokud se řešení nepodaří nalézt, ne každé bludiště musí být řešitelné, vypište o tom zprávu na standardní výstup. Poznámky Program bude pracovat z příkazového řádku, nevytvářejte žádné grafické uživatelské rozhraní. V programu stačí řešit ukázkové bludiště z tohoto zadání. Není nutné vytvářet bludiště nová. Nicméně Váš program musí být implementován tak, aby byl schopen vyřešit jakékoliv bludiště pouhou změnou matice A a konstanty N. Úlohu lze relativně snadno řešit pomocí rekurze s využitím tzv. backtrackingu. Myšlenka spočívá v tom, že jsem úspěšně provedl i tahů v bludišti a snažím se provést (i + )-ní tah. Pokud naleznu proveditelný tah, tak jej provedu. Tím jsem provedl (i + ) tahů a budu se dále snažit provést (i +)-hý tah. Jak je vidět, obě situace jsou v podstatě totožné, liší se jen množstvím již provedených tahů. Takto pokračuji dál a dál dokud nenastanou dvě možné situace:. Aktuální políčko, na kterém se nacházím je východ z bludiště. Tím je úloha vyřešena.. Z aktuálního políčka nevede žádný platný tah. V tomto případě jsem se ocitnul ve slepé uličce a jako v každém bludišti se musím vrátit o křižovatku zpět a hledat jinou cestu. V tomto případě to znamená ukončení volání funkce vykonávající i-tý tah a návrat k volání funkce pro i -ní tah. Nebo lze problém převést na graf a úlohu řešit průchodem grafu do šířky.. zadání Problém osmi dam V tomto semestrálním projektu máte vyřešit známý úkol z oblasti rekreačního šachu. Máte dánu standardní šahovnici o osmi řádcích a osmi sloupcích. Vaším úkolem je umístit na tuto šachovnici osm dam tak, aby se podle pravidel šachu vzájemně neohrožovaly. Úlohu lze zobecnit na hledání rozestavení n dam na šachovnici n n. Nicmémě, pro náš projekt stačí nalézt jedno řešení pro šachovnici 8 8. Jedno z možných řešení problému osmi dam je zobrazeno na obrázku. Celkově pro šachovnici 8 8 lze nalézt 9 řešení.

0 6 7 8 9 0 6 7 8 9 0 6 7 8 9 0 0 6 7 8 9 0 6 7 8 9 0 6 7 8 9 0 Obrázek : Ukázkové bludiště černé čtverce označují stěny bludiště, bílé jsou cestičky, červená buňka označuje vstup do bludiště, modrá východ

0 6 7 8 9 0 6 7 8 9 0 6 7 8 9 0 0 6 7 8 9 0 6 7 8 9 0 6 7 8 9 0 Obrázek : Cesta v bludišti zelené čtverečky označují nalezenou cestu

8 0Z0l0Z0Z 7 Z0Z0Z0l0 6 0ZqZ0Z0Z Z0Z0Z0Zq 0l0Z0Z0Z Z0Z0l0Z0 qz0z0z0z Z0Z0ZqZ0 a b c d e f g h Obrázek : Řešení problému osmi dam Poznámky Program bude pracovat z příkazového řádku, nevytvářejte žádné grafické uživatelské rozhraní. Pro splnění zadání stačí, pokud Váš program nalezne jedno řešení. Velikost šachovnice zadejte v programu jako konstantu ve zdrojovém kódu. Váš program by měl umět vyřešit úlohu i pro jiné velikosti šachovnice než 8 pouhou změnou této konstanty. Nalezené řešení vypište ve vhodné formě na standardní výstup. Úlohu lze relativně snadno řešit pomocí rekurze s využitím tzv. backtrackingu. Z pravidel šachu je jasné, že v každém řádku a v každém sloupci může být jen jediná dáma. Je nutné ale dořešit situaci tak, aby se dámy neohrožovaly po diagonálách. Myšlenka algoritmu řešení spočívá v tom, že se snažím postupně umisťovat dámy na další a další řádky. Mámli úspěšně umístěny dámy na řádcích až i, budu se snažit umístit dámu na řádek i + do ještě neohrožovaného sloupce. A zde mohou nastat dvě situace:. všechny sloupce jsou ohrožované tady je potřeba brát v úvahu, že šachová dáma ze své pozice ohrožuje i dvě diagonály a dámu na (i + )-ním řádku není kam umístit. Tím se řešení ocitlo ve slepé uličce a musím se vrátit o krok zpět a vyzkoušet jiné umístění dámy na řádku i nebo. nalezl jsem první neohrožovaný sloupec, umístím do něj dámu a pokračuji v řešení pro (i +)-hý řádek. Jakmile takto úspěšně umístím osmou, obecně n-tou, dámu mám úlohu vyřešenou. Než se pustíte do vývoje algoritmu, který řeší umísťování dam, rozmyslete si, jak bude ve Vašem programu reprezentovat informaci, že dané pole na šachovnici je ohrožováno nebo ne. A jak budete tuto informaci aktualizovat, když: na šachovnici přibude nová dáma a ze šachovnice byla dáma odstraněna (při návratu ze slepé uličky řešení). 6

. zadání Číselné bludiště Vaším úkolem v tomto projektu je implementace programu řešícího hru zvanou Číselné bludiště. Zadání hry tvoří čtvercová mřížka čísel, viz obrázek. Úkolem je nalézt cestu ze startu v levém horním rohu mřížky do cíle v pravém dolním rohu mřížky. Povolený tah spočívá ve skoku o tolik políček, kolik udává číslo v políčku na kterém právě stojíme. Skákat se může pouze vodorovně nebo svisle. Skok mimo mřížku samozřejmě není přípustný. Na každé políčko lze skočit právě jednou. Na obrázku nalezená cesta znázorněna zelenými šipkami. a b c d e Cíl Obrázek : Číselné bludiště Poznámky Program bude pracovat z příkazového řádku, nevytvářejte žádné grafické uživatelské rozhraní. Velikost číselného bludiště bude zadána uživatelem z příkazového řádku. Předpokládejte vždy správný vstup, rozsah povolených hodnot je od do 0. Číselné bludiště si program sám náhodně vygeneruje. Číselnou mřížku vypište na standardní výstup. A následně se pokusí toto bludiště vyřešit. Pokud program řešení úlohy nalezne, vypíše nalezenou cestu ve formě souřadnic políček přes které nalezená cesta vede. V ukázkovém případě: a, a, d, d, b, e, e. Pokud se řešení nepodaří nalézt, ne každé číselné bludiště má řešení, vypíše program na standardní výstup o tom zprávu. Úlohu lze relativně snadno řešit pomocí rekurze s využitím tzv. backtrackingu. Myšlenka spočívá v tom, že jsem úspěšně provedl i tahů v bludišti a snažím se provést (i + )-ní tah. Pokud naleznu proveditelný tah, tak jej provedu. Tím jsem provedl i + tahů a budu se dále snažit provést (i +)-hý tah. Jak je vidět, obě situace jsou v podstatě totožné, liší se jen množstvím již provedených tahů. Takto pokračuji dál a dál dokud nenastanou dvě možné situace: 7

. Aktuální políčko, na kterém se nacházím je pravý dolní roh bludiště. Tím je úloha vyřešena.. Z aktuálního políčka nevede žádný platný tah, všechny možné tahy vedou buď mimo mřížku bludiště nebo vedou na políčka, kde jsem již skákal. V tomto případě jsem se ocitnul ve slepé uličce a jako v každém bludišti se musím vrátit o křižovatku zpět a hledat jinou cestu. V tomto případě to znamená ukončení volání funkce vykonávající i-tý tah a návrat k volání funkce pro (i )-ní tah. 8