Pojďte s námi PROGRAMOVAT!

1. 2. 2008

Sdílet

Vážení čtenáři, vítáme vás ve světě programování. Na dnešní exkurzi budete provázeni na slovo vzatým odbor...


Vážení čtenáři, vítáme vás ve světě programování. Na dnešní exkurzi budete provázeni na slovo vzatým odborníkem, jenž vás obeznámí se základními pojmy, které se váží k algoritmizaci a programování. Jak jsme zmínili už minule, druhý díl našich výukových kurzů bude ještě společný, což je poměrně pochopitelné, poněvadž poznatky, jež získáte, mají obecnou povahu a nejsou tedy přímo svázány s žádným konkrétním programovacím jazykem či vývojovým prostředím. Ovšem počínaje příštím číslem se již kurzy rozdělí na dvě větve, z nichž jedna se bude věnovat výkladu programování v jazyce C#, zatímco druhá se bude točit kolem C++. Je jen na vás, který z kurzů se rozhodnete sledovat. Pokud plánujete využít silné stránky vzniklého synergického efektu, můžete se školit v obou kurzech najednou. Nicméně připravte se prosím na to, že to bude parádní jízda!

Program = data + algoritmus

Programování je duševní činnost zaměřená na tvorbu algoritmů, které jsou vyjádřeny v jistém programovacím jazyce a společně tvoří počítačový program. Tato hezká definice dovedně vystihuje vztahy mezi programováním, algoritmy, programovacími jazyky a počítačovými programy. Začněme však pěkně po pořádku. Hlavním motivem pro tvorbu počítačových programů je úsilí, jehož cílem je automatizace lidských aktivit. Lidé provozují nespočetné množství různých profesí, v nichž se na každém kroku potýkají s jistými daty. Pro nás není v tomto okamžiku důležitý ani samotný charakter dat, ani jejich fyzická reprezentace. Jestliže se rozhlédneme kolem sebe, okamžitě budeme moci identifikovat přehršle dat, s nimiž lidé přicházejí do kontaktu. Každá obchodní společnost sdružuje data o svých zaměstnancích, objednávkách, výrobcích a tržbách. Povaha dat může být rozličná: zatímco data o pracovnících spadají do kompetence personalistiky, výrobky budou precizně charakterizovány technickými daty, objednávky, tržby, prodeje a další účetní data pak můžeme zařadit mezi ekonomická data podniku. S každou skupinou dat pracují kompetentní lidé, kteří je používají při řešení svých pracovních úkolů. Jádrem řešení jakékoliv úlohy je pečlivé provedení následujících etap rozhodovacího procesu: analýza problému, návrh množiny přípustných řešení, výběr optimálního řešení při zvážení omezujících podmínek, implementace vybraného řešení a verifikace praktického nasazení řešení.
Data jsou vstupními údaji, přicházejícími do procesů řešení jistých problémů. V tomto směru pro nás mají cenu zlata, neboť jsou vpravdě jedinou kvantifikací hodnot a entit, s nimiž se budeme potýkat. Přestože o užitečnosti adekvátních dat nebudeme nijak pochybovat, data sama o sobě by nám byla k ničemu. Potřebujeme totiž navrhnout postup, jehož pomocí předložený úkol s využitím vstupních dat vyřešíme. Exaktní a logický předpis, definující konečnou posloupnost kroků, jež vede k vyřešení úkolu, budeme nazývat algoritmem. Termín algoritmus je v informatice nesmírně populární, ačkoliv jeho využití není ani zdaleka vymezeno mantinely informatických věd. Algoritmus si můžeme zjednodušeně představit jako průvodce, jenž je obdařen dostatečnou dávkou inteligence pro vyřešení stanoveného problému. Ve své podstatě je algoritmus sbírkou jednoznačně navržených kroků, které nás dovedou k požadovanému výsledku. A co smí algoritmus řešit? Inu, cokoliv: algoritmus se může soustředit na výpočet mediánu mezd zaměstnanců nebo na stanovení optimálního materiálového složení technického prototypu výrobku. Algoritmem je ovšem rovněž recept na vaše oblíbené jídlo, nebo postup sdělující, jak konečně rozlousknout ten zapeklitý matematický problém s vektorovými prostory.

