mff

Markéta Popelová - Výuka

Programování II.

Zápočtový program - Programování II.


Co by měla obsahovat specifikace zápočtového programu?

  • Téma (název)
  • Vstupy, resp. ovládání programu. Je-li vstupem nějaký text či čísla, je dobré se zamyslet nad formátem tohoto vstupu a tuto představu napsat již do specifikace. Přičemž detaily jdou později pozměnit. Pokud je program naopak např. nějaká hra, tak se zde očekává popis ovládání této hry (klávesy, myš apod.).
  • Výstupy, resp. chování programu. To znamená, co bude program dělat a jak se to uživatel dozví.
  • Hrubá myšlenka toho, jak to chcete řešit.
  • Dává-li to smysl a máte-li o tom představu, tak určitý odhad toho, jak bude program "dobrý" či "rychlý". Tedy například u hry Mastermind program vyřeší každý vstup do 10 tahů. Nebo implementovaný algoritmus bude mít časovou složitost O(n2). Zde neslibujte nemožné, ale zároveň se cení, když máte chuť vytvořit něco dobrého/nového apod. Nicméně zároveň zde můžete rovnou předem napsat určitá omezení, jako například, že nezaručujete optimální/vyhrávající strategii apod.

Především si dejte pozor na dvě věci - pokud toho naslibujete ve specifikaci málo, pravděpodobně Vám ji neuznám (je dobré se předem dohodnout na tom, co všechno by to mělo umět - nebo poslat specifikaci včas). No a pokud toho naslibujete naopak moc, je to možná ještě horší. Neboť všechno z toho, co je slíbeno ve specifikaci, musí v programu být. =)

Proč vůbec psát specifikaci

Proč tolik zdánlivých formatit? Jelikož zápočtový program je jedna z hlavních částí zápočtu a měl by pěkně završit vše, co jste se v semestru naučili, není dobré ho podceňovat. A jelikož jeho vytvoření netrvá hodinu ani den, ale více, je dobré předem vědět, že jdete správnou cestou. Že Vaše veškerá práce nebude zbytečná. Že pokud splníte podmínky, které si předem vymyslíte (resp. se mnou dohodnete), tak splníte i zápočtový program. Je to tedy určitá pojistka pro Vás i pro mne.

Ukázkové specifikace:

Nejdříve jedna kratší (té by neuškodilo, kdyby některé části byly specifikované přesněji):

Kartotéka

Jednoduchý databázový program simulující kartotéku s kartičkami obsahujícími zadanou sadu položek. Kartotéka bude odpovídat seznamu žáků školy. Na každé kartičce pak bude napsáno jméno, příjmení,adresa, třída, známky z hlavních předmětů (český jazyk, matematika, anglický jazyk) a poznámka (chování, účast na soutěžích, atd.).

Operace: vložení, zrušení a změna kartičky, přidání nebo zrušení položky na všech kartickách, ukládání a načítání kartotéky do souboru a ze souboru, vyhledávání a filtrování (provádení libovolné operace pouze na vybrané množině kartiček).

Pak jedna delší (a trochu složitější):

Rozpoznávání jazyka

Stručná anotace

Program v jazyce Pascal bude rozpoznávat jazyk vstupního textu na základě statistických metod (frekvence výskytu znakových unigramů, bigramů a trigramů).

Přesné zadání

Program se bude skládat ze dvou částí: trénování statistik na trénovacích souborech a následně určení jazyka zadaného textu pomocí porovnávání jeho statistiky frekvence znakových unigramů, bigramů a trigramů s natrénovanými statistikami jednotlivých jazyků. Bude využita jedna z porovnávacích metrik, možná by mohlo být využito metrik několik - pro srovnání jejich úspěšnosti.

Program by mohl být schopen rozpoznat i některé jazyky, které nepatří přímo mezi klasické jazyky. Tím jsou myšlena různá (dostatečně odlišná) nářečí, ale i třeba jen různá kódování.

Standardně bude natrénováno několik základních evropských jazyků (angličtina, němčina, francouzština a italština), několik slovanských (čeština a slovenština) a různé další (např. arabština, ostravské nářečí, atd.). Uživatel si bude moci nechat natrénovat libovolné další jazyky. K tomu bude potřebovat dodat jen trénovací texty. Aby bylo určování úspěšné, záleží samozřejmě na délce trénovacích (ale i testovacího) textů, nicméně už i na krátkých trénovacích textech (okolo 1 A4) by mohly být výsledky poměrně úspěšné. Ale čím delší, tím lepší.

Program bude obecně řádkový (tzn. bez grafického prostředí, které by bylo k tomuto typu úlohy poměrně zbytečné). Pomocí parametrů se budou moci nastavovat různé vlatsnosti. Tedy např. (interaktivní) výběr jazyků, které se mají testovat, formát výpisu (quiet/verbose/normal), váhy pro vážený průměr jednotlivých metod (unigramy/bigramy/trigramy), případně volba metriky, atd.

Vnitřní data budou reprezentována pravděpodobně pomocí hashovací tabulky (výhodné především pro trigramy, ale možno i u unigramů a bigramů). Vytvořené statistiky k jednotlivým jazykům se budou zapisovat do souborů.

Navíc by mohl program kromě trénování a testování mohl mít ještě jednu vlastnost - vytváření tzv. Confusion table pro porovnání úspěšnosti jednotlivých metod. Bylo by předem připravené větší množství testovacích souborů (ale možno dodat i další či jiné), na kterých by program otestoval jejich jazyky pomocí jednotlivých metod - a v Confusion table by se zobrazilo, kolikrát určil jazyk dobře a pro které jazyky se spletl a jak.

© Markéta Popelová 2009 - 2012