PB071 Principy nízkoúrovňového programování

Fakulta informatiky
jaro 2023
Rozsah
2/2/1. 4 kr. (plus ukončení). Doporučované ukončení: zk. Jiná možná ukončení: z.
Vyučováno prezenčně.
Vyučující
doc. RNDr. Petr Švenda, Ph.D. (přednášející)
Mgr. Roman Lacko (cvičící)
Mgr. Luděk Bártek, Ph.D. (cvičící)
Bc. Patrik Bašo (cvičící)
Bc. Martin Bendel (cvičící)
Bc. Adéla Bierská (cvičící)
Martin Cmiel (cvičící)
Bc. Tamara Čierniková (cvičící)
Michal Duda (cvičící)
Bc. Juraj Fiala (cvičící)
Bc. Matej Focko (cvičící)
Jan Glos (cvičící)
Mgr. Samuel Gorta (cvičící)
Bc. Kristína Hanicová (cvičící)
Bc. Veronika Hanulíková (cvičící)
Aleš Horna (cvičící)
Bc. Lubomír Hrbáček (cvičící)
Miroslav Jaroš (cvičící)
Bc. Tomáš Jaroš (cvičící)
Mgr. Jan Jedelský (cvičící)
Martin Jediný (cvičící)
Mgr. Vojtěch Jelínek (cvičící)
Bc. Tomáš Jusko (cvičící)
Bc. Petr Kadlec (cvičící)
Ing. Michaela Kecskésová (cvičící)
Matej Kučera (cvičící)
Oliver Leško (cvičící)
Bc. Juraj Marcin (cvičící)
Bc. Ota Mikušek (cvičící)
Adam Mydla (cvičící)
Mgr. Patrick Ondika (cvičící)
Miroslav Patlevič (cvičící)
Bc. Bruno Petrus (cvičící)
Bc. Daniel Rozehnal (cvičící)
RNDr. Lukáš Ručka (cvičící)
Mgr. Radoslav Sabol (cvičící)
Bc. Jindřich Sedláček (cvičící)
Mgr. Bc. Roman Solař (cvičící)
Michal Šoltis (cvičící)
Štěpán Šonovský (cvičící)
Bc. Dávid Šutor (cvičící)
Ing. Bc. et Bc. Přemysl Till (cvičící)
Mgr. Denis Varga (cvičící)
Filip Bartek (pomocník)
Pavol Biačko (pomocník)
Jiří Buchta (pomocník)
Boris Hajduk (pomocník)
Patrik Horák (pomocník)
Jakub Judiny (pomocník)
Mgr. Jakub Bartolomej Košuth (pomocník)
Tomáš Menšík (pomocník)
Bc. Ondřej Metelka (pomocník)
Mgr. Imrich Nagy (pomocník)
Bc. Adam Parák (pomocník)
Lukáš Poul (pomocník)
Mgr. Peter Stanko (pomocník)
Vít Špunda (pomocník)
David Štorek (pomocník)
RNDr. Martin Ukrop, Ph.D. (pomocník)
Bc. Jan Zatloukal (pomocník)
Garance
doc. RNDr. Petr Švenda, Ph.D.
Katedra počítačových systémů a komunikací – Fakulta informatiky
Dodavatelské pracoviště: Katedra počítačových systémů a komunikací – Fakulta informatiky
Rozvrh
Po 13. 2. až Po 15. 5. Po 16:00–17:50 D2, Po 16:00–17:50 D1
  • Rozvrh seminárních/paralelních skupin:
