mff

Markéta Popelová - Výuka

Programování 1

Aktuální informace - Programování 1



6. hodina (8.11.2012)

  • Testík: Řešení
  • Práce s textem
    • EOF, EOLN, načítání po znacích a po řetězcích
    • Opisování vstupu: Opisovač vstupu
    • Jednoduchý devypatlátor: Jednoduchý devypatlátor. Chcete-li se podívat, že takové programy opravdu existují a umí i překvapivě "sofistikované" převody, podívejte se na tento.
    • Poznámka o CR LF na koncích řádků
  • Převody soustav
    • Načítání čísla v desítkové soustavě po znacích pomocí tzv. Hornerova schematu: Hornerovo schema
    • Načítání čísla ve dvojkové soustavě (pomocí téměř stejného kódu): Z dvojkove
    • Převedení čísla do dvojkové soustavy - analogie s algoritmem na vypisování (desítkových) cifer od konce
    • Zobecnění obou převodů pro soustavy s vyšším základem
  • Ladění v Pascalu
    • Watches (Add Watch... Ctrl+F9) - na sledování proměnných
    • Breakpoints - na zastavení běhu na určité řádce
    • Step over (F8) - na krokování (ale bez zanořování do podprogramů)
    • Trace into (F7) - na krokování (včetně zanořování do podprogramů)
    • Run (Ctrl+F9) - klasické spuštění programu; pokud jste někam dali breakpoint, zastaví se běh na prvním z nich
    • Go to cursor
    • Reset program
    • Chcete-li si o možnostech vývojového prostředí Pascalu přečíst více, můžete si přečíst O IDE Pascalu
  • Zápočťáky
    • Projděte si sekci ZÁPOČŤÁKY, můžete se tam inspirovat návrhy na téma zápočťáku (či si ještě lépe vymyslet vlastní), přečtěte si, co je to specifikace, dokumentace, testovací data a ostatní informace.
    • Během následujících dvou týdnů byste si měli vymyslet téma svého zápočťáku a zkonzultovat ho se mnou.
    • Pak k němu sepište specifikaci a pošlete mi ji. Nejzazší termín, do kdy mi musí specifikace (schváleného tématu) dorazit, je 30.11.
    • Zkuste si práci na zápočťáku rozložit tak, abyste ho měli ideálně hotový před zkouškovým. Počítejte s tím, že některé zápočťáky budu chtít vidět s osobním předvedením. Poslední termín možnosti odevzdání čehokoliv k zápočťáku, je 7.3.2012.
  • Pomalý úvod do rekurze
    • Základní myšlenka: uvnitř podprogramu (procedury či funkce) je volán ten samý podprogram. Tomuto se říká rekurzivní volání. Aby program také někdy skončil, musíte zaručit, že se nebude volat donekonečna, ale každá větev bude ohraničena tzv. ukončující podmínkou. Osobní rada: nejpraktičtější je psát tuto ukončující podmínku na začátek programu.
    • Motivační úlohy: na úřadech (lineární rekurze) a štípání polínek (větvící se rekurze).
    • Dva jednoduché (lineární) rekurzivní výpisy: výpis čísel od 1 do N Rekurzivní výpis sestupný a N do 1Rekurzivní výpis vzestupný.
    • Do příště si můžete rozmyslet, jak pomocí rekurze generovat čísla o C cifrách v soustavě S.
Domácí úkol povinný: 2x CodEx + 1x Mail

