Tento text ke kurzu PPA2 má podle formy studia plnit různé úkoly. V kombinovaném studiu je použit pro distanční způsob studia s využitím dalších prostředků systému EDEN. V prezenční formě studia je studijní pomůckou, která má napomoci při studiu, není však náhradou za přednášky a cvičení.
Celý kurz je postavem na zásadě od jednoduššího ke složitějšímu, od specielního k obecnějšímu, od neformálního k formálnímu. Z toho plyne, že nejvhodnější a doporučená následnost studia je v pořadí kapitol od první k poslední. Student je nabádán, aby se snažil porozumět především samotné studované problematice, což jsou algoritmy a datové struktury. Až pak logicky následují, podle mínění autora ovšem neméně důležité, analýza jejich vlastností a implementace.
Pro analýzu vlastností algoritmů, jakož i hledání mezí jejich použití, jsou nevyhnutné matematické prostředky. V kurzu nám jde o jejich použití na formulování matematického úkolu jehož vyřešením získáme hledanou vlastnost. Samozřejmě, v mnoha případech předpokládané znalosti z matematiky jsou dostačující nejen k formulaci problému, ale i k jeho vyřešení.
V teoreticky orientovaném kurzu by bylo možno od implementace algoritmů na počítači upustit, což však není náš přístup. Implementace algoritmů v programovacím jazyce podporuje jejich porozumění a vede k získaní zručností nevyhnutných pro tvorbu programů, kterým říkáme programovací styl. Většinu těchto zručností lze získat použitím jakéhokoliv jazyka a je nutné, aby si tohoto faktu byl student vědom. Některé však umožní jenom objektově orientované jazyky. Z nich je v současnosti pro výuku nejvíce používán jazyk Java a je to volba i tohoto kurzu. Student si však může zkusit implementovat uvedené algoritmy i v jiných jazycích, například Pascal, C, C++ nebo C#, samozřejmě někdy až po nahlédnutí do manuálu příslušného jazyka.
Úkoly v tomto textu jsou obsahově totožné s povinnými úkoly v prezenčím studiu. Další úkoly pro procvičení problematiky jednotlivých kapitol budou zveřejněny na stránce předmětu. Upozorňuji, že pro prezenční formu studia, se připravují formální požadavky na povinné úkoly tak, aby ověření odevzdaných programů bylo automatizovatelné.
Za pomoc při přípravě textů a obrázků k úlohám děkuji A. Netrvalové. Poděkování patří také mé ženě za nakreslení mnoha obrázků. V neposlední řadě patří poděkování týmu eLearningu na ZČU za technickou spolupráci při přípravě tohoto textu.
Text vznikl na základě přednášek předmětu PPA2 v letním semestru akademického roku 2003/04, kdy běžel v tomto tvaru poprvé. Záměrem autora bylo, aby celý text byl studentům k dispozici na začátku dašího semestru, a tedy čas na jeho přípravu byl velice omezený. Text je tedy předkládán jako výchozí interní materiál pro předmět PPA2, chcete-li alfa verze pro další vývoj. Text z uvedených důvodů zatím neprošel jazykovou ani odbornou korekturou. Autor bude vděčen každému, kdo pomůže k dalšímu vývoji a to bezprostředně v těchto oblastech:
1. Srozumitelnost. Jde o identifikaci těžce srozumitelných vět nebo odstavců s případným návrhem na korekci.
2. Správnost programů nebo jejich fragmnetů. Každý program nebo jeho část byla testována. Jenomže testování nezaručí správnost. Navíc tyto programy byly připraveny dříve než začala tvorba tohoto textu a musely být editovány tak, aby se vešly do plochy vyhrazené pro text nebo obrázek.
3. Správnost matematických výrazů, obrázků a jejich zařazení v textu. Jde zejména o to, že tyto byly přenášeny z různých prostředí, přičemž často přenos některých znaků, indexů a exponentů nebyl možný a musel být následně ručně korigován.
Do další verze autor doplní komentář, výchozí zdroje a zdroje pro další studium. Také budou do této formy doplněny zmíněné náměty na další cvičení. Předpokládá se také zpřístupnění zdrojových textů.
Po uzavření těchto prací, což neznamená nevyhnutně konečný stav, nýbrž jenom posun k další verzi, autor uvítá pomoc pro technické práce jako je grafika obrázků, alternativní formát textu ap. Autor uvítá samozřejmě každý jiný návrh pro zlepšení tohoto textu.
Cíle
Porozumět problematice počítačů a programování jako prostředkům pro řešení problémů.
Pochopit základní algoritmy, naučit se je analyzovat, implementovat a používat na řešení problémů.
Být si vědom hranic algoritmické řešitelnosti problémů na straně jedné a zládnutelnosti algoritmicky řešitelných problému současnými počítači na straně druhé.
Získat alespoň intuici o vztahu k dalším disciplínám informatiky jako jsou architektura počítačů, softwarové inženýrství, informační sytémy, teoretická informatika a jejich oblastem jako jsou operační systémy, překladače, grafika atd.