PB071/01: Pá 17. 2. až Pá 12. 5. Pá 10:00–11:50 B011, L. Bártek
PB071/02: Út 14. 2. až Út 9. 5. Út 18:00–19:50 B011, M. Bendel
PB071/03: Út 14. 2. až Út 9. 5. Út 18:00–19:50 A215, A. Bierská, V. Hanulíková
PB071/04: Čt 16. 2. až Čt 11. 5. Čt 18:00–19:50 B311, A. Bierská, L. Hrbáček
PB071/05: St 15. 2. až St 10. 5. St 12:00–13:50 A219, S. Gorta, Š. Šonovský
PB071/06: St 15. 2. až St 10. 5. St 16:00–17:50 A219, S. Gorta, M. Kecskésová
PB071/07: Čt 16. 2. až Čt 11. 5. Čt 16:00–17:50 A219, T. Čierniková, K. Hanicová
PB071/08: Čt 16. 2. až Čt 11. 5. Čt 18:00–19:50 A219, K. Hanicová, M. Šoltis
PB071/09: Po 13. 2. až Po 15. 5. Po 18:00–19:50 A219, M. Jaroš
PB071/10: Út 14. 2. až Út 9. 5. Út 14:00–15:50 B130, M. Cmiel, V. Jelínek
PB071/11: Po 13. 2. až Po 15. 5. Po 18:00–19:50 B011, V. Jelínek, M. Patlevič
PB071/12: Čt 16. 2. až Čt 11. 5. Čt 16:00–17:50 B011, J. Jedelský, P. Kadlec
PB071/13: Út 14. 2. až Út 9. 5. Út 8:00–9:50 B011, T. Jaroš, R. Lacko
PB071/14: Út 14. 2. až Út 9. 5. Út 8:00–9:50 B130, J. Glos, J. Marcin
PB071/15: Čt 16. 2. až Čt 11. 5. Čt 8:00–9:50 B011, M. Duda, L. Ručka
PB071/16: St 15. 2. až St 10. 5. St 12:00–13:50 B011, A. Horna, L. Ručka
PB071/17: Čt 16. 2. až Čt 11. 5. Čt 10:00–11:50 A219, M. Jediný, R. Sabol
PB071/18: St 15. 2. až St 10. 5. St 12:00–13:50 B130, P. Ondika, R. Sabol
PB071/19: Út 14. 2. až Út 9. 5. Út 10:00–11:50 B011, M. Kučera, D. Šutor
PB071/20: Pá 17. 2. až Pá 12. 5. Pá 12:00–13:50 A215, P. Till
PB071/21: Čt 16. 2. až Čt 11. 5. Čt 16:00–17:50 B116, D. Varga
PB071/22: St 15. 2. až St 10. 5. St 18:00–19:50 B011, J. Fiala, A. Mydla
PB071/23: Pá 17. 2. až Pá 12. 5. Pá 8:00–9:50 B130, M. Focko
PB071/24: Čt 16. 2. až Čt 11. 5. Čt 10:00–11:50 B011, P. Bašo
PB071/25: Pá 17. 2. až Pá 12. 5. Pá 8:00–9:50 B011, O. Mikušek
PB071/26: Út 14. 2. až Út 9. 5. Út 16:00–17:50 B011, T. Jusko
PB071/27: St 15. 2. až St 10. 5. St 10:00–11:50 A219, T. Jusko
PB071/28: St 15. 2. až St 10. 5. St 14:00–15:50 A219, J. Fiala, A. Mydla
PB071/29: Út 14. 2. až Út 9. 5. Út 16:00–17:50 C416, O. Leško
PB071/30: St 15. 2. až St 10. 5. St 18:00–19:50 B411, O. Leško
PB071/31: Út 14. 2. až Út 9. 5. Út 12:00–13:50 B130, B. Petrus
PB071/32: Út 14. 2. až Út 9. 5. Út 16:00–17:50 B311, D. Rozehnal
PB071/33: Út 14. 2. až Út 9. 5. Út 12:00–13:50 B011, J. Sedláček
PB071/34: St 15. 2. až St 10. 5. St 14:00–15:50 B130, T. Jaroš
PB071/35: St 15. 2. až St 10. 5. St 10:00–11:50 B130, M. Duda, P. Kadlec, záložní skupina
PB071/36: St 15. 2. až St 10. 5. St 16:00–17:50 B011, M. Cmiel, R. Solař, záložní skupina
PB071/37: St 15. 2. až St 10. 5. St 8:00–9:50 A219, M. Focko, záložní skupina
Předpoklady
U studentů se tohoto kurzu se předpokládá základní znalost algorimizace v programovacím jazyce Python, případně jiném. Současně se předpokládá znalost operačního systému Unix/Linux na uživatelské úrovni, neboť odevzdání domácích příkladů a část cvičení probíhá pod Unixem/Linuxem.
Omezení zápisu do předmětu
Předmět je nabízen i studentům mimo mateřské obory.
Mateřské obory/plány
předmět má 60 mateřských oborů, zobrazit
Cíle předmětu
Na konci tohoto kurzu bude student:
Ovládat základní syntaxi jazyka C podle norem ANSI a ISO/IEC.
Schopen dekomponovat zadaný problém a prakticky jej implementovat.
Schopen na základní úrovni používat moderní vývojové nástroje (IDE, debugger, verzovací nástroje...);
Znát základy POSIX C funkcí.
Komentovat kód s možností automatického generování dokumentace.
Ovládat základní dobré programátorské návyky.
Překládat programy pod OS typu Unix/Linux i Windows.
Výstupy z učení
Student bude po absolvování předmětu schopen:
- psát programy v jazyce C;
- používat základní vývojové nástroje včetně IDE, debuggeru, verzovacího systému a dynamické analýzy použití paměti;
- rozumět způsobu vykonávání kódu na úrovni CPU a paměti;
- používat dynamickou alokaci paměti a její korektní uvolňování;
- psát programy s využitím dobrých programátorských návyků;
Osnova
  • Historické návaznosti jazyka C. Jeho vztah k operačnímu systému Unix.
  • Překladače jazyka C pod Unixem/Linuxem a MS Windows, vývojové prostředí, debugger, verzovací systémy, dokumentace Doxygen, dobré programátorské návyky, testování.
  • Datové typy, konstanty, deklarace, výrazy. Přiřazovací výrazy a příkazy.
  • Základní struktura programu. Příkazy preprocesoru. Komentáře. Řídicí struktury. Nejdůležitejší příkazy vstupu a výstupu.
  • Pole, ukazatatele, funkce. Volání hodnotou, předání operandu pomocí ukazatele.
  • Textové řetězce a manipulace s nimi. Standardní knihovna jazyka C podle norem ANSI a ISO/IEC.
  • Deklarace, uživatelské datové typy. Dynamická alokace paměti.
  • Vstup a výstup, práce se soubory, práce se širokými znaky.
  • Návaznost na OS Unix/Linux a Windows. Základy POSIX C knihovny. Implementace na různých OS.
  • Ovládání klávesnice a myši.
  • Bezpečné a defensivní programování.
  • Automatické i manuání testování.