Součástí úkolu na příští úlohu jsou tři úlohy:

  • CodEx: PPPPP Počet znaků v souboru. Nevšimla jsem si, že je k tomu potřeba práce se soubory, která ještě nebyla na cvičení (ale na přednášce snad ano). Proto budete mít deadline na tuto úlohu posunutý o den a můžete využít následující "manuál" pro práci se soubory:
    • Datový typ text, tzn. var f: text: pro práci se soubory se používají proměnné buď typu text nebo file. Zde vám bude stačit ta první - neboť budeme pracovat s textovým souborem.
    • Příkaz assign(f, cesta): tím řeknete, s jakým souborem se má proměnná f pojit - tedy jsou má adresu. Tu zadáte pomocí proměnné cesta: buď relativně (např. 'vstupy\in.txt', či jen 'in.txt'), nebo absolutně (např. 'C:\in.txt').
    • Příkaz reset(f): otevře soubor f pro čtení.
    • Příkaz rewrite(f): otevře soubor f pro zápis - s tím, že pokud už existoval, tak ho přepíše.
    • Příkaz append(f): otevře soubor f pro zápis - s tím, že pokud už existoval, tak to k němu připojí.
    • Příkaz close(f): zavře soubor f - nezapomeňte vždy všechny soubory zavřít.
    • Příkaz EOF(f): konec vstupu souboru f.
    • Příkaz EOLN(f): konec řádky souboru f.
    • Příkaz read(f,x): načtení (jednoho znaku/čísla/řetězce/... - dle datového typu x) ze souboru f do proměnné x.
    • Příkaz write(f,x): zapsání hodnoty proměnné x do souboru f.
    • Ukázka práce se soubory: Soubory 1 (bez souborů, tzn. čtení ze std. vstupu, zápis na std. výstup), Soubory 2 (čtení ze souboru, zápis na std. výstup), Soubory 3 (čtení ze souboru, zápis do souboru), Soubory 4 (výpis kódů všech znaků do souboru).
  • CodEx: PPPPP 3.6 Soustavy
  • Dále si stáhněte tento soubor: Ladění v Pascalu. Ozkoušejte si na něm ladící prostředky Pascalu a pomocí nich najděte, co dělá program asi špatně a hlavně proč a jak to opravit.

Termín: do 14.11. (první úloha až do 15.11.) (23:59) za plný počet bodů, či do 21.11. (23:59) za poloviční.

Domácí úkol opravný (za testík): Frekvenční analýza textu

Termín: do 21.11. (23:59).

Tzv. "Větší písemka" 3.1.2013

Na první lednové hodině 3.1.2013 budeme psát závěrečnou větší písemku (pozor, to není ta zápočtová, na kterou se budete hlásit přes SIS a podrobnější informace k ní dostanete od Vašich přednášejících.) Budete na ni mít čas celé cvičení. Bude na počítačích, tedy ne klasicky jako malé testíky na papír. Měla by být lehčí než ta zápočtová, také na ni bude méně času - ale tématicky podobná. Což je výhodné především z toho důvodu, že učením se na ni tzv. "zabijete dvě mouchy jednou ranou". Neboť o to kratší bude Vaše příprava na zápočtový test (ale ten nepodceňte!). Napsat tuto písemku, je nutná podmínka k zápočtu.

Komu se nepodaří napsat správně písemku na první lednové hodině, ten bude mít ještě možnost si to opravit. Ale samozřejmě ne zadarmo. Dostane dvě větší úlohy, které bude muset vypracovat. Ovšem pro každého budou pevně zadané a nebudou patřit k těm nejlehčím. Tedy doporučuji se na tuto možnost nespoléhat.

A ještě je tu jedna možnost, jak se této písemce "vyhnout". Abyste měli, jak se na písemku připravovat, máte v CodExu zadaných 5 úloh označených jako "Předpracování písemky 3.1.2013.". Zkuste si všechny z nich projít, promyslet a co nejvíce z nich si zkuste i napsat. No - a jak si je budete zkoušet napsat, tak když libovolné dvě z nich dovedete do funkčního stavu včetně slovního popisu řešení v úvodu a dostatečných komentářů, můžete je odevzdat do CodExu - a pokud budou správně, nebudete muset psát tu lednovou písemku. (Resp. si ji napsat můžete, abyste si to zkusili, ale povinnost k zápočtu budete mít už splněnou.) Ovšem pozor, na každou úlohu máte povolená nejvýše 3 odevzdání, takže si prvně pořádně zkontrolujte, zda Vám úloha funguje na vzorovém vstupu a i na dalších vstupech, které vymyslíte. Termín pro odevzdání těchto úloh do CodExu je 31.12.2011 (23:59) (nenechávejte je na poslední chvíli - byla by škoda programovat o Silvestru ;)). Pokud vyřešíte například jednu úlohu ze dvou, budete to mít jako bonus k lednové písemce.

Doporučuji všem na lednovou písemku dorazit. I kdybyste měli "předpracováno" dostatek na zápočet, tak si zkusíte, jaké je to psát program v časově omezeném prostoru a mimo pohodlí domova/koleje. Zároveň tam s Vámi mohu probrat Vaše chyby z doma vypracovaných úloh.

© Markéta Popelová 2009 - 2012