3. Imperativní programování, programovací jazyk C, abstraktní datové typy a spojové struktury
Faiglovy hloupe otazky a dalsi materialy k uceni: https://drive.google.com/drive/u/0/folders/0B33G3DM4Z57yck1za1BOT2Z0UlE

Imperativní programování

Imperativní programování je jedno z programovacích paradigmat, neboli způsobů, jak jsou v programovacím jazyku formulována řešení problémů. Imperativní programování popisuje výpočet pomocí posloupnosti příkazů a určuje přesný postup (algoritmus), jak danou úlohu řešit. Program je sadou proměnných, jež v závislosti na vyhodnocení podmínek mění pomocí příkazů svůj stav. Základní metodou imperativního programování je procedurální programování, tyto termíny bývají proto často zaměňovány.

Procedurální programování

Je to poddruh imperativního programování ale tyto názvy se často zaměňují. V procedurálním programování se program skládá z vícero procedur. Je to modernější přístup (vesměs veškeré současné programy jsou procedurální), protože umožňuje přehlednější a čitelnější kód. Druhým podtypem imperativního programování je objektově orientované programování.
Pro procedurální programování jsou typické for, while a if pro imperativní pak spíše goto.
Procedural 
Object-oriented 
procedure 
method 
record 
object 
module 
class 
procedure call 
message

Programovací jazyk C

C je nízkoúrovňový, kompilovaný. Je dostatečně mocný na většinu systémového programování (ovladače a jádro OS), přičemž zbytek lze dořešit tzv. inline assemblerem, tedy metodou zápisu assembleru přímo do kódu. Zdrojový kód C je přitom mnohem čitelnější než assembler, je jednodušší ho zapsat a navíc je daleko snáze přenositelný na jiné procesory a počítačové architektury. Proto jsou často operační systémy, překladače, knihovny a interprety vysokoúrovňových jazyků implementovány právě v C.
Jazyk C byl vyvinut v Bell Labs mezi lety 1972 a 1973 D. Ritchiem.
Ukládání dat je v C řešeno třemi základními způsoby: statickou alokací paměti (při překladu), automatickou alokací paměti na zásobníku a dynamickou alokací na haldě (heap) pomocí knihovních funkcí. Jazyk disponuje jen minimální abstrakcí nad alokací: s pamětí se pracuje přes ukazatel, který drží odkaz na paměťový prostor daného typu proměnné, ale je na něm možné provádět aritmetické operace (tyto operace ale neoperují s ukazateli přímo na úrovni jednotlivých bajtů, nýbrž přihlíží k velikosti datového typu, na který ukazují – existují ale také ukazatele typu void *, které mohou odkazovat na jakýkoliv typ dat uložený v paměti.).

C - Obecná charakteristika

C je nízkoúrovňový, kompilovaný, relativně minimalistický programovací jazyk.
  • Univerzální programovací jazyk nižší až střední úrovně 
  • Strukturovaný (funkce + data)
  • Zdrojový kód přenositelný (portable), nutno ctít podmínky přenositelnosti, překladač ne (je závislý na platformě)
  • Rychlý, efektivní, kompaktní kód, mnohdy nepřehledný
  • Pružný a výkonný, ale nestabilní
  • Podpora 
  • konstrukcí jazyka vysoké úrovně (funkce, datové struktury)
  • operací blízkých assembleru (ukazatele, bitové operace,…) 
  • Slabá typová kontrola
  • Málo odolný programátorovým chybám
  • Dává velkou volnost programátorovi v zápisu programu 
  • Výhoda: dobrý programátor vytvoří efektivní, rychlý a kompaktní kód
  • Nevýhoda: špatný nebo unavený programátor, pak nepřehledný program náchylný k chybám
  • Nutná vlastní správa paměti
  • silná vazba na HW, využití jeho možností (inline assembler), špatná nebo žádná podpora národních zvyklostí
  • Použití: 
  • operační systémy
  • řídicí systémy
  • grafika
  • databáze
  • programování ovladačů grafických, zvukových a dalších karet
  • programování vestavěných - embeded systémů
  • číslicové zpracování signálů (DSP)
  • Program začíná funkcí main(), je základní funkcí programu, každý program musí obsahovat právě jednu tuto funkci
  • char, short, int, long, float, double
  • programový přepínač switch(), case, default, break
  • C je kompilovaný jazyk 
  • Zdrojový kód je nezávislý (portable) na platformě (málo závislý)
  • Spustitelný kód je závislý na platformě