Tomáš Hobza 6.F, 2022 - Maturitní otázky z Programování
Algoritmizace úlohalgoritmusvlastnosti algoritmuprogramzpůsoby vyjádření algoritmuabstrakcedekompoziceProgramovací jazyk - jazykové konstrukcepojmyjazykové konstrukcepříkazyProgramovací jazyk - podprogramyprototyp funkce, návratová hodnota, parametryparametrylokální a globální proměnnézásobník a fungování podprogramuProgramovací jazyk – práce se souboryproměnná pro práci se souboremzpůsoby otevírání souborů (módy)operace pro práci se souboremZobrazení dat v počítačipojem informace, jednotky pro měření informacečíselné soustavy, převody mezi soustavamipřímý, inverzní, doplňkový kódFormální jazyky, automaty pojmydělení jazykůChomského hierarchie gramatik způsoby popisu jazykuGramatikypojmyvztah mezi jazykem, gramatikou a konečným automatemChomského hierarchie gramatikModel počítače, strojové jazykyStruktura a funkce procesoru: registry, řadič, ALUvon Neumannovo schéma, Harvardská architekturainstrukční cyklusjazyk symbolických adres, assemblermetody adresování pamětimodel pamětiDynamické datové strukturypojem abstraktní datový typKonstrukce základních dynamických datových struktur a operace s nimiHromadné zpracování dat, databázeProč HZD? Úlohy HZDOrganizace souborů z pro hromadné zpracování dat (tj. obrovské soubory), přístup k souborůmSoučásti databázeEliminační metody pro řešení soustav n lineárních rovnic o n neznámýchpojmyvyjádření soustavy lineárních rovnic pomocí maticGaussova eliminační metodaGauss-Jordanova eliminační metodaIterační metody pro řešení soustav n lineárních rovnic o n neznámýchpojmyiterační výpočetJacobiho iterační metodaGauss-Seidelova iterační metodaŘešení nelineárních rovnicpojmyvyčíslení polynomu Hornerovým schématemdefinice úlohy řešení nelineárních rovnicmetodyMetoda nejmenších čtvercůpojmyprincipodvození pro konstantní a lineární funkciMetody vnitřního řazenívlastnosti řadících algoritmůalgoritmyprincip ostatních metodMetody vnitřní řazeníspecifika vnějšího řazenípojmypřímé a přirozené řazenímetody zlepšováníprincip polyfázového slučováníVyhledávací algoritmypojmysekvenční vyhledáváníbinární vyhledáváníhašovací tabulkaprincip index-sekvenčního vyhledáváníbinární vyhledávací stromsrovnání vyhledávacích metodObjektově orientované programovánípojmyzapouzdření, dědičnost, polymorfismuspraktické použití OOPOperační systémystruktura OS (vrstvy)modulární OSmultitaskingprocesy, vlákna, životní cyklus procesuPočítačové sítě - hardwarerozdělení sítídruhy sítítopologieprvky sítěmetody přístupufunkce počítačové sítěPočítačové sítě - softwaremodel ISO/OSImodel TCP/IPprotokolyinternetBooleova algebra a její využitízákladní pojmylogické funkcezákonyvyjadřování logických funkcíminimalizace logických funkcí
deklarace
definice
inicializace
proměnná
datový typ
definuje druh jakých hodnot smí proměnná nabývat
dělení:
složené (složené z jiných datových typů)
jednoduché
ukazatelové (obsahují adresu paměťového místa)
příkaz
nejmenší samostatný prvek programu
vyjadřuje činnost, která má být provedena
obsahuje proveditelný kód
skládá se z výrazů
dělení:
výraz
má nebo reprezentuje hodnotu konkrétního typu
dělení:
L-hodnota
P-hodnota
důležité operátory:
dereferenční operátor (*)
referenční operátor (&)
operátor indexování pole ([])
operátor přístupu ke složce struktury (.)
operátor přístupu ke složce přes ukazatel na strukturu (->)
operátor volání funkce (())
podprogram
větvení
rozdělení průběhu programu na základě nějaké podmínky
pro zápis podmínky používáme relační operátory (<, <=, >, >=) nebo operátory rovnosti (==, !=)
příkazy:
if
switch
cykly
opakování příkazů v závislosti na ukončovací podmínce nebo předem daném počtu opakování
dělení:
s pevným počtem opakování (for)
s podmínkou na začátku (while)
s podmínkou na konci (do … while)
prototyp funkce
návratová hodnota
druhy podprogramů
funkce
procedura
vstupní data podprogramu
druhy:
formální
skutečný
dělení dle způsobu předávání:
hodnotou
odkazem
lokální
globální
zásobník (volání)
fungování
soubor
souvislá, sekvenční posloupnost bajtů
má jméno a umístění
pamatuje si délku v souborovém záznamu (nemá na konci značku konce)
souborový záznam
proměnná typu ukazatel na soubor
standardní
speciální
otevření
čtení
po znacích
formátované
zápis
po znacích
formátované
uzavření
informace
srozumitelná a smysluplná data
interpretace dat a vztahů mezi nimi
kvantitativní vyjádření obsahu zprávy
data
jednotky pro měření informace
dělení:
poziční
nepoziční
určení, vyčíslení hodnoty
převody mezi soustavami
kódování celých čísel
přímý kód
inverzní kód
doplňkový kód
kódování desetinných čísel (nikdy nebudou přesné, nejde mít nekonečno desetinných míst)
standard IEEE 754
znaménkový bit, exponent, mantisa
syntaxe
sémantika
řetězec
věta
(formální) jazyk
množina vět (textových řetězců) nad danou, konečnou abecedou
značí se symbolem L
pro jeho popis se používá obvykle gramatika a automat
značení jazyků:
∑*
A*
A+
An
rozdělení:
deklarativní popis:
výčet
vyjmenování všech vět
generativní popis:
syntaktický diagram
grafický popis syntaxe
používané symboly: terminály, nonterminály, šipky
EBNF - rozšířená Backus-Naurova forma
používáno pro popis syntaxe programovacích jazyků
non-terminály - zapisují se slovně (písmeno, číslice, příkaz-if)
terminály - jsou uvozeny uvozovkami
pravidlo
nonterminál = varianta1 | varianta2 | varianta 3 ;
symboly v pravidlech
=
- odděluje levou a pravou stranu pravidla
|
- varianta, z non-terminálu lze jít jednou z více cest
;
- středník ukončuje pravidlo
,
- čárka ukončuje sekvenci
slovo = "a", "h", "o", "j"
{}
- výraz, který lze opakovat 0 a vícekrát
číslo = číslice, { číslice } ;
[]
- výraz, který lze opakovat 0 nebo 1 krát
[+], číslo |['-'], číslo
()
- seskupení, podvýraz
přiřazení = identifikátor , '=' , (číslo | identifikátor | řetězec) ;
-
- mínus vyjadřuje výjimku
řetězec = '"' , { znak − '"' } , '"' ;
příkaz if-else
příkaz if-else = 'if', '(', výraz, ')' , příkaz , [ 'else' , příkaz ];
identifikátor
identifikátor = znak , { znak | číslice };
blokový příkaz
blok = '{' , { příkaz } , '}' ;
gramatika
konečný automat
automat
algoritmický matematický stroj
slouží k rozhodování zda řetězce jsou věty daného jazyka
Turingův stroj
zjednodušený automat s konečným počtem stavů
využití:
uspořádaná pětice A = (S, Σ, σ, s, F)
S - konečná množina stavů automatu
∑ - konečná abeceda (množina vstupních symbolů)
σ - přechodová funkce – popisuje, do jakého stavu se automat přepne při vstupu dalšího vstupního symbolu
s ∈ S
F ⊆ S
abeceda
gramatika
matematická struktura obsahující pravidla pro generování správných vět jazyka
obsahuje: non-terminální a terminální symboly, pravidla a počáteční non-terminál
G = (N, ∑, P, S) - uspořádaná čtveřice
symboly
gramatické pravidlo
přepisovací pravidlo (zkráceně pravidlo)
Slouží pro generování vět jazyka LG
struktura CPU
procesor
řadič
ALU (aritmeticko-logická jednotka)
registry
von Neumannovo schéma
Harvardská architektura
program řídí řadič mikroprocesoru takto
jazyk symbolických adres (JSI)
assembler
INSTRUKCE operand1, operand2
operand
3 sekce
heap space
stack memory
code section
výraz pro typy dat, které jsou nezávislé na vlastní implementaci
definován názvem, množinou hodnot a množinou operací, které je možno vykonat
umožňuje vytvářet i složitější datové typy (např. zásobník, fronta a asociativní pole)
zjednodušuje a zpřehledňuje programy
datový typ ukazatel
neobsahuje data, pouze adresu na místo v paměti
dynamická datová struktura
NULL
)zásobník - LIFO
fronta - FIFO
seznam
binární vyhledávací strom
pro rychlé ukládání a vyhledávání podle klíče
strukturovaná data = párové hodnoty: klíč + hodnota
binární strom - ukazatel na kořenový uzel
vlastnosti:
operace:
průchody stromem
inorder(levý); akceSAktuálnímUzlem(); inorder(pravý);
akceSAktuálnímUzlem(); preorder(levý); preorder(pravý);
postorder(levý); postorder(pravý); akceSAktuálnímUzlem();
přidání
odebrání
vyhledání uzlu
důvodem jsou velká data (dva problémy - ukládání a zpracování)
úlohy HZD:
řazení - usnadňuje hledání
fyzické řazení - při řazení podle různých klíčů vznikají kopie
souborů
indexové soubory - obsahují odkazy na kmenový soubor řadí se
indexy, zabírají méně místa => může existovat více indexových
souborů seřazených podle jiných klíčů
výběr - hledání, zobrazení (např.: SQL databáze)
aktualizace - úprava existujícího záznamu, přidání, odstranění
interaktivní - změny se provádí přímo do souboru (při velkém
množství příliš pomalé)
dávková - rozdělení na kmenový soubor a soubor změn, je
potřeba aktualizační program, který se za určitý čas spustí a aplikuje změny do původního souboru (plynulejší, možnost stornovat)
konverze - převody mezi formáty dat
organizace souborů
vkládání záznamů do seřazené souboru
řešení: oblast přeplnění + dávkové zpracování
oblast přeplnění
vyhledávání probíha ve dvou krocích:
odstranění
řešení: změna příznaku v záznamu
logická položka - příznak aktivního/smazaného prvku
ostatní operace ignorují záznamy s příznakem smazaného prvku
fyzické odstranění provede až aktualizační program
přístup k souborům
sekvenční soubory
soubory s přímým přístupem
index-sekvenční přístup
indexový soubor
kmenový soubor - nemusí být řazený
indexový soubor
součásti
databáze (DB)
množina logicky uspořádaných dat
relační databáze
data uložena v tabulkách
řádek tabulky = záznam = popis jedné konkrétní entity reálného světa
tabulka je složená z entit, které mají své atributy
vztahy = relace
pomocí struktury tabulek a odkazy mezi záznamy
realizovány pomocí primárních a cizích klíčů
primární klíč
cizí klíč
systém řízení báze dat (SŘBD)
část DBS pro manipulaci a přístup k datům
obsahuje interpret jazyka pro:
pojmy:
numerická metoda
algoritmus popisující cestu k řešení numerické úlohy
používá se, když je analytické řešení složité, nebo náročné
řešení soustav lineárních rovnic:
eliminační metody
iterační metody
prostředky:
přesnost - přesnost výpočtů bude tak přesná, jako je přesnost výpočtů na počítači (vždy dojde k nějakému danému zaokrouhlení)
používá ekvivalentní úpravy nad rozšířenou maticí soustavy
eliminuje neznámé pod hlavní diagonálou - horní trojúhelníková matice soustavy
algoritmus:
pivotování - popřehazování řádků tak, aby v každém sloupci byla v absolutní hodnotě největší hodnotou na hlavní diagonále (ve sloupci hledám na hlavní diagonále a pod ní)
výhody
numerická metoda
přesnost
konvergence
stabilita
rekurentní vztah
k+1
předchozích hodnotalgoritmické schéma výpočtu podle rekurentního vztahu
skoro stejná Jacobiho metoda, ale nově vypočítané hodnoty zapisuji rovnou do pole starých hodnot
porovnávám přesnost před zapsáním nové hodnoty do pole (předpoklad pozitivity v rámci jedné iterace; jestli najdu nepřesnost, tak je celá iterace nepřesná)
přesnost
konvergence
operace: násobení, sčítání
časová složitost: O(n)
používá se na vyčíslení polynomů
P(x) = 0
, kde P je polynom f(x)
hledáme hodnotu a takovou, že f(a) = 0
metoda půlení intervalů
v každém kroku se chyba aproximace sníží dvakrát
výhody:
nevýhody:
metoda tětiv (regula falsi)
výhody:
nevýhody:
metoda sečen
newtonova metoda
aproximace
interpolace
součet vzdáleností od bodů je lineární funkce a nemá minimum, proto součet čtverců kvadratická funkce a navíc snadno derivovatelná
postup:
liší se tím, co dosadím za f()
f: y = b
f: y = a*x + b
časová složitost - T(n)
funkce závislá na rozměru řešené úlohy
n - rozměr úlohy (např.: počet prvků řazeného pole)
výsledkem je počet elementárních kroků algoritmu
odhad časové složitosti - O(T(n))
prostorová složitost
přirozenost
Řadící algoritmus je přirozený, pokud platí, že čas pro řazení seřazených dat je menší než čas pro řazení náhodně uspořádaných dat a ten je menší než čas pro řazení opačně seřazených dat.
stabilita
Řadící algoritmus je sekvenční, pokud k prvkům přistupuje sekvenčně, tj. navštěvuje vždy jen vedlejší prvky (následující nebo předchozí) a neskáče doprostřed řazeného pole.
Insertion sort
se zarážkou
optimalizace procesu vkládání
vyrobím pole o jeden prvek delší a na pozici nula vložím vkládaný prvek (data tudíž začínají na indexu 1)
O(n2), je přirozený, je sekvenční, je stabilní, prostorová složitost - lineární, in situ
Selection sort
Bubble sort
s pamětí poslední výměny - Ripple sort
Shaker sort
O(n2), základní verze není přirozená, je sekvenční, je stabilní, prostorová složitost - lineární, in situ
Merge sort
Quick sort
pivot
dělení DNF - Dutch National Flag
pole rozděleno na tři části
O(n*log n) - pro průměrný případ, přirozenost závisí na dělení a výběru pivota, jde udělat sekvenční (ale zde není), není stabilní, prostorová složitost - OS(log n)
data ve vnější paměti
sekvenční zpracování
pro data, která se nevejdou do paměti, tudíž nejde použít vnitřní řazení
pomalejší, než vnitřní řazení
princip: přesouvání řazených prvků mezi sekvenčními soubory na disku
Xpáskové
Yfázové
přímé slučování
3pásková, 2fázová metoda
1 vstupní páska a 2 pomocné pásky
krok je rozdělen do 2 fází
rozdělovací fáze
slučovací fáze
přirozené slučování
vyvážené slučování
vícepáskové slučování (vícecestné vyvážené slučování)
n pásek, kde n je sudé číslo
n/2cestné, jednofázové slučování
klíč
v neseřazeném poli
sekvenční procházení prvků datové struktury dokud nenaleznu shodu nebo nedojdu na konec
v seřazeném poli
s zarážkou
vyžaduje seřazené pole
intuitivní princip “hledání ve slovníku”
princip:
hledám v daném intervalu
podívám se na prostřední prvek v intervalu
rekurzivně se zanořím do jedné z polovin v závislosti na porovnávání hledaného klíče se středovým prvkem intervalu
má-li interval délku jedna není v něm hledaný klíč, pole hledaný klíč neobsahuje
nejrychlejší algoritmus nad seřazeným polem, O(log2 n)
nefunguje v neseřazeném poli
klíče jsou pomocí hašovací funkce přepočítány na indexy v poli)
hašovací funkce
hash(obrovské číslo) -> malé čislo
v ideálním případě je jednoznačná - neexistuje stejný hash pro různé klíče
je obtížné mít spolehlivou hašovací funkci a je v praxi nedosažitelné nemít kolize
pro rychlé ukládání a vyhledávání podle klíče
strukturovaná data = párové hodnoty: klíč + hodnota
binární strom - ukazatel na kořenový uzel
vlastnosti:
operace:
průchody stromem
inorder(levý); akceSAktuálnímUzlem(); inorder(pravý);
akceSAktuálnímUzlem(); preorder(levý); preorder(pravý);
postorder(levý); postorder(pravý); akceSAktuálnímUzlem();
přidání
odebrání
vyhledání uzlu
sekvenční vyhledávání
výhody:
nevýhody:
se zarážkou
výhody:
nevýhody:
v seřazeném poli - rychlejší, ale je třeba pole napřed seřadit (pomalejší přidávání prvků)
binární vyhledávací strom
výhody:
nevýhody:
hašovací tabulka
výhody:
nevýhody:
třída
předek - potomek
objekt
atribut
metoda
zapouzdření
dědičnost
polymorfismus
jádro (kernel)
systémové knihovny a programy
uživatelské rozhraní
moduly zefektivňují vývoj operačního systému
monolitické jádro
mikrojádro
základní moduly:
modul přidělování paměti
modul přidělování procesoru
vyžaduje privilegovaný režim procesoru
plánovač úloh
modul správy periferií
modul správy souborů
sleduje stav souborů
rozhoduje
přiděluje soubor pro použití (otevření souboru)
vyžaduje vrácení souboru (zavření)
metoda přepínání procesů tak, aby se zdálo, že běží současně
kooperativní
preemptivní
procesy
vlákna
životní cyklus procesu
spojové
nespojové
podle rozsahu
PAN - personal area network
LAN - local area network
MAN - metropolitan area network
WAN - wide area network
podle řízení
klient - server
hierarchické sítě s vyhrazenými servery
peer to peer
charakterizuje způsob propojení jednotlivých uzlů sítě
kruh (ring)
každý počítač je propojen se dvěma sousedy
pakety se posílají jedním směrem
vždy vysílá jen jeden počítač, ostatní posílají a přeposílají
token ring
sběrnice (bus)
počítače připojeny k průběžnému vedení
vyslaná zpráva se šíří všemi směry, na konci vedení je pohlcena koncovkou (rezistorem)
realizována pomocí koaxiálních kabelů
kolize
hvězda
kombinované
pasivní
aktivní
opakovač (repeater)
rozbočovač (hub)
přepínač (switch)
most (bridge)
směrovač (router)
brána (gateway)
token ring
token bus
CSMA/CD
OSI - Open System Interconnection
vrstvy (7):
princip komunikace
každá vrstva přidává k datům další údaje
= SDU + PCI
mezi vrstvami
mezi uzly sítě
zjednodušení modelu ISO/OSI
vrstvy (4):
vrstva síťového rozhraní
síťová vrstva
transportní vrstva
aplikační vrstva
model přenášených dat
metody adresování
MAC
IP
DNS
definice
TCP/IP
IP - Internet Protocol
TCP - Transmission Control Protocol
spojový a spolehlivý přenos dat
fáze: navázání spojení, přenos dat, ukončení spojení
paket
UDP - User Datagram Protocol
poskytuje nespolehlivou transportní službu pro aplikace, které spolehlivost nepotřebují
fáze: přenos dat
datagram
vymezení
struktura
adresování mezi uzly v internetu
logická hodnota
logická proměnná
logická funkce
logický obvod
logický člen (hradlo)
základní:
logické výrazy
y = ab + bcd + abd
Komutativní zákon
a+b = b+a
ab = ba
Asociativní zákon
(a+b)+c = a+(b+c)
(ab)c = a(bc)
Distributivní zákon
a(b+c) = ab+ac
a+bc = (a+b)(a+c)
Zákon vyloučeného třetího
a+!a = 1
a!a = 0
Zákon neutrálnosti nuly a jedničky
a+0 = a
a1 = a
Zákon agresivity nuly a jedničky
a+1 = 1
a0 = 0
Zákon tautologie
a+a = a
aa = a
Zákon absorbce
a+ab = a
a(a+b) = a
Zákon absorbce negace
a+!ab = a+b
a(!a+b) = ab
Zákon dvojité negace
!!a = a
De Morganovy zákony
!(a+b) = !a!b
!(ab) = !a+!b
užití:
k minimalizaci logických výrazů
převody do normálních forem:
rovnice
všechny logické funkce jde vyjádřit dvěma způsoby:
pravdivostní tabulka
tabulka, kde
Karnaughova mapa
způsoby: