Algoritmy a programovanie III

Vyučujúci

Zaradený v študijných programoch

Výsledky vzdelávania

Po absolvovaní predmetu študenti budú mať:
Znalosti
A. Rozumieť syntaktickým základom jazyka C++ a sémantickým základom objektovo-orientovaného programovania v integrovanom vývojovom prostredí.
B. Orientovať sa v princípoch a fungovaní vyhľadávacích, usporiadavacích, šifrovacích a numerických algoritmov a poznať ich implementačné postupy v jazyku C++.
C. Orientovať sa v zložitejších dátových štruktúrach, ako sú dvojrozmerné pravidelné a nepravidelné dynamické polia či jednosmerný lineárny zoznam, a porozumieť ich využitiu v algoritmickej praxi.
Zručnosti
D. Analyzovať zadanie programátorskej úlohy, navrhnúť algoritmus jej riešenia a implementovať ho pomocou syntaktických pravidiel C++ a objektovo-orientovanej paradigmy.
E. Vybrať vhodnú dátovú štruktúru pre uloženie dát podľa charakteru riešenej úlohy.
F. Pomocou debugera analyzovať správanie finálneho programu s implementovaným algoritmom a testovacími dátami.
G. Zostaviť z otestovaného zdrojového kódu finálny program pre cieľový operačný systém a hardvérovú platformu.
Spôsobilosti
A. Samostatne navrhovať, implementovať a validovať algoritmy a dátové štruktúry v jazyku C++.
B. Využívať objektovo-orientované princípy pri návrhu riešení a zabezpečiť logickú konzistenciu programu.
C. Profesionálne prezentovať a obhajovať navrhnuté riešenia programátorských úloh.
D. Vypracovať technickú dokumentáciu presne opisujúcu navrhnuté a implementované riešenie.

Stručná osnova predmetu

1) Základné koncepty objektovo orientovaného programovania
2) Ďalšie programovacie techniky a črty orientovaného programovania
3) Práca s dátovými prúdmi pomocou objektov knižničných tried v programe vytvorenom v jazyku C++, dedičská hierarchia knižničných tried pre prácu s dátovými prúdmi
4) Dedičnosť, polymorfizmus a kompozícia objektov v objektovo orientovanom C++ programe
5) Dynamická alokácia a dealokácia pamäte, polia a ukazovatele, adresová aritmetika a referencie v C++ programe
6) Algoritmy, skupiny (druhy) algoritmov
7) Zložitosť (výpočtová náročnosť) algoritmov
8) Vybrané vyhľadávacie algoritmy, ich princípy a fungovanie v C++ programe
9) Vybrané usporiadavacie algoritmy, ich princípy a fungovanie v C++ programe
10) Jednosmerný lineárny zoznam, jeho princíp a fungovanie v C++ programe
11) Vybrané metódy šifrovania informácie, ich princípy a fungovanie v C++ programe
12) Vybrané algoritmy numerického derivovania matematických funkcií, ich princípy a fungovanie v C++ programe
13) Vybrané algoritmy numerického integrovania matematických funkcií, ich princípy a fungovanie v C++ programe

Odporúčaná literatúra

1. Bancila, M. (2020). Modern C++ programming cookbook (2nd ed.). Packt Publishing. ISBN 978-1-80020-898-8.
2. Murach, J., & Murach, T. (2022). Murach’s C++ programming (2nd ed.). Mike Murach & Associates. ISBN 978-1-943872-96-1.
3. Stroustrup, B. (2013). The C++ programming language (4th ed.). Addison-Wesley. ISBN 978-0-321-56384-2.
4. Horton, I., & Horton, P. (2019). Beginning C++ programming: Modern C++ at your fingertips! Apress. ISBN 978-1-78712-494-3.
5. JURÍK, P. Programovanie v jazyku C++ rýchlo a jednoducho. Merkur, 2019. ISBN 978-80-89996-02-5

Sylabus predmetu

