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:

  1. Elementárnost (jednoduchost kroků): Postup se skládá z konečného počtu jednoduchých a pro vykonavatele (počítač) srozumitelných kroků.
  2. 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.
  3. 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.
  4. Rezultativnost (výslednost): Algoritmus musí po svém skončení předat konkrétní výsledek (řešení dané úlohy).
  5. 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$“).
  6. 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 first má 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 again je určena na písmena a text (string).
  • 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 (true nebo false).

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).

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í:

  1. 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.
  2. 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ů.
  3. 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.
  4. 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.