Algoritmus: **Konečný** a **jednoznačný soubor instrukcí**, které vedou k řešení daného problému.
## Vlastnosti algoritmů:
- **Konečnost**: Algoritmus má konečný počet kroků.
- **Jednoznačnost**: Každý krok algoritmu je jasně definovaný a neexistují žádné nejednoznačnosti.
- **Determinismus**: Pro stejné vstupní data algoritmus vždy produkuje stejný výstup.
- **Vstup a výstup**: Algoritmus má definované vstupní a výstupní data.
- **Účinnost**: Algoritmus by měl řešit problém v co nejkratším čase a s co nejmenšími nároky na paměť.
## Rozdělení programovacích jazyků
### Podle paradigmatu:
- **Imperativní**: Zaměřují se na změnu stavu (C, C++, Java).
- **Deklarativní**: Zaměřují se na popis požadovaného stavu (Prolog, Haskell).
- **Funkční**: Zaměřují se na vyhodnocování funkcí (Haskell, Lisp).
- **Objektově** orientované: Zaměřují se na objekty a jejich interakce (C++, Java, Python).
### Podle implementace:
- **Kompilované**: Přeloží se do strojového kódu před spuštěním (C, C++).
- **Interpretované**: Vykonávají se za běhu interpretem (Python, JavaScript).
## Programovací styly
**Strukturované programování:** Používá základní struktury (sekvence, větví, cykly).
**Objektově orientované programování:** Zaměřuje se na objekty a jejich vlastnosti.
**Funkční programování:** Používá funkce jako základní stavební kameny programů.
**Logické programování:** Pracuje s logickými formulemi a pravidly.
**Skriptování**: Používá se pro automatizaci úloh a vývoj webových aplikací.
## Kromě výše uvedených témat byste se měli také zaměřit na:
- **Datové struktury:** Typy dat a způsoby jejich organizace.
- **Algoritmy:** Řešení běžných programovacích úloh.
- **Vývojové nástroje:** IDE, kompilátory, interprety.
- **Testování programů:** Ověřování správnosti programů.