1. Základné koncepty objektovo orientovaného programovania. (Triedy, objekty, zapuzdrenie, abstrakcia, konštruktory, deštruktory. Porovnanie OOP s procedurálnym prístupom.) Cvičenie: Implementácia jednoduchej triedy „Zamestnanec“. 2. Ďalšie črty OOP – dedičnosť, polymorfizmus, preťaženie operátorov. (Význam opakovateľného použitia kódu, virtuálne funkcie, dynamická viazanosť.) Diskusia: Kedy používať dedičnosť vs. kompozíciu. 3. Práca s dátovými prúdmi a knižnicou iostream. (Hierarchia stream objektov, ifstream/ofstream, manipulátory, formátovanie výstupu.) Cvičenie: Zápis a čítanie z textového súboru. 4. Dedičnosť, polymorfizmus a kompozícia objektov. (Kombinácia OOP techník, návrhové vzory – kompozícia vs. dedičnosť v praxi.) Cvičenie: Model tried „Osoba“, „Zamestnanec“, „Študent“. 5. Dynamická alokácia a ukazovatele. (Operátory new a delete, polia a adresovanie, pointer aritmetika, referencie.) Diskusia: Bezpečnosť práce s pamäťou v C++. 6. Úvod do algoritmov, ich triedenie a použitie. (Klasifikácia algoritmov: triediace, vyhľadávacie, optimalizačné.) Cvičenie: Implementácia lineárneho vyhľadávania. 7. Zložitosť algoritmov a notácia Big O. (Analýza času a priestoru, porovnanie algoritmov.) Cvičenie: Porovnanie výkonnosti lineárneho vs. binárneho vyhľadávania. 8. Vybrané vyhľadávacie algoritmy. (Binárne vyhľadávanie, interpolácia, exponenciálne hľadanie.) Cvičenie: Implementácia binárneho vyhľadávania s overením rozsahu. 9. Vybrané triediace algoritmy. (Bubble sort, insertion sort, merge sort.) Cvičenie: Porovnanie rýchlosti triediacich algoritmov. 10. Jednosmerný lineárny zoznam. (Základné operácie: vloženie, odstránenie, prehľadávanie, dynamická správa pamäte.) Cvičenie: Vytvorenie vlastnej triedy pre lineárny zoznam. 11. Základy kryptografie a šifrovania. (Caesarova šifra, XOR, substitučné šifry.) Diskusia: Základy zabezpečenia údajov. 12. Numerické derivovanie funkcií. (Princípy numerického výpočtu derivácie, metóda konečných rozdielov.) Cvičenie: Odvodenie derivácie z reálnej funkcie. 13. Numerické integrovanie funkcií. (Pravouhlá a lichobežníková metóda.) Cvičenie: Porovnanie presnosti integrovacích metód.

Podmienky na absolvovanie predmetu

Cvičenia (40% z hodnotenia predmetu)
Náplňou cvičení je riešenie zadaných programátorských úloh. Okrem týchto úloh študenti riešia samostatné domáce programátorské zadania tematicky nadväzujúce na prednášky a riešené programátorské úlohy z cvičení. Svoje riešenia samostatných domácich zadaní, s ich technickým opisom, študenti komentujú a v prípadnej diskusii obhajujú pred ostatnými študentmi ich študijnej skupiny. Riešenia samostatných programátorských domácich zadaní študentov sú ohodnotené (10% z hodnotenia predmetu). Riešením a hodnotením samostatných domácich zadaní sa overuje dosiahnutá úroveň výsledkov vzdelávania B, C, D, E, F, G, H, I. V rámci cvičení študenti absolvujú samostatnú písomnú prácu, riešenie programátorského zadania v integrovanom vývojovom prostredí, ktorá je ohodnotená (30% z hodnotenia predmetu). Riešením a hodnotením problémovej úlohy zo samostatnej písomnej práce sa overuje dosiahnutá úroveň výsledkov vzdelávania B, C, D, E, F, G.
Skúška (60% z hodnotenia predmetu)
Skúška sa skladá z dvoch častí:
- zo samostatnej skúškovej písomnej práce, riešenie programátorského zadania v integrovanom vývojovom prostredí, a obhajoby tohto riešenia (50% z hodnotenia predmetu). Riešením a hodnotením problémovej úlohy zo samostatnej skúškovej písomnej práce a obhajobou tohto riešenia sa overuje dosiahnutá úroveň výsledkov vzdelávania B, C, D, E, F, G, H.
- z ústnej časti, kde študenti odpovedajú na teoretické otázky zo syntaxe jazyka C++, z princípov objektovo orientovaného programovania v jazyku C++, princípov a fungovania vybraných vyhľadávacích, usporiadavacích, šifrovacích, numerických algoritmov a z princípov a fungovania zložitejších dátových štruktúr, ako sú napr. dvojrozmerné pravidelné a nepravidelné dynamické polia a jednosmerný lineárny zoznam (10% z hodnotenia predmetu). Ústnou časťou skúšky a jej hodnotením sa overuje dosiahnutá úroveň výsledkov vzdelávania A, B a C.

Pracovné zaťaženie študenta

Pracovné zaťaženie študenta (v hodinách): 6 kreditov x 26 h = 156 h
Rozdelenie pracovného zaťaženia študenta
účasť na cvičeniach, seminároch 52 h,
príprava na semináre 26 h,
spracovanie domácich zadaní 12 h,
príprava na samostatnú písomnú prácu 18 h,
príprava na skúšku 48 h.

Jazyk, ktorého znalosť je potrebná na absolvovanie predmetu

Slovenský jazyk

Dátum schválenia: 04.03.2025

Dátum poslednej zmeny: 06.11.2025

Dátum schválenia: 04.03.2025

Dátum poslednej zmeny: 06.11.2025