Vlastnosti algoritmů

Každý algoritmus lze popsat prostřednictvím jeho vlastností. Abychom naplnili linii výkladu, uvedeme si nyní základní vlastnosti algoritmů i s průvodním komentářem:

Jednoznačnost

Algoritmus musí být jednoznačný v tom smyslu, že po uskutečnění každého kroku musí být zřejmé, jaký bude krok následující. Jinými slovy, algoritmus nesmí nikdy zůstat na pochybách ohledně směru, jímž se má dále vydat. Co byste třeba řekli tomu, kdyby vaše kuchařská kniha slibovala výtečnou specialitu, ale již při čtvrtém kroku byste nevěděli, jak pokračovat dál? Jistě si řeknete, že to není nic příjemného. A budete mít naprostou pravdu. U správně navržených algoritmů se něco takového nesmí nikdy stát. Pohlédneme-li na algoritmus, musíme vždy umět identifikovat jeho cestu od začátku až do konce. To, že je algoritmus za všech okolností jednoznačný, ovšem nijak neovlivňuje jeho schopnost přijímat rozhodnutí a podle nich se dále řídit. Algoritmus se může dostat do situace, kdy bude muset přijmout jisté rozhodnutí, které samozřejmě ovlivní jeho další průběh. Podívejme se třeba na algoritmus modelující chování nepřátel v počítačových hrách. Umělá inteligence algoritmu kupříkladu rozhoduje, zda by mělo monstrum zaútočit na hlavního hrdinu, anebo se raději ukrýt v blízkém lese. S jakými daty takovýto algoritmus pracuje? Například s aktuální hodnotou zdraví příšery, úrovní její schopnosti léčit se, stavem zbraní a vzdálenosti od našeho avatara. Algoritmus vyhodnotí všechny aspekty a přijme rozhodnutí, které bude vést další kroky nestvůry.

Všeobecnost

Algoritmus má generickou povahu, čímž sdělujeme, že je vhodný k řešení jisté všeobecné kategorie úkolů. Uvažujme například o algoritmu pro vypočtení hmotnostního indexu BMI. Jak možná víte, tento index vypočítáme, když aktuální hmotnost osoby v kilogramech vydělíme druhou mocninou její výšky v metrech, tedy:

Návrh algoritmu je v tomto případě triviální, poněvadž vše, co musíme udělat, je zadat správná data a poté je dosadit do matematického vzorečku. Vzorec nám na oplátku poskytne číselný údaj, jenž vyjadřuje hmotnostní index testované osoby. Pokud je index BMI z intervalu <19, 25>, můžeme prohlásit, že hmotnost dotyčné osoby je v pořádku. (Index menší než 19 svědčí o podvýživě, zatímco výsledek přesahující mez 25 bodů naznačuje nadváhu.) Algoritmus pro určení indexu BMI je všeobecný, protože jeho pomocí můžeme vypočítat nejenom váš hmotnostní index, nýbrž také všech členů vaší rodiny a ve skutečnosti kteréhokoliv člověka, jenž žije na této planetě.

Rezultativnost

