Fakulta aplikovaných věd, ZČU

PPA přednášky - výpisky


Co umí počítač?

Provádět miliardy výpočtů za sekundu (FLOPS - floating point operations per second)

Průměrný dnešní osobní počítač (klasické domácí nebo kancelářské PC či notebook) dokáže provést přibližně 1 až 10 bilionů výpočtů za sekundu (1 až 10 TFLOPS) 

Pamatovat si miliardy znaků

Počítač potřebuje znalosti (data), aby přesně věděl, co má dělat. (deklarativní - fakta, imperativní - postupy -> například konstanta vs. algoritmus)


Co je postup/algoritmus?

Konečná sekvence jednoznačných kroků, popisující všechny stavy, které mohou nastat, která řeší daný problém.

Algoritmus má svoji korektnost (správnost při řešení problému), míru univerzálnosti (opakovatelnou použitelnost na podobné problémy) a míru efektivity (úspornost)


Způsob vyjádření algoritmu?

Slovně, pseudokódem, vývojovým diagramem (specialita VZÚ :D), programovacím jazykem


Algoritmizace

1) Formulace problému (formulace požadavků, určení vstupních hodnot a požadovaných výsledků)

2) Analýza problému (zjištění, zda je úloha řešitelná a vstupní data dostačující)

3) Vytvoření algoritmu (sestavení přesného postupu pro zpracování úlohy)

(Předpřipravený vývojový diagram může být základ pro přípravu práce v nějakém programovacím jazyce)

4) Sestavení programu (vytvoření programu na základě algoritmu)

5) Odladění programu (otestování a oprava případných chyb v programu)


Testování a odlaďování: Nutnost představit si nebo znát problematické případy, testovat jestli při nich program neselže (zadání špatných vstupních dat, různé faily kvůli výpočetním nepřesnostem, matematicky nedefinované operace jako dělení nulou, odmocňování záporných čísel atd.)



Deklarace proměnné

Vytvoření pojmenovaného místa v paměti s určitým typem pro ukládání dat

Datový typ: například integer, float, string, boolean, tuple


Přiřazení

Uložení konkrétní hodnoty do proměnné. Může jít o hodnotu jiné proměnné, výsledek nějakého složitějšího výrazu, návratovou hodnotu podprogramu atd. Přiřazení propojí jméno s hodnotou.

Proměnné abstrahují výraz, zjednoduší kód, kód lze snadněji číst a měnit, hodnotu lze používat v kódu opakovaně.


Výrazy

V programování mohou být nejen číselné (matematické) výrazy, ale také pravdivostní (booleova algebra) a textové: "1" + "1" = "11"

Poznámka: Reálná čísla (float) jsou problematická, zaokrouhluje se na určitý počet desetinných míst podle dané normy nebo nastavení. To může způsobovat numerické problémy.


Podprogramy/procedury/funkce/metody

Podprogram se spustí teprve, když jej někdo zavolá a je opakovatelně využitelný.

Anatomie podprogramu: název, parametry, návratový typ (pokud chceme něco vracet, podprogram také může pouze spustit jinou fci, třeba print(), ale žádná jiná data nevracet) : moje_fce(formální parametry)

Každý podprogram má svůj zásobník (část paměti) pro proměnné (deklarované uvnitř těla nebo vložené jako parametry)

Při zavolání podprogramu se vytvoří nový zásobník (zásobníkový rámec). Po ukončení podprogramu jsou všechny jeho proměnné zrušeny.

Rekurze může zjednodušit některé postupy, ale většinou na úkor úspornosti. Obecně je spíše snaha ji nepoužívat, ale někdy je užití výhodné. Procházení hiearchických struktur nebo rozdělení problému na menší části a jejich následné spojování je typiké užití rekurze.


Cykly

Větvení (podmínka) umožňuje volit různé cesty, ale cesta je jednosměrná, nelze se vrátit.

Někdy chceme opakovat část kódy, ale nevíme počet opakování a nebo ho víme, ale je příliš veliké.

Nekonečný cyklus lze ovládat pomocí break a continue

While - neznámý počet opakování daný podmínkami, for - známý počet opakování. For má řídící proměnnou, například pojmenovanou i, která postupně nabývá vyšší hodnot. V každé iteraci cyklu se proměnná zvýší o jedna. Důležité je, že k řídící proměnné lze v daném cyklu přistupovat. V cyklu while si musíme informaci o počtu iterací sehnat samy.

Iterace - seznámit se s tímto termínem blíže


Počítač

Stroj, který umí mechanicky vykonávat operace.

Dělí se na jednoúčelové a programovatelné. Jednoúčelový je třeba kalkulačka. Do programovatelného lze uložit instrukce a pak je spouštět.

Jacquardův stroj
Jacquardův stroj

Programovatelný počítač

Posloupnost instrukcí je uložena v počítači (množina instrukcí je předem daná)

Instrukce se spoušťí v pořadí. - Možnost posouvat se v seznamu instrukcí a zastavit, když program dojde na konec.


Přepis algoritmu do počítače

Zápis pomocí programovacího jazyka, který je víceméně čitelný pro člověka.

(Počítač mluví pomocí nul a jedniček, člověk mluví přirozeným jazykem (češtinou, angličtinou atd.) Programovací jazyk je kompromis, který se snaží najít vhodný střed pro porozumění jak pro počítač tak člověka. LLMs v tomto smyslu funguje jako překladač mezi přirozenou řečí a řečí počítače a odstraňuje nutnosti užití "středového jazyka". - Moje poznámka)

Překlad instrukcí na instrukce počítače.

Syntax(e) - popisuje stavbu věty/výrazu či složitější celky.

Sémantika - rozhoduje jestli syntaticky správný výraz má význam.

Logika - význam syntakticky správného výrazu bez sémantických chyb, v programovacím jazyku je význam pouze jeden




Programovací jazyk Python

Nástroj MyPy - kontrola datových typů na základě anotací (doplňujícíh informací)

MyPy
MyPy


Logické operátory

aritmetické operátory
aritmetické operátory
priorita operátorů
priorita operátorů
porovnávací operátory
porovnávací operátory
logické operátory
logické operátory


Stringy (řetězce)

Posloupnost písmen, číslic, mezer a dalších speciálních znaků uzavřená do uvozovek či apostrofů.

Zrušení odřádkování, obojí se vypíše na jednom řádku.
Zrušení odřádkování, obojí se vypíše na jednom řádku.

String interpolation. - Možnost zapisovat hodnoty a proměnné přímo do rětězce. (f-stringy)


Další užitečné věci

input a jeho ošetření
input a jeho ošetření
vývojové assert
vývojové assert
while True - break (cyklus proběhne 2x)
while True - break (cyklus proběhne 2x)
for cyklus + funkce range()
for cyklus + funkce range()
Anotace parametrů a návratové hodnoty v podprogramu (lepší kontrola nad chováním programu, 2 u anotace znamená defaultní hodnotu pokud žádná nebude zadána)
Anotace parametrů a návratové hodnoty v podprogramu (lepší kontrola nad chováním programu, 2 u anotace znamená defaultní hodnotu pokud žádná nebude zadána)


Pole v pythonu


Vícerozměrná pole

Vytvoření matice
Vytvoření matice
Procházení jednotlivými pozicemi matice
Procházení jednotlivými pozicemi matice
Slovník, který ukládá celé seznamy.
Slovník, který ukládá celé seznamy.



Data a jejich reprezentace