Pavel Surynek's Academic Page | Programování I (PRM044 - Matematici)

Programování I (PRM044 - Matematici)

Hide menu   Show menu   Jump to the bottom   Print page


Cvičení se koná každé úterý od 12:20 v učebně K6 (Karlín), cvičení je určeno pro studijní kroužek matematici/59. Na této stánce budou postupně uveřejňovány informace týkající se průběhu cvičení.


Cvičení 3.10.2006
Pro získání zápočtu je vyžadována aktivní účast na cvičení, napsání zápočtové písemky a vytvoření zápočtového programu. Dále je nutné složit praktický test z programování u počítače, tato povinnost se však řeší mimo cvičení.


Cvičení 10.10.2006
Bylo zadáno několik lehkých domácích úloh: přímky v rovině, počet rozsazení, doplňování binárního čísla, tankování za letu a otáčející se stolek se skleničkami.

Na rozmyšlenou zůstaly také úlohy (trochu těžší): minimální sada závaží pro rovnoramennou váhu, když chceme vážit předměty o hmotnostech 1,2,...,n (rozmyslete variantu s kladením závaží pouze na jednu misku vah a variantu s kladením na obě misky) a velbloud vozící banány (zajímavé je především obecné řešení úlohy tj. sestrojení funkcí, které vzdálenosti přiřazují maximální počet banánů do této vzdálenosti dopravitelný a počtu banánů maximální vzdálenost, kam lze tento počet banánů dopravit).


Cvičení 17.10.2006
Domluvili jsme schůzku za účelem seznámení se s vývojovým prostředím Borland Pascal. Schůzka se bude konat ve středu 25.10.2006 v počítačové laboratoři v Karlíně (místnost K10, vedle vchodu) od 12:20.

Probíraly se domácí úlohy zadané na minulém cvičení. Opakovali jsme asymptotické porovnávání funkcí a dokazování správnosti algoritmu (zatím neúspěšně).


Cvičení 24.10.2006
Procvičovalo se porovnávání kvality algoritmů podle rychlosti (podle počtu vykonaných operací). Opakovali jsme časovou složitost v nejhorším případě (počet kroků v nejhorším případě). Zmínili jsme i očekávanou časovou složitost v průměrném případě. Zopakovali jsme asymptotické porovnávání funkcí (definice g∈O(f)) a jeho využití při zařazení algoritmu do třídy podle časové složitosti (logaritmický, kvadratický čas ...). Procvičili jsme důkaz konečnosti a parciální správnosti algoritmu na příkladu hledání NSD dvou přirozených čísel. Na rozmyšlenou zůstala otázka, "jak dlouho může běžet program na počítači s konečnou pamětí" a konečnost algoritmu za předpokladu jistého tvrzení (stejnoměrné a nestejnoměrné klesání ohodnocení konfigurace).


Pascalovská schůzka 25.10.2006
Společně jsme zkoušeli napsat program na sčítání velmi dlouhých přirozených čísel (stovky cifer). Při psaní a ladění programu jsme předvedli základní možnosti vývojového prostředí Borland Pascal 7.0 (krokování programu, sledování obsahu proměnných atd...). Samostatně pak každý psal a ladil program podle vlastního výběru. Možnosti byly buď zkusit reprodukovat program na sčítání dlouhých čísel nebo napsat program, který nalezne prostřední (vzhledem k uspořádání) ze zadaných tří čísel.


Cvičení 31.10.2006
Procvičoval se Pascal. Dělaly se základní číselné datové typy a základní prostředky pro řízení běhu programu (if-then-else, for-do, while-do, repeat-until) na jednoduchých úlohách - druhá mocnina bez násobení, druhá mocnina jen s přičítáním jedničky, nalezení největšího čísla z několika zadaných čísel (strom if-then-else), výpočet n-tého Fibonacciho čísla, sčítání zlomků a/b+c/d=x/y, kde x/y nelze krátit. Dále se procvičovaly úlohy na výpočet odmocniny (druhé, třetí) jen s použitím sčítání, odčítání, násobení a dělení a převod zadaného čísla do zvolené číselné soustavy (dvojková, trojková, šestnáctková).


Cvičení 7.11.2006
Zmínili jsme několik témat na zápočtový program. Standardní termín pro odevzdání zápočtového programu je začátek zkouškového období. Nejpozdější termín pro odevzdání zápočtového programu je konec zkouškového období. Opakovaly se úlohy na převod čísel mezi různými číselnými soustavami a počítání odmocniny jen s použitím +,-,*,/. Procvičovaly se pole - reprezentace matice, hledání sedlového prvku (předvýpočet). Na rozmyšlenou zůstalo generování permutací (všech, pořadové číslo->permutace, premutace->pořadové číslo).