Máme-li před sebou algoritmus, pak právem očekáváme, že nám ve vhodné chvíli zpřístupní výsledek své činnosti. Povaha jakéhokoliv algoritmu je rezultativní, což znamená, že algoritmus přispěchá s výsledkem, ke kterému dospěje. Máme třeba za úkol seřadit prodejní ceny rodinných domů nacházejících se v jisté lokalitě. Vstupní data budou tvořena cenovými charakteristikami třiceti domů, jež by pro nás mohly být zajímavé. Jistě, domy bychom mohli podle ceny coby třídícího kriteria uspořádat manuálně, ovšem tuto variantu v době progresivního rozvoje informačních technologií s dovolením pouštíme z hlavy. Mnohem elegantnější bude sestavit algoritmus, který domy setřídí sám, a když tak učiní, pošle nám zprávu: „Domy jsou již pěkně v řadě, pojďte se na ně podívat!“. Pro nás není nyní stěžejní, zda algoritmus roztřídí domy za dvě, deset nebo dvacet vteřin. Tento tzv. exekuční čas algoritmu budeme zkoumat až později. Ze všeho nejdůležitější je, že algoritmus nám po uplynutí jisté doby nabídne výsledek své práce, tedy seřazený seznam rodinných domů.

Konečnost

Pokud by postup řešící problémový úkol nebyl konečný, nemohl by se vydávat za algoritmus. Jestliže pracujeme s algoritmem, máme v rukou garanci, že výsledek jeho snažení obdržíme po absolvování konečného počtu algoritmických kroků. Dobrá, nyní víme, že algoritmus se k výsledku musí dopracovat, ačkoliv toto tvrzení nám nic neříká o tom, jak dlouho to bude trvat. Když budete s programováním a algoritmizací jenom začínat, exekuční čas algoritmu pro vás nebude vůbec důležitý. Vaše úsilí bude spíše mířit k analýze problémové situace a k nalezení postupu zkonstruování algoritmu, který nastolený problém dokáže vyřešit. Jaksi stranou zůstane otázka časové složitosti algoritmu, díky níž dovedeme určit, za jak dlouho bude práce algoritmu u konce. V praxi je exekuční čas algoritmů jedním z měřítek jejich efektivnosti.

Efektivnost

Otázka efektivnosti algoritmů je námětem pro řadu vědeckých prací, které se zabývají časovou a prostorovou složitostí algoritmů. V našem pojetí budeme za efektivní považovat algoritmus s optimální časovou a prostorovou složitostí. Když zkoumáme složitost algoritmu, vždy nám jde o posouzení náročnosti algoritmu ve vztahu ke dvěma prostředkům, jimiž jsou alokovaný čas a spotřebovaný paměťový prostor. V této souvislosti je nesmírně důležité podotknout, že toto zkoumání se odehrává ve vztahu k objemu vstupních dat, který je variabilní (o vstupních datech potom uvažujeme jako o proměnlivém datovém objemu n). Časová složitost nám říká, jak časově náročný je algoritmus při zpracovávání určitého datového objemu. Prostorová složitost se zase zaměřuje na paměťovou náročnost algoritmu ve smyslu obsazení potřebného prostoru operační paměti. Z uvedených dvou měřítek „čas versus paměť“, se za významnější považuje to první, neboť za běžných okolností můžeme paměťovou kapacitu považovat za postačující. Významnější je tudíž exekuční čas algoritmu, přičemž snahou programátorů je pochopitelně tento čas v co možná největší míře minimalizovat. Požadavek na optimalizaci časové složitosti algoritmů ovšem není dán ani tak programátory, jako spíše snahou o zabezpečení vysokého komfortu finálních uživatelů. Vždyť kdo z nás by byl nadšen, kdyby ukládání textového dokumentu zabralo místo pár vteřin několik minut? A jaký dojem by ve vás zanechal databázový program, který by při zpracování série záznamů usnul a přestal reagovat na pokyny uživatele? Anebo závodní počítačová hra, jejíž vykreslovací jádro by bylo tak pomalé, že by se vůbec nedala hrát? Jak sami jistě uznáte, nečekalo by nás nic příjemného.
U algoritmů můžeme kromě těch výše uvedených rozeznat i další vlastnosti. Za všechny uvedeme třeba srozumitelnost, strukturovanost a modifikovatelnost.

Algoritmizace

