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