Cvičení 14.11.2006
Psala se zápočtová písemka. Na následujícím odkazu je její zadání.

  • První (zápočtová) písemka 14.11.2006  (pdf formát)
  • Ve zbývajícím čase jsme se věnovali ukázkám zápočtových (i nezápočtových) programů. Příští cvičení se bude konat v počítačové laboratoři v Karlíně - cvičení bude spojeno s Pascalovskou schůzkou (čas 12:20-15:40).


    Prodloužené cvičení v laboratoři 21.11.2006
    Cvičení probíhalo od 12:20 do 15:40. Probírala se úloha násobení matic a zjišťování souvislosti grafu založené na násobení matic. Každý úlohu implementoval a ladil na počítači. Přitom se opakovaly Pascalovské konstrukce: pole, záznam, předávání parametrů hodnotou a odkazem. Zmiňovali jsme také ladící prostředky breakpoint a watch.


    Cvičení 28.11.2006
    Cvičení neproběhlo moc zdárně. Udělali jsme příliš málo práce. Zkoumali jsme problém generování všech možných permutací a jedné permutace dle pořadového čísla v lexikografickém uspořádání. Potom jsme si neformálně (intuitivně) zavedli haldu v poli a rozmýšleli jsme vkládání prvku, odebírání nejmenšího prvku a třídění pomocí haldy. Za domácí úkol je přemýšlet o postupu, jak nalézt posloupnost tahů koněm, aby navštívil každé políčko šachovnice právě jednou a problém N královen na šachovnici NxN.


    Cvičení 5.12.2006
    Podrobně jsme sepsali program na práci s haldou (procedury pro vložení prvku, odebrání nejmenšího prvku). U zkonstruovaného programu jsme zkoumali jeho časovou složitost (vložení O(log2N), odběr nejmenšího O(log2N)). Poté jsme na základě operací s haldou navrhli třídící algoritmus (heap-sort) a provedli jsme jeho časovou analýzu (O(N log2N)). Rozmýšleli jsme, jak abecedně setřídit telefonní seznam uložený v souboru. Dále jsme rozmýšleli několik úloh na prohledávání stavového prostoru (přelévání vody, šachovnice) - zatím jen logicky. Těžší úloha na závěr: navrhněte algoritmus, který najde algoritmus na řešení úlohy o vážení 12-ti kuliček pomocí rovnoramenné váhy (11 stejných, 1 jiná, chceme určit jinou).

    Na posledním předvánočním cvičení (tj. 19.12.2006) se bude psát písemka.


    Cvičení 12.12.2006
    Procvičovala se práce s řetězci a se soubory. Přehazování dvojice slov v rámci řetětce. Přehazování dvojice slov v rámci souboru. Prohledávání stavového prostoru. Úloha na přelévání vody (nádoby 5 a 3, chceme odměřit 4). Kreslení domečku jedním tahem.


    Cvičení 19.12.2006
    Psala se zápočtová písemka. Na následujícím odkazu je její zadání.

  • Druhá (zápočtová) písemka 19.12.2006  (pdf formát)
  • Ve zbývajícím čase jsme se věnovali ve stručnosti věnovali některým příkladům. Diskutovali jsme vhodnost binárních souborů pro úlohu přehození dvou řetězců v souboru (operace seek). Rychlost práce s diskem, vyrovnávací paměti, zmínka o paměťové hierarchii podle rychlosti a velikosti (registry, cache, RAM, disková cache, disk, DVDčko). Hra LIFE, popis pravidel a pracovního pole, výpočet nové situace podle pravidel. Pohybující se předměty ve hře LIFE (kluzáky). Simulace počítače ve hře LIFE (stroj sestavený z kluzáků a jiných rostoucích shluků). Příští cvičení (tj. 9.1.2007) bude prodloužené (čas 12:20-15:40) a bude se konat v počítačové laboratoři v Karlíně. Nasimulujeme si praktický zápočtový test.


    Prodloužené cvičení v laboratoři 9.1.2007
    Proběhl trénink praktického zápočtového testu. Zároveň jsme opakovali prohledávání do hloubky a do šířky - diskuse případů, kdy je vhodné jedno či druhé.



    Zápočtové povinnosti

  • Tabulka zápočtových povinností



  • Hide menu   Show menu   Jump to the top   Print page