Proces vytváření a sestavování algoritmů je předmětem zkoumání vědní discipliny, která se nazývá algoritmizace. Algoritmizace se zabývá vynalézáním algoritmů, jež jsou určeny pro řešení široké palety problémových úloh. Nyní bychom vás rádi seznámili s postupem tvorby algoritmů.
Dejme tomu, že bychom chtěli provést inverzi bitové mapy. Naším úkolem bude navrhnout algoritmus, který provede inverzi jakékoliv bitové mapy (inverze obrázku se někdy nazývá vytváření negativu). Praktická ukázka inverze ukázkové bitové mapy je k nalezení na obrázku 1. Bitovou mapu si můžete představit jako mřížku obrazových bodů (pixelů), přičemž barva každého z nich je dána poměrem zastoupení červené, zelené a modré barevné složky. Barvy jsou vždy zobrazovány v jistém barevném prostoru. My budeme pracovat s prostorem RGB (Red-Green-Blue). Když pixel označíme P1, pak jeho barevnou informaci zapíšeme v podobě barevného vektoru P1[R1, G1, B1], kde jednotlivé souřadnice mohou nabývat hodnot z intervalu <0, 255>. Přitom platí, že čím vyšší jsou hodnoty barevných složek pixelu, tím větší je rovněž jeho celkový jas. Jednoduchým dosazením získáme pixel s bílou barvou PBílý[255, 255, 255], nebo naopak černý pixel PČerný[0, 0, 0]. Náš algoritmus bude muset projít všechny pixely bitové mapy a invertovat je. Při inverzi dochází k transformaci barevných vektorů všech zúčastněných pixelů. Transformaci označíme C a jelikož jde o konverzi barevných vektorů, můžeme zapsat C: Px[Rx, Gx, Bx] ? Py[Ry, Gy, By], přičemž platí následující: Py[255 – Rx, 255 – Gx, 255 – Bx]. Tolik k nutné teorii počítačové grafiky. Abychom byli schopni navrhnout algoritmus, musíme nejdříve popsat vstupní data, s nimiž budeme pracovat. Nuže, jaká jsou? Odpověď není až tak složitá: našimi daty jsou všechny pixely, jejichž pomocí lze složit kompletní bitovou mapu. Dobrá, ovšem co to znamená „všechny“? Tento pojem je poněkud vágní. Při algoritmizaci musíme pracovat s přesnými údaji, takže nám nezbude nic jiného než pojem „všechny“ kvantifikovat. Pohráváme-li se s rastry, jež mají obdélníkový tvar, pak celkový počet pixelů určíme snadno – jednoduše vynásobíme počet pixelů na ose x počtem pixelů na ose y. Pokud budeme manipulovat s obrázkem o rozměrech 800 × 400 pixelů, máme jich dohromady 320 tisíc. Jelikož algoritmus musí být všeobecný, bude schopen invertovat obrázek o jakýchkoliv rozměrech. Vzhledem k tomu, že naší manipulační jednotkou bude jeden pixel, algoritmus musí vždy vědět, kolik pixelů je zapotřebí invertovat.
Ve svém jádru bude algoritmus procházet všemi dostupnými obrazovými body a provádět transformaci jejich barevných vektorů za asistence inverzního vztahu, s nímž jsme se již seznámili. Podle dalších požadavků musí být algoritmus jednoznačný. Co myslíte, je náš algoritmus takový? Zajisté je, neboť jakmile zpracujeme jeden pixel, přesouváme se na další a začneme invertovat ten. Jsme-li hotovi, přesouváme se na sousedící pixel a upravíme zase jej. Nastíněný koloběh se opakuje, až dokud algoritmus neobslouží všechny pixely bitové mapy. Když dojde k inverzi posledního pixelu, algoritmus svou činnost ukončí – nezbývají totiž již žádné další pixely, které by čekaly na své vyřízení. Tím algoritmus splňuje další stanovenou vlastnost, jíž je konečnost. A co rezultativnost? Ano, i na tu myslíme. V okamžiku, kdy algoritmus finalizuje inverzi, poskytne nám výsledek své práce, jímž je negativ původní bitové mapy. Na závěr se ještě zastavme při časové složitosti algoritmu. Náš algoritmus je doopravdy jednoduchý, což je v pořádku, protože na něm můžeme dobře demonstrovat všechny důležité aspekty algoritmizace. Ona jednoduchost však nejde ruku v ruce s optimální časovou složitostí. Řečeno prostěji, algoritmus nebude tak rychlý, jak by mohl být. Zpracováním bitové mapy po jednotlivých pixelech ztrácíme značnou porci výkonu, kterou bychom mohli získat zpět optimalizací algoritmu. O optimalizaci ještě budeme mluvit, ovšem už nyní můžeme říci, že jde o techniku zefektivnění výkonnostních charakteristik algoritmů. Pro nadšence připojujeme malou poznámku: Budete-li se chtít poohlédnout po optimalizaci inverzního algoritmu, budete muset uplatnit pokročilejší techniky, jako je kupříkladu použití transformačních matic.