Literatura
  • Kernighan, Brian W. - Ritchie, Dennis M. Programovací jazyk C. Brno: Computer Press, 2006. ISBN 80-251-0897-X
  • HEROUT, Pavel. Učebnice jazyka C. Online. 3. upr. vyd. České Budějovice: KOPP, 1996. 269 s. ISBN 80-85828-21-9. [citováno 2024-04-23] info
  • HEROUT, Pavel. Učebnice jazyka C.. Online. České Budějovice: KOPP, 1998. 236 s. ISBN 80-85828-50-2. [citováno 2024-04-23] info
  • DRESSLER, Miroslav. Programovací jazyky GNU : volně šiřitelná programátorská prostředí : Fortran, jazyk C, Pascal, GRX, DJGPP, RHIDE, RSX, VESA, EMX, MAKE. Online. 1. vyd. Praha: Computer Press, 1998. xix, 225. ISBN 8072260707. [citováno 2024-04-23] info
Záložky
https://is.muni.cz/ln/tag/FI:PB071!
Výukové metody
Výuka probíhá formou kombinace teoretických přednáškových lekcí s praktickými cvičeními, doplněnými samostatnými domácími programátorskými úlohami procvičujícími probranou látku z přednášek.
Metody hodnocení
Pro zisk zápočtu a možnost absolvovat závěrečnou zkoušku student během celého semestru vypracuje 6 domácích úloh (alespoň čtyři z nich na nenulový počet bodů) a jedno závěrečné praktické programovací cvičení obsahující znalostní test a programovací úlohu. Pro úspěšné absolvování předmětu je požadován zisk alespoň 85 bodů a úspěšné splnění požadavků cvičení (docházka, body, zápočtový příklad).
Ve cvičeních studenti samostatně vytvářejí zadané programy (obvykle s nutností dokončit doma nebo v počítačové učebně). Zpracování příkladů je bodováno podle předem oznámených kritérií. Doporučené ukončení předmětu je zkouška, která probíhá formou testu prováděného na počítači. Podmínkou připuštění k testu je získání zápočtu ze cvičení a samostatné úspěšné zpracování závěrečného příkladu. Klasifikace závisí na bodovém hodnocení práce ve cvičeních, kvalitě zpracovaného závěrečného příkladu a na výsledku testu.
Účast ve cvičeních je povinná.
Navazující předměty
Informace učitele
https://www.fi.muni.cz/pb071/
Předmět je určen pro studenty, kteří chtějí získat základní znalosti jazyka C, principů nízkoúrovňového programování a chtějí typicky později studovat předmět PB161 (Programování v jazyce C++).
Další informace jsou během semestru zveřejněny na webovské stránce předmětu.


Přednášejícího můžete kontaktovat osobně v místnosti A406 nebo e-mailem na adrese svenda@fi.muni.cz

Další komentáře
Studijní materiály
Předmět je vyučován každoročně.
Nachází se v prerekvizitách jiných předmětů
Předmět je zařazen také v obdobích podzim 2002, jaro 2003, jaro 2004, jaro 2005, jaro 2006, jaro 2007, jaro 2008, jaro 2009, jaro 2010, jaro 2011, podzim 2011, jaro 2012, podzim 2012, jaro 2013, podzim 2013, jaro 2014, jaro 2015, jaro 2016, jaro 2017, jaro 2018, jaro 2019, jaro 2020, jaro 2021, jaro 2022, jaro 2024.