
Radek Pelánek
Radek Pelánek
Radek Pelánek
Obálka: Martin Sodomka
Odpovědný redaktor: Martin Herodek
Technický redaktor: Jiří Matoušek
Objednávky knih: http://knihy.cpress.cz www.albatrosmedia.cz eshop@albatrosmedia.cz bezplatná linka 800 555 513 ISBN 978-80-251-3751-2
Vydalo nakladatelství Computer Press v Brně roku 2012 ve společnosti Albatros Media a. s. se sídlem Na Pankráci 30, Praha 4. Číslo publikace 16 440. © Albatros Media a. s. Všechna práva vyhrazena. Žádná část této publikace nesmí být kopírována a rozmnožována za účelem rozšiřování v jakékoli formě či jakýmkoli způsobem bez písemného souhlasu vydavatele.
1. vydání
2Prˇehledpojmu˚
2.1Slozˇitost................................17
2.2Rekurzeametodarozdeˇlapanuj..................18
2.3Dynamicke´programova´nı´......................19
2.5Hruba´sı´laaheuristiky........................20
2.6Grafyastavove´prostory.......................21
2.7Objektoveˇorientovane´programova´nı´...............21
2.8Grafika.................................22
3Pocˇı´ta´nı´scˇı´sly
3.1Hra´tkyscˇı´sly.............................25
3.4Na´hodna´procha´zka.........................30
3.5Deˇlitelnostaprvocˇı´sla........................31
3.6Reprezentacecˇı´sel...........................34
3.7Fibonaccihoposloupnost.......................35
3.8Pascalu˚vtroju´helnı´k.........................36
3.9Vy´pocˇet
3.10Permutace,kombinace,variace...................40
4Obra´zkyageometrie
4.4Sierpi
4.5Bitmapova´grafika...........................52
4.6Mandelbrotovamnozˇina.......................54
5.1Analy´zaaimitacetextu........................63
5.2Transpozicˇnı´sˇifry...........................66
5.3Substituceako´dova´nı´........................69
5.4Rozlomenı´sˇifer............................70 5.5Prˇesmycˇky...............................73
6.2Prˇele´va´nı´vody............................77
6.3Hanojske´veˇzˇe.............................79
6.4Pokry´va´nı´mrˇı´zˇky...........................82
6.5Hleda´nı´cestvbludisˇti........................83
6.6Generova´nı´bludisˇt’..........................84
6.7Rozmist’ova´nı´figurnasˇachovnici..................86
6.8Jaknavsˇtı´vitvsˇechnapolemrˇı´zˇky?.................89
6.9Polyomina...............................91
6.10Sudoku.................................94
6.11Sokoban................................97
7Hry
7.1Ka´men,nu˚zˇky,papı´r.........................100
7.2Ha´da´nı´cˇı´sla..............................102
7.3Obeˇsˇenec................................103 7.4Logik..................................105
7.5HraNim................................107
7.6Tetris..................................108
7.7Jednorozmeˇrne´pisˇkvorky......................110
7.8Pisˇkvorky...............................111
7.9Soubojevirtua´lnı´chrobotu˚......................112
8Klasicke´informaticke´proble´my117
8.1Rozmeˇnˇova´nı´mincı´..........................117
8.2Simula´torhryZ ˇ ivot..........................119
8.3Proble´mysrˇeteˇzciaposloupnostmi................122
8.4Experimentysrˇadicı´mialgoritmy..................123
8.5Vyhodnocova´nı´vy´razu˚........................125
8.6Grafove´algoritmy...........................127
9Dalsˇı´na´meˇty
9.1Generova´nı´atransformaceobra´zku˚................131
9.2Blı´zke´body..............................132
9.3Akcˇnı´hry................................133
9.4Implementacedatovy´chstruktur..................134
9.5Implementacematematicky´choperacı´...............134
9.6Zpracova´nı´aanaly´zarea´lny´chdat.................135
9.7Interpretjednoduche´hoprogramovacı´hojazyka.........135
10Vybrana´rˇesˇenı´
10.1Pocˇı´ta´nı´scˇı´sly.............................138
10.2Obra´zkyageometrie.........................143
10.3S ˇ ifrova´nı´apra´cestextem......................149
10.4Logicke´u´lohy.............................152
10.5Hry...................................161
10.6Klasicke´informaticke´proble´my...................167
Rejstrˇı´k
Tatoknihavycha´zı´zmy´chzkusˇenostı´sprogramova´nı´mvneˇkolikarolı´ch.
Vrolistudentajsemzasvu˚j„programa´torsky´zˇivot“prosˇelmnohaprogramovacı´mijazyky.Jakonejlepsˇı´zpu˚sobucˇenı´programovacı´hojazykamivzˇdy prˇisˇlametoda„skocˇitdovodyaplavat“,tedyvzı´tsizajı´mavy´,prˇimeˇrˇeneˇna´rocˇny´proble´m,tenzkusitvyrˇesˇitapotrˇebne´veˇciseucˇitzabeˇhu.C ˇ astomi prˇisˇlona´rocˇneˇjsˇı´vymysletsizajı´mave´zada´nı´,nezˇnajı´trˇesˇenı´konkre´tnı´ch technicky´chproble´mu˚,naktere´jsempakprˇirˇesˇenı´narazil.
Jakoucˇitelma´mpodobnouzkusˇenost.Sdı´lcˇı´mitechnicky´miproble´my siveˇtsˇinoustudentizvla´dnouporadit,du˚lezˇite´jeprˇedevsˇı´mprˇedlozˇitjim vhodny´proble´m–proble´m,ktery´proneˇbudeadekva´tneˇobtı´zˇny´asoucˇasneˇ budeneˇjaky´mzpu˚sobemzajı´mavy´,takzˇejebudebavit.Podobneˇjetoivprograma´torsky´chsouteˇzˇı´ch,ktery´chjsemsemnohokra´tu´cˇastnilvrolisouteˇzˇı´cı´ho iorganiza´tora.Zajı´mavousouteˇzˇdeˇlajı´dobrˇevybrane´proble´my.
Vevsˇechteˇchtorolı´chjsemsesetkalscelourˇadouzajı´mavy´chprˇı´kladu˚, alevzˇdy,kdyzˇneˇjaky´potrˇebuji,musı´mslozˇiteˇvzpomı´natnebohledat.Dobry´chucˇebnicprogramova´nı´existujespousta,aleveˇtsˇinoukladoudu˚razna konkre´tnı´jazyknebodetailnı´rozbordı´lcˇı´chalgoritmu˚,prˇı´kladu˚vnichby´va´ jenpa´r.Rozsa´hla´sbı´rkazajı´mavy´chprˇı´kladu˚mivzˇdychybeˇla.Protojsemse pokusiljivytvorˇitapevneˇveˇrˇı´m,zˇebudeuzˇitecˇna´nejenpromeˇ.
Knihaprˇı´mocˇineprˇı´mocˇerpa´zvelke´homnozˇstvı´zdroju˚azkusˇenostı´. Kromeˇteˇchlitera´rnı´ch,ktere´jsouuvedenyvseznamuliteratury,jdehlavneˇ oprograma´torske´souteˇzˇeavy´uku.Velkoumeˇroucˇerpa´mzezkusˇenostı´sprograma´torsky´misouteˇzˇemiazprˇı´kladu˚,ktere´jsemnateˇchtosouteˇzˇı´chpoznalcˇi proneˇnavrhl.Konkre´tneˇjdeosouteˇzˇACMICPCajejı´cˇesko-slovenskouverzi CTUOpen,programa´torskouolympia´du,korespondencˇnı´semina´rˇezprogramova´nı´afakultnı´souteˇzˇFIbot.
Cenne´zkusˇenostijsemzı´skalprˇivy´uceprograma´torsky´chprˇedmeˇtu˚na FakulteˇinformatikyMU,prˇedevsˇı´mpakprˇivedenı´prˇedmeˇtuIV104Semina´rˇ rˇesˇenı´programa´torsky´chu´loh.Nastudentechtohotoprˇedmeˇtujsemmnoho
zdeuvedeny´chprˇı´kladu˚testovalajejichpozorova´nı´mjsemzı´skalzkusˇenosti oobtı´zˇnostiapedagogicke´vhodnostijednotlivy´chu´loh.
Tatoknihatake´cˇa´stecˇneˇvycha´zı´kme´prˇedchozı´knihy„Jaktovyrˇesˇit?“, ktera´sezaby´va´logicky´miu´lohamiajejichvyuzˇitı´mprˇivy´uceinformatiky. C ˇ a´stprˇı´kladu˚uvedeny´chzdevkapitola´chologicky´chu´loha´chahra´chvycha´zı´ zte´todrˇı´veˇjsˇı´knihy.
Chteˇlbychtedypodeˇkovatvsˇem,kdoorganizovaliuvedene´souteˇzˇe,u´cˇastniliseme´vy´ukycˇipoma´halisprˇı´pravouprˇedchozı´knihy,zajejichprˇı´nospro tutoknihu,byt’neveˇdomy´aneprˇı´my´.Konkre´tneˇbychchteˇlpodeˇkovatPetrovi JarusˇkoviaJanoviRyglovizakomenta´rˇekdı´lcˇı´mcvicˇenı´m.MartinHerodek znakladatelstvı´ComputerPresspomohlknihuvylepsˇitpoobsahove´itypograficke´stra´nce.Podeˇkova´nı´take´patrˇı´mojı´zˇeneˇBarcˇezajejı´vytrvaloupodporu nejenprˇipsanı´.
RadekPela´nek
Myslnenı´na´doba,kteroujepotrˇebanaplnit,aleohenˇ,ktery´jepotrˇeba zapa´lit.
Abysecˇloveˇknaucˇilprogramovat,musı´senaucˇitza´kladnı´prˇı´kazyapostupy (trochumysl naplnit),prˇedevsˇı´mvsˇakpotrˇebujehodneˇtre´novat,zkousˇetaprocvicˇovat.Abyutohotre´nova´nı´cˇloveˇkvydrzˇel,meˇlbyby´t zapa´leny´.Jenzˇena cˇemtre´novatprogramova´nı´,abytobylozajı´mave´?Naprogramova´nı´rozsa´hly´ch,praktickyuzˇitecˇny´chprogramu˚zacˇa´tecˇnı´kjesˇteˇnema´aucˇebnicove´ prˇı´kladyjsoucˇastonudne´,takzˇeunichcˇloveˇknevydrzˇı´.
Ktomupra´veˇslouzˇı´tatokniha–poskytujena´meˇtynazajı´mava´programa´torska´cvicˇenı´,slouzˇı´cı´kprocvicˇenı´atre´ninku.Prˇı´kladyjsouvolenytak,aby bylyatraktivnı´azajı´mave´,takzˇecˇloveˇka,ktery´ma´alesponˇtrochuinformaticke´hoduchaanadsˇenı´,vta´hnounatolik,zˇesivydrzˇı´snimihra´t,dı´kycˇemuzˇ dobrˇepotre´nuje.
Knihanenı´zameˇrˇenanazˇa´dny´specificky´programovacı´jazyk.Vsˇechny prˇı´kladyjsouzvla´dnutelne´vevsˇechbeˇzˇneˇpouzˇı´vany´chprogramovacı´chjazycı´ch,atoveˇtsˇinousdocelaza´kladnı´miprvkyjazyka,tj.bezpouzˇitı´pokrocˇily´chvlastnostı´jazykaaspecia´lnı´chknihoven.Prˇedpokla´da´se,zˇecˇtena´rˇma´ kdispoziciucˇebnicikonkre´tnı´hoprogramovacı´hojazyka,ktery´pouzˇı´va´.
Knihaslouzˇı´nejenkprocvicˇenı´za´kladnı´chprograma´torsky´chkonstrukcı´, aleikprocvicˇenı´algoritmu˚.Ipote´tostra´ncejeknihaprˇedevsˇı´mcvicˇebnicı´ anikolivsamonosnouucˇebnicı´.Klı´cˇove´pojmyjsouvknizestrucˇneˇpopsa´ny avysveˇtleny,nicme´neˇtentopopisjemı´neˇnjakoprˇipomenutı´pojmu˚,ktere´jizˇ cˇtena´rˇslysˇel,resp.inspiraceproto,cobysimeˇldostudovat.Opeˇtseprˇedpokla´da´,zˇecˇtena´rˇma´kdispoziciucˇebnicialgoritmizace(naprˇ.Skiena,1998; Wroblewski,2004;Cormenetal.,2001;Kucˇera,2009)neboprosˇelrelevantnı´modborny´mkurzem.Pokryta´la´tkaveˇtsˇinouspada´doucˇivaprobı´rane´ho v1.rocˇnı´kunainformaticky´chvysoky´chsˇkola´ch.
Knihaobsahujesˇirokousˇka´luprˇı´kladu˚odvelmijednoduchy´chazˇpomysˇlenkoveˇiprograma´torskyna´rocˇne´projekty.Take´dı´lcˇı´u´lohyobsahujı´podu´lohy
sru˚znouslozˇitostı´.C ˇ tena´rˇtedyvzˇdymu˚zˇenajı´tprˇı´klad,ktery´odpovı´da´jeho momenta´lnı´mschopnostem,na´ladeˇ,cˇasovy´mmozˇnostematomu,cosichce procvicˇit.Pru˚beˇzˇneˇ,jaksebudezlepsˇovat,zdenavı´cnajdesta´lenove´vy´zvy. Knihaprˇijdevhodneˇkolikaskupina´mcˇtena´rˇu˚m:
• studentu˚m,kterˇı´seucˇı´programovatapsa´tefektivnı´algoritmy,prosamostudiumatre´nink,
• ucˇitelu˚m,kterˇı´vyucˇujı´programova´nı´ahledajı´na´meˇtynacvicˇenı´,zada´nı´ doma´cı´chu´lohaprojektu˚,
• zkusˇeny´mprograma´toru˚m,kterˇı´seucˇı´novy´jazykachteˇjı´sijejprocvicˇit naprˇı´kladech,prˇı´padneˇsichteˇjı´procvicˇitsve´„programa´torske´svaly“ nazajı´mavy´chprˇı´kladech.
Proble´my,ktere´stojı´zau´tok,proka´zˇousvojicenutı´m,zˇeu´tokopeˇtujı´.
P.Erd˝os
U ´ lohyjsourozdeˇlenydoneˇkolikatematicky´choblastı´,ktere´sdı´lejı´za´kladnı´ rysy.Prokazˇdouu´lohujeuvedenodhadobtı´zˇnosti,strucˇny´stylu´lohy,popis zada´nı´,doplnˇujı´cı´komenta´rˇacˇa´stecˇneˇpozna´mkykrˇesˇenı´m.
Knihaobsahujevelmirozmanite´typyu´loh.Neˇktere´jsouprˇı´mocˇare´,vzada´nı´jecelkemjasneˇpopsa´no,codeˇlat,stacˇı´to„jen“implementovat.Jine´jsou na´padove´–vy´sledny´programjevelmikra´tky´anevyzˇadujenicslozˇite´ho,ale jepotrˇebavhodny´na´pad,naktery´nemusı´by´tsnadne´prˇijı´t.Ujiny´chprˇı´kladu˚ sezasenaopakhodı´netrivia´lnı´teoriecˇipojmy,aletyjsoustrucˇneˇvysveˇtleny, takzˇejdehlavneˇotopopispochopit,dohledatsivprˇı´padeˇpotrˇebydetailneˇjsˇı´ vysveˇtlenı´azvla´dnoutpopisprˇeve´stdofunkcˇnı´hoprogramu.Za´kladnı´styl u´lohyjevzˇdystrucˇneˇshrnutnazacˇa´tkupopisuu´lohy.
Kromeˇslovnı´hopopisustylujeprosnadneˇjsˇı´orientaciuvedenoicˇı´selne´ hodnocenı´obtı´zˇnostiu´loh.Totohodnocenı´obtı´zˇnostijerozdeˇlenonadva aspekty: na´pad,tedyjakna´rocˇne´jeprˇijı´tnahlavnı´mysˇlenkurˇesˇenı´,algoritmus avhodnoureprezentacidat,a ko´dova´nı´,tedyjakna´rocˇne´jeprogramnapsat aodladit.
Obeˇkategoriejsoupouzeprˇiblizˇne´odhadyaslouzˇı´prˇedevsˇı´mkrelativnı´muporovna´nı´u´loh.Absolutnı´obtı´zˇnostpochopitelneˇza´visı´nazkusˇenostechrˇesˇitele.Obeˇobtı´zˇnostijsouhodnocenynastupnici1–5.Vy´znamjednotlivy´chstupnˇu˚prozacˇa´tecˇnı´kaaexpertajeilustrova´nvtabulce1.1.Uveˇtsˇiny u´lohjeprona´padiko´dova´nı´uvedeninterval,protozˇeu´lohytypickyobsahujı´neˇkolikpodu´loh,jejichzˇobtı´zˇnostselisˇı´.Podu´lohyjsouveˇtsˇinouuvedeny vporˇadı´rostoucı´obtı´zˇnosti.
Tabulka1.1: Kategorieobtı´zˇnosti
Na´pad Zacˇa´tecˇnı´k
Expert 1 vcelkujasne´ zrˇejme´ 2 trocharozmy´sˇlenı´ rutina 3 teˇzˇke´ trocharozmy´sˇlenı´ 4 hranicemozˇnostı´ teˇzˇke´ 5 nerˇesˇitelne´ hranicemozˇnostı´
Ko´dova´nı´ Zacˇa´tecˇnı´k
Expert 1 20min. 5min. 2 1hod. 15min. 3 pu˚ldne 1hod. 4 neˇkolikdnı´ 2–6hod. 5 pu˚lrocˇnı´projekt intenzivnı´vı´kend
Da´lepakna´sledujesamotny´popisu´lohy. Zada´nı´ jeza´kladnı´popiscı´lu˚ u´lohy.Poprˇecˇtenı´tohototextujemozˇne´zacˇı´trˇesˇit,vprˇı´padeˇpouzˇitı´vevy´uce jetentotexturcˇeny´prostudenty.Na´sleduje komenta´rˇ ku´loze,ktery´obsahuje souvislostiaza´kladnı´rady,jakkproble´muprˇistupovat.Komenta´rˇeobcˇasprozrazujı´iza´kladnı´mysˇlenkyvhodny´chalgoritmu˚cˇiskryte´„finty“,jakkzada´nı´ prˇistoupit.Ambicio´znı´cˇtena´rˇbytedymeˇlu´lohuzkusitvyrˇesˇitbezcˇtenı´komenta´rˇu˚.
Nakonciknihyjsouuvedenavybrana´ rˇesˇenı´,ktera´detailneˇjiosveˇtlujı´zajı´mave´bodyzpostupu,ukazujı´prˇı´kladymozˇny´chprogramu˚,prˇı´padneˇodpoveˇdinakonkre´tnı´ota´zkypolozˇene´vzada´nı´.Jdevsˇakopravdupouzeo vybrana´ rˇesˇenı´,rozhodneˇnejsourozebra´nyvsˇechnyprˇı´kladyavarianty.Tonenı´ zˇa´doucı´,neˇktere´proble´myjsouza´meˇrneˇponecha´nyotevrˇene´provlastnı´zkouma´nı´aprojekty.
Vrˇesˇenı´chjsouuvedenyuka´zkyko´duvjazycePython.JazykPythonbyl prouka´zkyzvolenproto,zˇejdeocˇisty´vysokou´rovnˇovy´jazyk,ktery´by´va´ obcˇasoznacˇova´nza„spustitelny´pseudoko´d“.Uka´zkyko´dubytedymeˇlyby´t pochopitelne´ibezznalostitohotokonkre´tnı´hojazyka.Pythonjeprogramovacı´ jazyk,ktery´serozhodneˇvyplatı´naucˇit,nicme´neˇproporozumeˇnı´te´toknize nenı´jehoznalostnijakza´sadnı´.
Bud’ toudeˇlej,nebone.Neexistujezˇa´dne´„zkusı´m“.
YodavefilmuImpe´riumvracı´u´der
Knihulzevyuzˇı´vatru˚zny´mizpu˚soby:ksamostudiu,vevy´ucekekra´tky´m cvicˇenı´m,kzada´va´nı´doma´cı´chu´lohneboirozsa´hly´chprojektu˚.Na´sleduje neˇkolikkomenta´rˇu˚adoporucˇenı´kekazˇde´mustylu.
Vprˇı´padeˇ samostudia jedu˚lezˇita´pevna´vu˚le–nespokojitsepouzesjednoduchy´miprˇı´kladyanedı´vatsehnednarˇesˇenı´.Mu˚zˇeby´tvhodne´najı´tsi partnera,sektery´mbudeteprˇı´kladyrˇesˇitsoubeˇzˇneˇ.Mu˚zˇetetaksouteˇzˇit,kdo zvla´dneu´lohyvyrˇesˇitrychlejicˇiefektivneˇji,atake´mu˚zˇetesva´rˇesˇenı´porovna´vat.Umnohau´lohexistujeneˇkolikru˚zny´chrˇesˇenı´aporovna´nı´mvı´ceru˚zny´ch rˇesˇenı´semu˚zˇetehodneˇnaucˇit.
Upouzˇitı´ve vy´uce,prˇedevsˇı´mpokudprogramova´nı´probı´ha´vhodineˇ, ktera´ma´fixnı´konec,jedu˚lezˇite´vybratprˇı´kladyspra´vne´obtı´zˇnosti.Prˇedevsˇı´mjedu˚lezˇite´,abyobtı´zˇnostnebylaprˇı´lisˇvysoka´.Pokudstudentivpu˚lce hodinyzjistı´,zˇejenadjejichsı´lydokoncˇitprˇı´kladvdostupne´mcˇase,jsou demotivova´ni,uzˇseprˇı´lisˇnesoustrˇedı´atı´mpa´deminicmocnenaucˇı´.Prˇı´mo vevyucˇovacı´hodineˇjelepsˇı´pouzˇı´vatza´kladnı´variantyprˇı´kladu˚aslozˇiteˇjsˇı´ variantyarozsˇı´rˇenı´nechatjakodoma´cı´u´kol,uktere´honenı´takkra´tky´cˇasovy´ limit.
Udoma´cı´chu´lohjednessamozrˇejmeˇproble´msvyhleda´va´nı´mnaInternetu.Doknihyjsouzacˇleneˇnyu´lohyzajı´mave´aosveˇdcˇene´,cozˇovsˇemznamena´,zˇejdecˇastotake´ou´lohyzna´me´arozsˇı´rˇene´.R ˇ esˇenı´mnohau´lohlzetedy cˇastovcelkusnadnonajı´tnaInternetu(prˇedevsˇı´mpokudhleda´meanglicke´ verzepojmu˚).Pokudjsmesitohotoproble´muveˇdomi,lzemuvcelkurozumneˇ prˇedcha´zet.Snadnovyhledatelna´rˇesˇenı´veˇtsˇinounejsouprˇesneˇvte´podobeˇ, jakjezdezada´no,apokudnavı´cu´lohutrochupozmeˇnı´mecˇiprˇejmenujeme, cˇastoseda´snadne´muvyhleda´nı´zabra´nit.
Navı´cschopnost„vyhledatsiza´kladrˇesˇenı´atopakjenvhodneˇupravit“ nenı´samaosobeˇnijaksˇpatna´,naopakuprakticky´chaplikacı´programova´nı´ tojepreferovany´postup.Itutoschopnostmu˚zˇeby´tuzˇitecˇne´tre´novat,takzˇe uneˇktery´chprˇı´kladu˚mu˚zˇeby´trozumne´pouzˇitı´tohotoprˇı´stupupodporovat. Konkre´tneˇnaprˇı´kladucvicˇenı´„Experimentysrˇadicı´mialgoritmy“studenty podporujivtom,abysirˇadicı´algoritmyvyhledaliapouzeprˇevedlidojednotne´hostyluaabysesoustrˇedilinaexperimenta´lnı´porovna´nı´.
Prˇipouzˇitı´prˇı´kladu˚jakozada´nı´projektu˚vyuzˇı´vejtezdeuvedene´zada´nı´ pouzejakovy´chozı´bod.R ˇ esˇitelprojektubymeˇlzkusitvymysletvlastnı´rozsˇı´rˇenı´avariaceazkusitsisa´mpolozˇitzajı´mavouota´zkuou´loze.
Cˇı´mtvrdeˇjipracuji,tı´mvı´csezda´,zˇema´msˇteˇstı´.
T.Jefferson
Forma´tknihyvynucujelinea´rnı´rˇazenı´prˇı´kladu˚,ovsˇemmozˇny´chkrite´riı´,podle ktery´chlzeprˇı´kladyrˇadit,jecela´rˇada:naprˇı´kladobtı´zˇnost,metodarˇesˇenı´, te´ma,typvstupuavy´stupu.Vte´toknizejezvolenotematicke´rˇazenı´prˇı´kladu˚.
Prˇı´klady,ktere´jsouzarˇazenyzasebou,tedysdı´lejı´podobne´te´ma,alemohou sevy´razneˇlisˇitvostatnı´chaspektech,prˇedevsˇı´mvobtı´zˇnosti.Toznamena´,zˇe nenı´dobry´na´padrˇesˇitprˇı´kladyvknizecˇisteˇsekvencˇneˇ.
Provy´beˇrvhodne´hoprˇı´kladuslouzˇı´informaceuvedene´nazacˇa´tkupopisu kazˇde´hoprˇı´kladuada´lepaktatoana´sledujı´cı´kapitola,ktere´uda´vajı´prˇehled prˇı´kladu˚roztrˇı´deˇny´chpodleru˚zny´chkrite´riı´.Vte´tokapitolejsouprˇı´kladyroztrˇı´deˇnypodlestylupouzˇitı´,vna´sledujı´cı´pakpodlemetodna´vrhualgoritmu˚, ktere´seprˇirˇesˇenı´pouzˇı´vajı´.
Zdeuvedene´seznamybertejenjakoza´kladnı´orientaci.To,zˇeprˇı´kladnenı´ uvedenvurcˇite´kategorii,jesˇteˇneznamena´,zˇebynemohlby´tprodane´u´cˇely vhodny´.
Zacˇnemeprˇı´kladyvhodny´miprou´vodnı´kurzprogramova´nı´,tedyproty,kdo neumı´vu˚becprogramovat.Prˇı´kladyjsourˇazenyvporˇadı´,vjake´mjevhodne´ jeprocha´zet:
• 4.2Z ˇ elvı´grafika:za´klady–pokudpouzˇı´va´tejazyk,ktery´ma´snadno pouzˇitelnouknihovnuprointerpretaciprˇı´kazu˚zˇelvı´grafiky(naprˇ.Python),jetotocvicˇenı´nena´rocˇne´aprˇitomefektnı´(pomocı´pa´rprˇı´kazu˚ jdoukreslitzajı´mave´obra´zky),takzˇejdeovhodne´prvnı´cvicˇenı´.
• Prˇı´kladyzkapitolyPocˇı´ta´nı´scˇı´sly,konkre´tneˇ:3.1Hra´tkyscˇı´sly,3.2Vy´pisyposloupnostı´,3.3Collatzu˚vproble´m,3.4Na´hodna´procha´zka, 3.5Deˇlitelnostaprvocˇı´sla–uteˇchtoprˇı´kladu˚vystacˇı´mepouzesjednoduchy´misyntakticky´miprvkyjazyka(celocˇı´selne´promeˇnne´acykly), prˇı´kladyjsoutake´vhodne´proprˇedstavenı´konceptufunkce.
• 3.7Fibonaccihoposloupnost–prˇedstavenı´jednorozmeˇrne´hopole, uka´zkaru˚zny´chpohledu˚naproble´m.
• 4.1Textova´grafika–opeˇtproble´myvyuzˇı´vajı´cı´jenza´kladnı´syntakticke´ konstrukce,jenvı´ceobra´zkove´aobcˇasvyzˇadujı´cı´mı´rny´na´pad.
• 5.2Transpozicˇnı´sˇifry,5.3Substituceako´dova´nı´–vhodne´proprˇedstavenı´ rˇeteˇzcu˚apra´cesnimi.
• 7.2Ha´da´nı´cˇı´sla,7.3Obeˇsˇenec,7.5HraNim–vhodne´proprˇedstavenı´nacˇı´ta´nı´vstupuoduzˇivatele(prˇı´padneˇzesouboru)avyzkousˇenı´interakce suzˇivatelem.Prˇı´kladytake´ilustrujı´zajı´mave´aprˇitomvcelkusnadno zvla´dnutelne´algoritmy.
• 4.3Z ˇ elvı´grafika:frakta´ly,6.3Hanojske´veˇzˇe–prˇedstavenı´konceptu rekurze.
• 6.1C ˇ ı´selne´bludisˇteˇ,6.5Hleda´nı´cestvbludisˇti–pra´cesdvojrozmeˇrny´m polem,prˇedstavenı´za´kladnı´chgrafovy´chalgoritmu˚(prohleda´va´nı´do sˇı´rˇky).
• 8.4Experimentysrˇadicı´mialgoritmy–pra´cespolem,ilustraceklasicky´ch algoritmu˚.
Prˇı´kladyzkapitoly3Pocˇı´ta´nı´scˇı´slyjsourealizovatelne´trˇebaivtabulkove´m editoruamohoutakposlouzˇitjakoza´kladnı´u´voddoalgoritmizaceivprˇı´padeˇ, kdynenı´vevy´ucecˇasnaprobra´nı´obecne´hoprogramovacı´hojazyka.
Na´sledujı´cı´prˇı´kladyprˇijdouvhod,pokudsechcemezameˇrˇitprima´rneˇna tre´ninkalgoritmu˚ametodna´vrhualgoritmu˚achcemeprˇı´klady,ktere´jsou zvla´dnutelne´prˇidobre´mna´padurelativneˇrychleapomocı´kra´tke´hoko´du:
• 3.10Permutace,kombinace,variace
• 4.7Konvexnı´obal
• 4.8Triangulace
• 5.5Prˇesmycˇky
• 6.3Hanojske´veˇzˇe
• 6.6Generova´nı´bludisˇt’
• 7.7Jednorozmeˇrne´pisˇkvorky
• 8.1Rozmeˇnˇova´nı´mincı´
• 8.3Proble´mysrˇeteˇzciaposloupnostmi
• 8.4Experimentysrˇadicı´mialgoritmy
Podrobneˇjsˇı´rozborru˚zny´chmetodna´vrhualgoritmu˚jeuvedenvna´sledujı´cı´kapitole.
Proty,kdouzˇumı´programovat,pouzeseucˇı´novy´programovacı´jazykachteˇjı´ jejnatre´novatnazajı´mavy´chprˇı´kladech,semohouhoditna´sledujı´cı´prˇı´klady:
• 3.9Vy´pocˇetPı´–zajı´mave´experimenty,ktere´prˇitomvyzˇadujı´jenmanipulaciscˇı´selny´mipromeˇnny´mi(vhodne´proprvnı´sezna´menı´sjazykem).
• 6.1C ˇ ı´selne´bludisˇteˇ–jednoducha´logicka´u´lohaproprocvicˇenı´pra´ce sdvojrozmeˇrny´mpolem.
• 5.2Transpozicˇnı´sˇifry,5.3Substituceako´dova´nı´–procvicˇenı´za´kladnı´ pra´cesrˇeteˇzciapoli.
• 7.6Tetris(interaktivnı´verze)–komplexnı´procvicˇenı´mnohaaspektu˚ jazyka(interakcesuzˇivatelem,reprezentacedat,cˇas),prˇicˇemzˇcelkoveˇje programdocelakra´tky´avy´sledekrelativneˇefektnı´.
Prozkusˇene´programa´tory,kterˇı´senechteˇjı´ucˇitnovy´jazykneboalgoritmus,ale chteˇjı´vy´zvusvy´chschopnostı´,zkusitsineˇco„proradostzprogramova´nı´“nebo potre´novatnaprograma´torskousouteˇzˇ,semohouhoditna´sledujı´cı´prˇı´klady.
• Vy´sˇeuvedene´prˇı´kladynatre´ninkalgoritmizace.
• Prˇı´kladyzkapitoly8Klasicke´informaticke´proble´my,atonejle´pebez cˇtenı´doprovodne´hokomenta´rˇe.
• U ´ lohy3.10Permutace,kombinace,variace,4.3Z ˇ elvı´grafika:frakta´ly, 4.4Sierpi ´ nske´hofrakta´l.Tytou´lohymajı´kra´tke´elegantnı´rˇesˇenı´,alenenı´ u´plneˇsnadne´jevymyslet.
• Hryalogicke´u´lohy,konkre´tneˇnaprˇ.6.11Sokoban,7.6Tetris, 7.8Pisˇkvorky.Za´kladnı´verzehervtextove´mrezˇimulzenapsatdocelarychle,take´heuristikyproumeˇlouinteligencimohouby´tsdobry´m na´pademkra´tke´,poskytujı´prostorprosouteˇzˇenı´oto,kdonapı´sˇeneju´speˇsˇneˇjsˇı´program,atake´da´vajı´sˇiroky´prostorprorozsˇı´rˇenı´.
• 5.4Rozlomenı´sˇifer–tatou´lohaobsahujeotevrˇenouazajı´mavouvy´zvu napsatprogramtak,abybylconeju´speˇsˇneˇjsˇı´vla´ma´nı´sˇifer.
Zkusˇenı´programa´torˇisipaktake´mohouu´lohyrozsˇı´rˇittı´m,zˇeprˇekrocˇı´ ra´mecpsanı´klasicky´chsekvencˇnı´chprogramu˚vyuzˇitı´mparalelizaceuvy´pocˇetneˇna´rocˇny´chproble´mu˚,naprˇ.6.11Sokoban,6.8Jaknavsˇtı´vitvsˇechnapole mrˇı´zˇky?nebo4.6Mandelbrotovamnozˇinasvelkouprˇesnostı´.Mu˚zˇetezkusit conejefektivneˇjivyuzˇı´tvı´ceja´drove´procesoryneboprove´stvy´pocˇetvdistribuovane´mprostrˇedı´.Jiny´mzpu˚sobemrozsˇı´rˇenı´zada´nı´mu˚zˇeby´trealizaceu´loh formouinteraktivnı´webove´aplikaceneboaplikacepromobilnı´telefon–pro tentostyljsouvhodne´prˇedevsˇı´mhryalogicke´u´lohy,alezajı´mave´mohouby´t ineˇktere´geometricke´proble´myau´lohysobra´zky.
Jakote´matasemestra´lnı´ch(rocˇnı´kovy´ch)projektu˚,prˇı´padneˇijakoinspirace prote´matabakala´rˇsky´chcˇidiplomovy´chpracı´,semohouhoditna´sledujı´cı´ prˇı´klady:
• S ˇ ifrovacı´syste´m–kombinacete´matzkapitoly5S ˇ ifrova´nı´apra´cestextem.Programdostanetextabudehoumeˇtzasˇifrovatadesˇifrovatru˚zny´mizpu˚soby.
• U ´ loha6.6Generova´nı´bludisˇt’agenerova´nı´zada´nı´udalsˇı´chlogicky´ch u´loh.
• Slozˇiteˇjsˇı´logicke´u´lohyahry:6.9Polyomina,6.10Sudoku,6.11Sokoban, 7.6Tetris,7.8Pisˇkvorky.
• 7.9Soubojevirtua´lnı´chrobotu˚.
• 8.6Grafove´algoritmy.
• Proble´mysexperimenta´lnı´slozˇkou,jakojsou8.4Experimentysrˇadicı´mi algoritmy.
• Na´meˇtyzkapitoly9Dalsˇı´na´meˇty.
Dopru˚sˇvihuna´snikdynedostaneto,conevı´me.Dostanena´stamto,co vı´meprˇı´lisˇjisteˇ,aonototakprosteˇnenı´.
Tatoknihaslouzˇı´jakocvicˇebnice,nikolivjakokompletnı´ucˇebnice.Ujednotlivy´chprˇı´kladu˚jsouveˇtsˇinouhlavnı´mysˇlenkyvysveˇtleny,prˇedpokla´da´sevsˇak, zˇecˇtena´rˇumı´programovatvneˇjake´mprogramovacı´mjazyceazna´za´kladnı´ pojmyzinformatiky.Proza´kladnı´prˇehledpozadı´,naktere´mknihastavı´, slouzˇı´tatokapitola,ktera´poda´va´strucˇny´prˇehledpojmu˚pouzˇity´chvknize. Rozhodneˇnenı´nezbytne´vsˇechnyuvedene´pojmyovla´dat,neˇktere´znichse vyuzˇijı´pouzevneˇkolikama´loteˇzˇsˇı´chprˇı´kladech.
Prokazˇdy´pojemjeda´nstrucˇny´popis,ktery´slouzˇı´prima´rneˇproprˇipomenutı´,nikolivprovysveˇtlenı´.Pokudsecˇtena´rˇsneˇktery´mzpojmu˚nesetkal, jevhodne´siprˇedrˇesˇenı´mprˇı´kladu˚souvisejı´cı´chsdany´mpojmemte´mablı´zˇe dostudovat.Vy´kladzmı´neˇny´chpojmu˚lzenajı´tvmnohaucˇebnicı´ch,viznaprˇ. Skiena,1998;Wroblewski,2004;Cormenetal.,2001;Kucˇera,2009.Umnoha za´kladnı´chpojmu˚nabı´zı´dobre´vysveˇtlenı´iWikipedie.
Kekazˇde´mupojmujeuvedeniseznamprˇı´kladu˚,vektery´chsedany´pojem vyskytuje.Tytoprˇı´kladyposlouzˇı´jakona´zorna´ilustraceuvedene´hostrucˇne´ho popisu.Soucˇasneˇlzetutokapitoluvyuzˇı´tijakozdrojna´meˇtu˚vechvı´li,kdyse ucˇı´teneˇjaky´pojemachcetesijejdobrˇeprocvicˇit.
Drˇı´venezˇsepodı´va´menatechnikyna´vrhualgoritmu˚,prˇipomenˇmesi,jak pomeˇrˇujemevy´konalgoritmu˚.Prˇı´mocˇary´prˇı´stupbybylspustitalgoritmyna konkre´tnı´mvstupu,zmeˇrˇitjejichrychlostapodletohourcˇit„vı´teˇze“.Takovy´ prˇı´stupma´vsˇakzrˇejme´nevy´hody:vy´sledekza´visı´napocˇı´tacˇi,naktere´m algoritmyspousˇtı´me,anavolbeˇkonkre´tnı´hovstupu.Protosekporovna´nı´ algoritmu˚veˇtsˇinoupouzˇı´va´jiny´prˇı´stup:nemeˇrˇı´mecˇasbeˇhunakonkre´tnı´m