Prostředky pro vyjadřování algoritmů

Algoritmy je možné reprezentovat mnoha různými prostředky. Nejsnazší je ústní sdělení algoritmu. Už se vám také stalo, že vás na silnici zastavil řidič automobilu s prosbou o radu, jak se dostat tam a tam? Autorovi těchto řádků se to stává s železnou pravidelností (četnost vyskytujících se řidičů jako by se snad ani neřídila principy teorie pravděpodobnosti). Když se ocitnete v takovéto situaci, začněte přemýšlet, jak nejlépe popsat řidiči cestu z aktuálního stanoviště až do cíle. Řidič si zpravidla vyslechne doporučení, aby jel dvě stě metrů rovně, na křižovatce pak zabočil doleva a pokračoval dál, až dokud se nedostane na kruhový objezd. Tím projede a po dalších asi pěti stech metrech by se měl dostat tam, kam míří. Pokud jste již někdy radili řidiči, pak máte zkušenost se slovním sdělováním algoritmů. Váš algoritmus řešil problém nalezení trasy z bodu A do bodu B. Algoritmus vznikl ve vaší mysli a poněvadž byl pronesen slovy, šlo o jeho ústní interpretaci. Stranou ponecháváme fakt, zda bychom mohli vytvořený algoritmus považovat za efektivní. Pokud by takový byl, určoval by optimální (a tedy nejkratší možnou) dopravní trajektorii vedoucí do cílového bodu.
Algoritmy však mohou být vyjadřovány také jinými formami. Budeme-li vycházet ze slovní reprezentace, záhy zjistíme, že slova můžeme zapsat na papír, čímž získáme písemnou reprezentaci algoritmů. Všimněte si, že algoritmus jsme bez ohledu na slovní nebo písemné pojetí vyjádřili v českém jazyce. Čeština, podobně jako jiné jazyky, jimiž mluví lidé na našem světě, se řadí k přirozeným jazykům. Kromě přirozených jazyků můžeme k reprezentaci algoritmů použít i umělé jazyky. Umělým jazykem je kupříkladu symbolický jazyk, který si můžeme vymyslet. Abeceda symbolického jazyka je složena ze symbolů, jimž přičleníme význam. Takto lze vytvořit tajný jazyk, na což přišli již Římané, když učinili své první objevy v oblasti kryptografie.
Umělým jazykem je také jakýkoliv programovací jazyk, který kromě alfanumerických znaků operuje s mnoha specifickými symboly. Je nasnadě, že jako programátoři budeme své algoritmické myšlenky znázorňovat pomocí prostředků zvoleného programovacího jazyka. Jestliže jste ještě dosud neměli tu čest pracovat s programovacím jazykem, patrně byste rádi věděli, jaký je rozdíl mezi programovacím a přirozeným jazykem. Podobně jako čeština, i programovací jazyk používá svou abecedu symbolů, z nichž jsou posléze skládány základní lexikální jednotky, které formují programové příkazy. Opět podobně jako čeština, také programovací jazyk spolupracuje s gramatickými pravidly, která dohlížejí na správnou syntaxi sestavených lexikálních jednotek. Gramatika je důležitá, neboť pečlivě kontroluje syntaktické složení programových příkazů a zakazuje použití nedovolených konstrukcí. Jeden z rozdílů, jež zaregistrujete hned ze začátku, spočívá v tom, že programovací jazyk klade veliký důraz na použití symbolů, přičemž mnoho z nich má vyloženě specifický význam. Kupříkladu jazyky C# a C++ dovolují použít symbol procent (%), ovšem v těchto jazycích nejde vůbec o měřidlo relativní četnosti dat. Místo toho se symbol % uplatňuje při zjišťování zbytku po celočíselném dělení dvou čísel. Hodnotou výrazu 10?% 3 je proto 1, neboť když budeme dělit desítku celočíselně trojkou, výsledkem bude trojka a zůstane nám jednička.
Oblíbeným prostředkem pro vyjadřování algoritmů jsou grafické metodiky, z nichž zmíníme jednu, a sice techniku vývojových diagramů. Vývojové diagramy mapují toky algoritmů, přičemž uplatňují standardizovanou a unifikovanou množinu grafických symbolů a značek. Kupříkladu algoritmus pro výpočet indexu BMI bychom mohli pomocí vývojového diagramu zakreslit tak, jak jej můžete vidět na obrázku 2.

