000a ‐ Základní pojmy související s programováním a algoritmizací - zizanek/github-tz-is-2026-sk1 GitHub Wiki
Úvod do programování a algoritmizace: Průvodce základními pojmy
Tato stránka slouží jako startovní můstek pro každého, kdo s programováním začíná. Cílem je pochopit, co se pod jednotlivými pojmy doopravdy skrývá, dříve než začneme psát první řádky kódu.
1. Algoritmus a jeho základní vlastnosti
- Ze života: Kuchařský recept nebo návod na sestavení skříně z IKEA. Pokud je v receptu napsáno: „Vezmi 2 vejce, rozklepni je do misky, míchej 2 minuty, osol špetkou soli,“ i člověk, který nikdy nevařil, připraví míchaná vajíčka. Pokud by v návodu stálo jen „Udělej nějak vajíčka,“ výsledek bude pokaždé jiný nebo žádný.
- Odborně: Algoritmus je přesný, jednoznačný a konečný postup krok za krokem, který pro zadané vstupní hodnoty vede vždy ke správnému výsledku v konečném čase.
- Klíčová vlastnost: Počítač nepřemýšlí, nedomýšlí si kontext a nemá intuici. Udělá naprosto přesně to, co mu napíšete – i kdyby to byla zjevná hloupost.
Základní vlastnosti algoritmu:
Aby mohl být jakýkoliv postup považován za skutečný algoritmus, musí splňovat tato pravidla:
- Elementárnost (jednoduchost kroků): Postup se skládá z konečného počtu jednoduchých a pro vykonavatele (počítač) srozumitelných kroků.
- Determinovanost (jednoznačnost): V každém okamžiku běhu algoritmu musí být naprosto zřejmé, jaký krok má následovat. Pro stejná vstupní data musí algoritmus dospět vždy ke stejnému výsledku.
- Konečnost (finitnost): Běh algoritmu musí vždy po konečném počtu kroků skončit. Algoritmus nesmí uváznout v nekonečné smyčce.
- Rezultativnost (výslednost): Algoritmus musí po svém skončení předat konkrétní výsledek (řešení dané úlohy).
- Obecnost (hromadnost): Algoritmus neřeší pouze jeden izolovaný případ (např. „sečti 3 a 5“), ale celou třídu stejných úloh pro různé povolené vstupy (např. „sečti libovolná dvě celá čísla $A$ a $B$“).
- Vstup a výstup (input / output): Algoritmus přebírá definovaná vstupní data ze zadané množiny a transformuje je na výstupní data.
2. Program a programovací jazyk
- Ze života: Notový zápis skladby a hudební nástroj. Skladatel má v hlavě melodii, zapíše ji pomocí univerzálních notových značek na papír a hudebník (klavír) skladbu přesně zahraje. Programovací jazyk (např. C#) je takový notový zápis, kterému rozumí jak člověk, tak vývojové prostředí.
- Odborně: Programovací jazyk je formalizovaný jazyk se striktními syntaktickými pravidly pro zápis instrukcí. Program je konkrétní text (zdrojový kód) zapsaný v tomto jazyce, který realizuje vybraný algoritmus.
3. Kompilace a sestavení (Build)
- Ze života: Překladatel z cizího jazyka. Představte si knihu napsanou v češtině (zdrojový kód), kterou překladatel celou přeloží do japonštiny (strojový kód – nuly a jedničky pro procesor) a vytiskne novou knihu. Tuto novou knihu už může japonský čtenář (počítač) číst přímo, aniž by u toho původní autor musel stát.
- Odborně: Kompilátor (Compiler) přeloží lidsky čitelný zdrojový kód (
.cs) do instrukcí, kterým rozumí běhové prostředí (.NET Runtime) a procesor počítače. Během kompilace navíc probíhá přísná syntaktická kontrola – pokud zapomenete středník nebo závorku, překladač odmítne program sestavit.
4. Proměnná, identifikátor a datový typ
- Ze života: Označená plastová krabička s přesným tvarem.
- Identifikátor (název krabičky): Nápis nalepený na krabičce (např.
first,again,sum). Slouží k tomu, abyste do ní mohli kdykoliv sáhnout, podívat se dovnitř nebo její obsah vyměnit za nový. V profesionálním kódu volíme názvy vždy v angličtině a tak, aby bylo na první pohled jasné, co je uvnitř. - Datový typ: Určuje vnitřní tvar krabičky.
- Krabička s označením
firstmá výřez přesně na jedno celé číslo (int). Nemůžete do ní vložit rohlík ani dlouhý dopis. - Krabička s označením
againje určena na písmena a text (string).
- Krabička s označením
- Identifikátor (název krabičky): Nápis nalepený na krabičce (např.
- Odborně:
- Proměnná: Pojmenované místo v operační paměti (RAM) určené k uchování hodnoty během běhu programu.
- Identifikátor: Jedinečné jméno, kterým proměnnou (ale i metodu nebo třídu) v kódu označujeme a odkazujeme se na ni.
- Datový typ: Určuje druh dat, která proměnná uchovává, rozsah povolených hodnot, množství alokované paměti a operace, které s ní lze provádět.
| Datový typ | Co reprezentuje | Příklad hodnoty |
|---|---|---|
int |
Celá čísla | -5, 0, 42 |
double |
Desetinná čísla | 3.14, -0.5 |
string |
Textový řetězec | "Ahoj svete" |
bool |
Logická hodnota (pravda/nepravda) | true, false |
5. Větvení / Podmínka (if / else)
- Ze života: Křižovatka se semaforem nebo rozhodování ráno před odchodem z domu: „Pokud venku prší, vezmi si deštník. Jinak si vezmi sluneční brýle.“ Jedna ze dvou možností nastane vždy, obě současně nikdy.
- Odborně: Řídicí konstrukce, která umožňuje programu vybrat jednu z větví kódu na základě vyhodnocení logického výrazu (
truenebofalse).
6. Cyklus (Smyčka / Loop)
- Ze života: Míchání těsta nebo běhání koleček na atletickém oválu: „Dokud je v těstě mouka, míchej.“ Jakmile mouka zmizí, přestaneš míchat a pokračuješ dalším krokem receptu.
- Odborně: Řídicí struktura, která opakovaně vykonává blok instrukcí, dokud je splněna zadaná podmínka:
- Cyklus
while: Podmínka se testuje před každým průchodem. Pokud podmínka neplatí hned na začátku, tělo cyklu se neprovede ani jednou. - Nekonečný cyklus (Infinite loop): Chyba v návrhu algoritmu, kdy podmínka nikdy nepřestane platit a program bez zastavení opakuje tytéž instrukce (zamrzne).
- Cyklus
7. Běžná chyba (Bug) vs. Výjimka (Exception)
- Ze života:
- Syntaktická chyba: Gramatická chyba ve větě, kvůli které vám druhý nerozumí („Já jít zítra včera.“). Kompilátor vás zastaví hned při pokusu o spuštění.
- Běhová výjimka (Exception): Řídíte auto podle plánu, ale uprostřed cesty chybí most (např. program chce převést text
"ahoj"na celé číslo nebo dělit nulou). Auto spadne do propasti – program okamžitě havaruje. - Logická chyba (Bug): Auto bez nehod dorazí do cíle, ale do úplně jiného města, protože v mapě byla špatně nakreslená šipka (program nespadne, ale spočítá špatný výsledek).
- Odborně: Cílem dobrého programátora je psát kód tak, aby eliminoval logické chyby a běhové výjimky předvídal pomocí defenzivního programování (např. bezpečné načítání vstupu přes
int.TryParse).
8. Ladění kódu (Debugging)
- Ze života: Zpomalený videozáznam sporného momentu ve fotbale. Místo abyste sledovali zápas v plné rychlosti, zastavíte čas přesně v okamžiku faulu, krok za krokem posouváte snímky a detailně zkoumáte postavení každého hráče na hřišti.
- Odborně: Proces hledání a odstraňování chyb v programu za pomoci nástroje Debugger. Umožňuje zastavit běh aplikace na zvoleném řádku (Breakpoint), procházet kód instrukci po instrukci (Krokování) a přímo sledovat proměnné v paměti v reálném čase.
9. Integrované vývojové prostředí (IDE)
- Ze života: Špičkově vybavená truhlářská nebo kutilská dílna. Kód můžete napsat i v obyčejném Poznámkovém bloku (stejně jako prkno můžete pižlat kapesním nožíkem). V moderní dílně (IDE) máte ale po ruce stůl se svěrákem, laserové pravítko, elektrickou pilu, odsávání pilin i sadu ochranných brýlí. Všechno máte na jednom místě, po ruce a sladěné dohromady.
- Odborně: IDE (Integrated Development Environment) je softwarový balík sdružující všechny nástroje nutné pro vývoj do jednoho rozhraní:
- Chytrý editor kódu: Zvýrazňuje syntaxi, doplňuje kód (IntelliSense) a ihned červeně podtrhává chyby.
- Propojení s kompilátorem: Umožňuje přeložit a sestavit projekt stiskem jediné klávesy.
- Integrovaný debugger: Umožňuje zastavovat program a procházet řádky bez externích nástrojů.
- Příklady: Visual Studio, JetBrains Rider, nebo modulární editor Visual Studio Code doplněný o příslušná rozšíření pro daný jazyk (např. C#).
10. Konzole a terminál (Příkazový řádek)
- Ze života: Vysílačka dispečera versus dotykový displej mobilu. Když klikáte na ikony a tlačítka v grafickém prostředí (okna, myš), jste v roli běžného uživatele, který si vybírá z předem připravené nabídky. Když ale sednete k terminálu, mluvíte s počítačem napřímo – zadáte přesný textový příkaz a počítač jej okamžitě vykoná. Je to nejrychlejší cesta pod kapotu operačního systému bez zbytečných klikacích oklik.
- Odborně: Konzole / Terminál (CLI – Command Line Interface) je textové uživatelské rozhraní sloužící k zadávání příkazů operačnímu systému a spouštění programů bez grafického rozhraní (GUI).
Proč je terminál pro programátora zcela zásadní:
- Nezávislost na grafickém klikání: Každé klikací tlačítko ve vývojovém prostředí na pozadí stejně jen spustí textový příkaz (např.
dotnet run). Programátor, který ovládá terminál, rozumí tomu, co se v systému doopravdy děje, a není bezradný, když tlačítko selže. - Rychlost a automatizace: Vytvořit nový projekt (
dotnet new console -o muj-program), přeložit kód nebo spustit testy trvá v terminálu sekundu a lze to snadno automatizovat do skriptů. - Svět serverů a cloudu: Většina webových serverů, cloudových služeb a kontejnerů (např. Docker, Linux servery) vůbec žádnou grafickou plochu ani myš nemá. Spravují se výhradně vzdáleným terminálem.
- Práce s verzovacími nástroji: Standardem profesionální práce je systém Git (např. GitHub), jehož plnou sílu, rychlost a diagnostiku chyb máte plně v rukou právě přes příkazový řádek.