Programovací jazyk, zdrojový kód a strojový kód

Programovací jazyk je umělý jazyk, jenž se používá pro definování sekvence programových příkazů, které lze zpracovat na počítači. Text, který v programovacím jazyce zapíšeme, se nazývá zdrojový text nebo také zdrojový kód (často se používá rovněž termín programový kód). Zdrojový kód je složen z množiny příkazů, které společně tvoří počítačový program.
Na paměti byste měli mít následující veskrze důležitou skutečnost: Algoritmus má obecnou povahu, zatímco implementace (zápis či vyjádření) algoritmu v určitém programovacím jazyce je ryze konkrétní. To je konec konců důvod, jenž nás vedl k tomu, abychom vás obeznámili s algoritmy a algoritmizací dříve, než se ponoříme do jazyků C# a C++. Obecnost algoritmů má ohromnou výhodu: Když totiž nějaký algoritmus sestavíte, můžete jej vyjádřit v libovolném programovacím jazyce! Dalším bezvadným faktem je, že algoritmy zapsané v jednom programovacím jazyce mohou být upraveny pro použití v jiném programovacím jazyce. To je pozoruhodná ukázka konvertibility algoritmů, že? Prakticky vzato, algoritmus zapsaný v jazyce C++ může být přepsán do jazyka C# (funguje to samozřejmě i obráceně). Vyřčený teorém platí pro libovolnou dvojici programovacích jazyků, ať už jde o Visual Basic a C, Fortran a COBOL nebo Javu a asembler (jazyk symbolických instrukcí).
Jeden krok algoritmu je zpravidla reprezentován jedním příkazem programovacího jazyka, ovšem nejde o postulát, tudíž situace se může v tomto ohledu měnit. Příkazy programovacího jazyka lze zkoumat z hlediska jejich syntaktického zápisu a sémantické konstrukce. Zaslechnete-li kolegy, jak diskutují o syntaxi příkazů, pak budete vědět, že jejich debata se točí kolem formálního zápisu příkazů v daném programovacím jazyce. Příkazy musí splňovat gramatická pravidla jazyka, poněvadž jinak by počítač nerozuměl, co mu hodláme sdělit. Kromě syntaxe je však významná rovněž sémantika, která vyjadřuje význam příkazu v dané syntaktické podobě. Sémantika nám tedy říká, jaký smysl má příkaz, jenž je syntakticky zapsán právě takto.
Program, nebo též aplikace, představuje reprezentaci algoritmu, jenž je zapsán prostředky vybraného programovacího jazyka. Zdrojový kód programu je pro člověka (respektive programátora) srozumitelný (viz obrázek 3).
Na obrázku 3 můžete vidět zdrojový kód snad nejjednoduššího programu v jazyce C++. S čtením kódu se prosím v tuto chvíli nijak netrapte, protože jeho smysl si vysvětlíme v příštích lekcích. Ačkoliv… ani nemusíme být programátory, abychom zjistili, že program bude zobrazovat uvítací zprávu.
Zdrojový kód je přívětivý pro vývojáře, ovšem procesor počítače (CPU) ho vůbec nedovede rozluštit. Proto je nezbytné zdrojový kód převést do tzv. strojového kódu, jenž je pro procesor plně srozumitelný. Strojový kód definujeme jako soubor číslicových instrukcí, který je procesor počítače schopen rozpoznat a uskutečnit. Strojový kód je posloupností nul a jedniček, které formují jednotlivé příkazy. Každý procesor pracuje s jistou instrukční sadou, jež vymezuje množinu přímo zpracovatelných instrukcí strojového kódu. Na obrázku 4 uvádíme vzájemnou vazbu mezi strojovým kódem a procesorem počítače.
Zdrojový kód představuje nejvyšší míru abstrakce, s níž programátoři pracují. Výhodou zdrojového kódu je jeho dobrá srozumitelnost, zejména když jej srovnáme s ekvivalentním strojovým kódem. Programátoři se tedy musí naučit vyjadřovat své myšlenky jako příkazy zdrojového kódu. Na druhou stranu, procesor nezná nic než jen čistý strojový kód. I když jsme zmínili, že zdrojový kód musí být posléze konvertován do podoby strojového kódu, zatím jsme tuto proměnu kódu brali víceméně jako výsledek mávnutí kouzelného proutku. Ačkoliv magii máme rádi, na konverzi zdrojového kódu do strojových instrukcí ve skutečnosti nic tajemného není. Jak to tedy je? Překlad zdrojového kódu v jazycích C# a C++ se dosti citelně liší. Aniž bychom se však dopustili nepřesností, můžeme říct, že zdrojový kód je nejprve zpracován překladačem (neboli kompilátorem) a pak spojen do jednoho spustitelného souboru (s příponou .exe) spojovacím programem (neboli linkerem). Překladač a linker jsou tedy těmi pomocníky, jejichž úkolem je převedení programátorem zapsaného zdrojového kódu do formy určené pro procesor počítače.

Kontrolní otázky

1?Definujte algoritmus a charakterizujte jeho základní vlastnosti.
2?Dokázali byste navrhnout algoritmus, jehož úkolem bude vypočtení součtu všech přirozených čísel? Pokud ano, vysvětlete, jak byste postupovali. Jestliže ne, uveďte proč.
3?Co rozumíte pod algoritmizací?
4?Jaké prostředky pro zápis algoritmů znáte?
5?Jaký je rozdíl mezi algoritmem a počítačovým programem?
6?Dokázali byste objasnit pojmy „zdrojový kód“ a „strojový kód“?
Praktická cvičení
1?Sestavte algoritmus, jehož pomocí si bude moci student vypočítat jednoduchý aritmetický průměr svých známek ve všech absolvovaných předmětech. Ověřte, zda zkonstruovaný algoritmus disponuje veškerými odpovídajícími vlastnostmi, jako je jednoznačnost, všeobecnost, rezultativnost a konečnost.
2?Pokuste se algoritmus vytvořený v předcházejícím cvičení zakreslit do vývojového diagramu. Jestliže byste se rádi seznámili se všemi grafickými značkami a symboly, jež se ve vývojových diagramech používají, vyhledejte si je na internetu.