

Po tomto posledním termínu zkoušky už budou všechny známky (tak jak vychází ze získaných bodů) zapsány do STAGu bez možnosti změny.
( |
Stránky pro studenty předmětu KIV/PC | ) |
Tyto stránky spravují přímo vyučující předmětu a jsou tedy tím "nejčerstvějším" zdrojem informací. Údaje uvedené ve STAGu či Courseware1 nemusejí být aktuální. Řiďte se, prosím, pokyny uvedenými na těchto stránkách.
V zimním semestru akademického roku 2024/2025 jsou pro studenty předmětu Programování v jazyce C důležité a závazné tyto termíny:
Termín | Datum |
---|---|
Mezní termín odevzdání semestrální práce bez penalizace (včasné odevzdání) |
Ne 05. 01. 2025, 23:59:59 |
Mezní termín odevzdání semestrální práce s 50% penalizací (pozdní odevzdání) |
Ne 12. 01. 2025, 23:59:59 |
Ostatní závazné termíny se shodují s celouniverzitními (např. mezní termín získání zápočtu, mezní termín vykonání zkoušky a další).
Avizovaný jednorázový rychlokurz práce s profesionálním typografickým systémem TeX/LaTeX proběhne
ve čtvrtek 7. 11. 2024 od 15:45 (přibližně do 18:30) v UF-124 v budově FST
– zde si můžete stáhnout leták v PDF a v sekci LaTeX prezentaci z přednášky a některé další materiály.
Znalost LaTeXu je pro studenta naší fakulty dle našeho názoru téměř nezbytností – výhody tohoto geniálního software pro přípravu dokumentů oceníte zejména při psaní bakalářské či diplomové práce. K seznámení s LaTeXem můžete využít materiály v sekci LaTeX.
V minulých letech valná většina průšvihů, které skončily špatnou známkou nebo nějak hůř, vyplynula z toho, že dotyčný student nechal řešení objevivšího se problému na poslední chvíli. Rádi vám pomůžeme, pokud to bude jen trochu možné, ale řešte s námi své problémy včas...
Přejeme Vám hodně úspěchů při studiu.
Kamil Ekštein a František Pártl
(vaši vyučující)
1) Stanovisko garanta předmětu Programování v jazyce C k podpoře systému Courseware: Dokud systém nebude přehlednější a jednodušší, nebude fungovat bezchybně a dostatečně rychle a nebude obsahovat všechny potřebné komponenty (jako např. sandbox k automatické validaci semestrálních prací), nebude pro potřeby předmětu využíván. Považujte, prosím, informace, které jsou v Courseware k předmětu Programování v jazyce C případně uvedené, za zastaralé a neplatné.
Předmět Programování v jazyce C (STAG-kód KIV/PC) si klade za cíl seznámit studenty s programováním v jazyce C – tedy ve vysoce přenositelném nízkoúrovňovém kompilovaném imperativním procedurálním jazyce, který vznikl v letech 1969 – 1973 v Bellových laboratořích AT&T díky úsilí Kena Thompsona, Dennise Ritchieho a Briana Kernighana. Hlavním důvodem vzniku jazyka byl probíhající vývoj operačního systému UNIX, jehož podstatná část je v jazyce C naprogramována.
Díky relativně přímé projekci zdrojového kódu v jazyce C na strojový kód cílového počítače (a tedy snadné konstrukci překladače a rychlému překladu) s sebou nese programování v tomto jazyce řadu specifik a úskalí, kterým je věnována v předmětu KIV/PC odpovídající pozornost. Student by měl absolvováním předmětu nejen získat znalosti potřebné pro programování v jazyce C v podobě dané zejména normou ANSI X3.159-1989 (ANSI C/C89) a ISO/IEC 9899:1999 (C99), ale i mnohem obecnější přehled, který mu umožní pracovat s prakticky libovolným nízkoúrovňovým jazykem, a seznámit se s obecnými principy nízkoúrovňového a systémového programování (tedy hlavně s mechanismy přímého přístup do paměti prostřednictvím ukazatelů, alokace a dealokace paměťových bloků, atp.).
Ačkoliv řada "odborníků" již před mnoha lety prorokovala jazyku C brzký konec, stále platí (možná trochu překvapivě), že je to jeden z nejpoužívanějších programovacích jazyků na světě – v některých obdobích dokonce vůbec ten nejpoužívanější: Lze to ověřit např. v tzv. TIOBE Indexu na stránkách společnosti TIOBE, která se specializuje na objektivní analýzu kvality software. Jazyk C se s C++, Javou a Pythonem pravidelně již několik let střídá na prvním místě. Důvodem je mimo jiné také to, že v Javě virtuální stroj Javy nenapíšete a drtivá většina knihoven Pythonu je napsaná v C.
Lexika a syntax jazyka ANSI C a C99 (řídicí konstrukce, definice datových typů, deklarace
proměnných, výrazy, funkce). Práce s ukazateli a správa paměti. Standardní knihovna
ANSI C a (částečně) C99: Vstupně-výstupní operace, operace s řetězci a znaky (a locale),
ovládání souborového systému a práce se soubory, matematické funkce, interakce programu
s běhovým prostředím (datum a čas, chybové stavy, řízení života procesu, proměnné prostředí,
signály). Programátorský model procesoru (a související partie assembleru procesorů rodiny Intel 80x86).
Preprocesor jazyka C a podmíněný překlad, překladové moduly. Návaznost překladače na okolí,
linkování modulů vytvořených v jiných jazycích (zejména assembleru), paměťové modely.
Ladění programů a odstraňování chyb. Problémy přenositelnosti (zejména mezi platformami
Win32/64 a UNIX/Linux). Mechanismus překladu a sestavování – makefile. Pomocné
vývojové nástroje (splint, valgrind, debugger, profiler, ...).
V případě dostatku času na konci semestru: Základy programování aplikací s grafickým
uživatelským rozhraním v jazyce C za pomoci frameworků na tvorbu uživatelských rozhraní –
knihovny GTK, Nuklear,
případně jiné.
Na předmět Programování v jazyce C logicky i obsahově navazuje předmět Programování v jazyce C++ (STAG-kód KIV/CPP). Přednášející jsou navzájem názorově kompatibilní a kamarádí se – předměty jsou tedy dobře sladěné. Pokud vás tedy jazyk C zaujme a budete chtít pokračovat ve studiu jeho objektově orientovaného nástupce, určitě si zapište i předmět KIV/CPP.
Přednáší, cvičí a zkouší: | Ing. Kamil Ekštein, Ph.D. — KEx |
E-mail: keksteinkiv•zcu•cz | |
Kancelář: UC310 | |
Konzultační hodiny: Út 11:00 – 12:00, St 11:00 – 12:00 | |
Telefon: (+420) 377 63 2406 |
|
Dále cvičí a zkouší: | Ing. František Pártl — FPa |
E-mail: fpartlntis•zcu•cz | |
Kancelář: UN522 | |
Konzultační hodiny: Po 10:00 – 11:00, St 10:00 – 11:00 | |
Telefon: (+420) 377 63 2597 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
7:30 8:15 |
8:25 9:10 |
9:20 10:05 |
10:15 11:00 |
11:10 11:55 |
12:05 12:50 |
13:00 13:45 |
13:55 14:40 |
14:50 15:35 |
15:45 16:30 |
16:40 17:25 |
17:35 18:20 |
18:30 19:15 |
19:25 20:10 |
|
Po | KEx UC333 |
KEx UC333 |
||||||||||||
Út | KEx UC333 |
KEx UC333 |
přednáška UP104 |
FPa UC333 |
FPa UC333 |
|||||||||
St | XXx XX000 |
XXx XX000 |
XXx XX000 |
XXx XX000 |
XXx XX000 |
XXx XX000 |
KEx UC333 |
KEx UC333 |
FPa UC333 |
FPa UC333 |
FPa UC333 |
FPa UC333 |
XXx XX000 |
XXx XX000 |
Čt | XXx XX000 |
XXx XX000 |
||||||||||||
Pá | XXx XX000 |
Student má nárok na zápočet tehdy, jestliže odevzdá včas semestrální práci dle zvoleného zadání a získá za ní (za program a dokumentaci dohromady) celkem alespoň 21 bodů. Nejvíce lze získat za semestrální práci 70 bodů. Body se při hodnocení práce odečítají od maxima, tj. student přichází s čistým štítem (a plným počtem bodů) a za nalezené chyby v práci jsou mu body vyučujícím strhávány podle předem známého chybovníku.
Studenti vypracovávají své semestrální práce samostatně. Spolupráce více studentů na semestrální práci není dovolena a ani není vhodná, neboť právě samostatným programováním řešení zadaného problému se nejlépe připravíte jak na zkoušku, tak na budoucí programátorskou praxi.
Značná pozornost je při hodnocení semestrální práce věnována její dokumentaci. Kvalita (nebo spíš nekvalita) dokumentace může představovat klidně rozdíl celého stupně výsledné známky v závěrečném hodnocení. Technická dokumentace je vizitkou inženýra, a proto její přípravě věnujte maximální úsilí. Hodnotí se i schopnost odborného vyjadřování v českém (případně anglickém) jazyce. Je to dobrá průprava k bakalářské či diplomové práci.
V případě mimořádných výkonů studenta (vynikající nadprůměrná práce, originální řešení zadaného problému, nadstandardní aktivita při cvičení, atp.) udělí vyučující v průběhu či na konci semestru další body, které se započítávají do celkového výsledku.
Bližší informace o semestrální práci
Zkouška probíhá u počítače – student dostane za úkol vytvořit nebo doplnit krátký program v jazyce C a demonstrovat jeho bezchybnou funkčnost. U zkoušky je možné získat až 30 bodů podle kvality odvedené práce (hodnotí se porozumění problému, čitelnost kódu, dodržování kultury jazyka C, efektivita řešení a správné použití konstrukcí jazyka C). Čas na vypracování je 120 minut (což je více než dostatečné – dobře připravení studenti úlohu vyřeší do hodiny); po vypršení tohoto časového limitu se strhává z hodnocení zkoušky 1 bod za každou další minutu.
Zkoušku skládá student zcela samostatně. Může ovšem používat studijní materiály, které si přinese (poznámky z přednášek, učebnice a jiné knihy, atp.). Tyto materiály si ale studenti během zkoušky nesmí mezi sebou předávat. Vzájemná komunikace studentů při zkoušce není dovolena žádným způsobem (tedy ani pomocí mobilních telefonů, e-mailu, instant messagingu ani jiných podobných prostředků) a postihuje se okamžitým ukončením zkoušky s výsledkem "nevyhověl".
Protože zkouška je silně stresující okamžik, který může významně negativně ovlivnit výkon studenta, podílí se na celkové známce jen z 30%. Student, který poctivě a pilně pracoval v průběhu semestru, a má tudíž dostatek bodů za semestrální práci, nemůže být z předmětu vyhozen, v nejhorším případě je hodnocen známkou "dobře".
Celkové hodnocení studenta (získaná známka) je odvozeno od konečného součtu bodů získaných v průběhu semestru, za semestrálku a u zkoušky:
Počet bodů | Hodnocení |
---|---|
50 a méně | nevyhověl |
51 – 70 | dobře |
71 – 88 | velmi dobře |
89 a více | výborně |
Bodové rozpětí zhruba respektuje gaussovskou distribuci (jedniček je nejméně). Své hodnocení (bodové i slovní vyučujícím po provedené kontrole semestrální práce) a výslednou známku najde každý student v sekci Výsledky podle svého osobního čísla.
Kliknutím na symbol "stáhnout" ( ) si můžete vybraný materiál uložit na disk počítače, případně otevřít přímo v prohlížeči. K zobrazení dokumentu ve formátu PDF (Portable Document Format) použijte aplikaci Adobe Acrobat Reader (na počítačích v univerzitní síti je obvykle nainstalovaná), kterou můžete získat zdarma na webu společnosti Adobe Systems Inc.
Prezentace neodpovídají zcela přesně jedné 3-hodinové přednášce z předmětu Programování v jazyce C – spíše pokrývají určité souvislé tématické celky. Obvykle se tedy nestane, že první týden semestru se odpřednáší přednáška číslo 1, druhý týden číslo 2, atd.
Obsah a provedení přednášek © Kamil Ekštein, 2006 – 2025. Všechna práva vyhrazena. Žádná část přednášek nesmí být publikována a šířena žádným způsobem a v žádné podobě bez výslovného svolení autora. Přednášky, prosím, používejte v souladu se zákonem č. 121/2000 Sb., Zákon o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon), v platném znění.
V přednáškách se mohou přes veškerou snahu a péči, kterou jim věnuji, vyskytovat chyby, ať už formální nebo věcné. Pokud nějakou chybu najdete, budu vám vděčný, když mě na ní upozorníte (osobně nebo e-mailem).
Obsah a provedení přednášek © Kamil Ekštein, 2006 – 2013. Všechna práva vyhrazena. Žádná část přednášek nesmí být publikována a šířena žádným způsobem a v žádné podobě bez výslovného svolení autora. Přednášky, prosím, používejte v souladu se zákonem č. 121/2000 Sb., Zákon o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon), v platném znění.
Cvičení probíhají u počítačů v učebně UC333. Nenahrazují výklad – cílem cvičení je ověřit si znalosti nabyté na přednášce (příp. samostudiem) v praxi naprogramováním řešení zadaných úkolů. Cvičit je tedy možné i doma (účast na cvičení není povinná). Na cvičení se tedy píšou krátké programy v jazyce C, a oproti samostatné práci doma zde máte možnost konzultovat správnost "svého" přístupu k řešení se cvičícím a s kolegy. K získání zápočtu a úspěšnému složení zkoušky z předmětu Programování v jazyce C není účast na cvičení nutná, ale může významně napomoci. Dlouhodobě se potvrzuje významná korelace mezi účastí na cvičení a výslednou známkou.
Uvedená čísla týdnů jsou pouze orientační – v důsledků změn v rozvrhu (např. z důvodů státních svátků, apod.) se mohou uvedené úlohy řešit v jiném kalendářním týdnu.
Cvičení | Týden | Úkoly |
---|---|---|
1. | 39. | Úvodní informace, seznámení s předmětem, diskuse o programátorských schopnostech a dovednostech a technikách, jak je zlepšovat, vstupní dotazník. |
2. | 40. | Ovládání překladačů jazyka C (Embarcadero Dev-C++, Microsoft Visual C/C++, GCC); tvorba jednoduchého programu ve stylu "Hello World" – základní řídicí konstrukce jazyka; překlad a sestavování jednoduchých programů (s cílem dokonale pochopit mechanismus překladu modulů a jejich propojení linkerem); stručný úvod do LaTeXu (volitelně). |
3. | 41. | Psaní jednoduchých programů s využitím základních datových typů a řídicích konstrukcí jazyka C; převody čísel mezi polyadickými soustavami; převody reprezentací čísel (IEEE float a bitový zápis) – využití ukazatelů na základní datové typy; práce s polem. |
4. | 42. | Procvičení práce s ukazateli – na typ funkce (program "jednoduchá kalkulačka") a na typ struktura (jednosměrně zřetězený spojový seznam). |
5. | 43. | Překlad výrazů s prefixovým/postfixovým operátorem snížení/zvýšení hodnoty – ověření chování překladače; dynamická správa paměti, práce s pointery, binární vyhledávací strom. |
6. | 44. | make, hlubší procvičení práce s ukazateli – tvorba knihovny maticových operací a demonstrační program, který ověří její správnou funkčnost. |
7. | 45. | Implementace zásobníku, práce s řetězci, převod textu na číslo, zpracování aritmetických výrazů – konstrukce jednoduchého zásobníkově orientovaného parseru. |
8. | 46. | Implementace prefixového stromu (trie), ověření funkčnosti vytvořením frekvenčního slovníku z rozsáhlého textu a/nebo uložením rozsáhlého existujícího slovníku. |
9. | 47. | Použití standardního rozšíření jazyka ANSI C – funkcí void *bsearch(...) a void qsort(...) z knihovny stdlib.h, práce s rozsáhlejšími soubory dat. |
10. | 48. | Linkování modulů v různých jazycích na úrovni .obj souborů, práce s debuggerem obecně, x32dbg/x64dbg (nebo podobný nástroj), základy reverzního inženýrství – lokalizace určitého úseku kódu, jeho úprava/odstranění. |
11. | 49. | rezerva/konzultace (obsah bude upřesněn) |
12. | 50. | rezerva/konzultace (obsah bude upřesněn) |
13. | 51. | "zkouška na nečisto" |
Řešení (nebo jeho nástin) níže uvedených úkolů na jednotlivá cvičení najdete na konci této stránky – v části Řešení úkolů. K co nejlepšímu zvládnutí jazyka C je však žádoucí, abyste úkoly zpracovávali opravdu pokud možno samostatně a přiložená řešení použili až jako poslední pomoc nebo k ověření správnosti svého postupu.
V archivu se nachází vypracované úkoly ze cvičení 2 až 7. Jedná se o variany, které byly naprogramované společně na cvičení. Neznamená to, že by u řady úloh nebyl možný jiný postup – právě naopak, předložená řešení představují často jen jednu z mnoha možností.
Řešení úkolů – archiv ZIP – 9 KBZadání semestrální práce si student může vyzvednout kdykoli v průběhu semestru vybráním jednoho ze tří níže uvedených zadání – o vybrané semestrální práci nemusíte vyučujícího informovat. Práci je třeba odevzdat nejpozději v neděli 5. 1. 2025 ve 23:59:59 – uploadem na server. Za práci odevzdanou po tomto datu získá její autor pouze 50 % bodů oproti odevzdání téže práce včas. To platí do neděle 12. 1. 2025, opět do 23:59:59. Po tomto mezním termínu již není možné práci odevzdat, resp. její případné odevzdání již nezakládá nárok na zápočet.
Pokud odevzdaná práce nesplňuje požadavky zadání, může vyučující nařídit její přepracování. O případném přepracování však vždy rozhoduje vyučující – nespoléhejte tedy na to, že odevzdáte včas pouze polotovar, a když za něj obdržíte málo bodů, přinesete vylepšenou verzi (to nebude fungovat – vyučující v takovém případě práci odmítne).
Pokud student nemůže ze závažných (např. rodinných nebo zdravotních) důvodů práci včas odevzdat, měl by o této skutečnosti co nejdříve informovat vyučujícího (e-mailem, telefonicky, zanecháním vzkazu na sekretariátu katedry, apod.), který následně stanoví odklad odevzdání nebo navrhne náhradní postup. Pokud však student vyučujícího o důvodech prodlení neinformoval (ačkoli mohl), nemůže být k důvodům přihlédnuto.
Vyberte si, prosím, z níže uvedených témat to, které vás zajímá nebo se vám nejvíce zamlouvá. Úlohy jsou rámcově stejně složité a přibližně stejně časově náročné.
V záhlaví každého zadání semestrální práce je vpravo uvedena zkratka označující vyučujícího, který toto zadání připravil (zkratka je stejná jako v seznamu výsledků a rozvrhu předmětu). Najdete-li v zadání nějaké nejasnosti nebo budete-li se chtít zeptat na nějaké detaily, kontaktujte, prosím, právě tohoto vyučujícího.
Individuální zadání semestrální práce je možné v případě, že student pracuje na nějakém vlastním zajímavém projektu, který může (nebo jeho část) vypracovat v jazyce C. Je třeba, aby vyučující schválil, že má vaše vlastní zadání odpovídající rozsah a náročnost. V případě, že chcete pracovat na individuálním zadání, kontaktujte vyučujícího a dohodněte si podrobnosti.
Upozornění: Po kliknutí na níže uvedený odkaz budete z bezpečnostních důvodů přesměrováni na stránku jednotného přihlašování (SSO) do portálu ZČU. Budete vyzváni k zadání svého uživatelského jména a hesla. Jde o stejné jméno a heslo, jakým se přihlašujete ve veřejných učebnách či k serveru eryx.zcu.cz.
Počet pokusů odevzdání práce není nijak omezen. Uvědomte si ale, že čím více se bude blížit mezní termín odevzdání, tím více lidí se bude pokoušet práci odevzdat a zatížení validačního serveru se nutně podstatně zvýší, takže validace může trvat i několik minut (nebo se také nemusí provést vůbec, bude-li server extrémně přetížen). Nenechávejte proto odevzdání na poslední chvíli.
Semestrální práce se skládá ze dvou částí: (i) samotné aplikace se zdrojovými kódy a (ii) dokumentace. Obě tyto části musí být v odevzdaném archivu typu ZIP: Archiv může obsahovat adresáře, ale Makefile musí být v kořenovém adresáři archivu – tzn. že když např. vypíšeme obsah archivu, musí být "vidět hned", nesmí být uvnitř jakéhokoliv adresáře, který je v archivu uložen. Totéž platí pro soubor PDF s dokumentací (kvůli automatické kontrole). Pokud si nejste organizací archivu jisti, podívejte se, jak je to udělané u vzorové semestrální práce.
Do odevzdávaného archivu, prosím, nepřibalujte testovací data – validační systém používá vlastní sadu testovacích dat pro každou úlohu. Ta, která případně odevzdáte v archivu spolu s programem, se stejně nepoužijou, takže se tím jen plýtvá místem na disku serveru.
Programové vybavení (aplikaci), které řeší zadanou úlohu, vytvořte v jazyce ANSI C (nestanovil-li vyučující jinak) a zajistěte, aby bylo možné je přeložit pomocí běžných překladačů (určitě aspoň gcc a Microsoft Visual C/C++), které byly zmíněny v první přednášce. Aplikace by měla být přenositelná (multiplatformní) – tj. přeložitelná a spustitelná jak v prostředí Win32/64, tak UNIX/Linux (či Mac OS X).
Součástí odevzdaného ZIP archivu musí být Makefile a všechny zdrojové a jiné potřebné soubory – nepůjde-li práce přeložit voláním nástroje make v kořenovém adresáři projektu, nebude přijata k hodnocení.
V první fázi odevzdání, poté co provedete upload vaší práce na server, se práce automaticky kontroluje shellovým skriptem, který ověří, že archiv lze rozbalit a že obsahuje vše potřebné. Poté zavolá program make. Pokud překlad skončí chybou, zobrazí se vám protokol s chybovým hlášením a práce bude odmítnuta. Pokud se překlad podaří, provede se kontrolní běh programu na testovacích datech a jeho výsledek se porovná s ověřeným výsledkem. Pokud bude vše v pořádku, budete informováni o úspěšném přijetí práce. Aby to tak bylo, je ovšem nezbytně nutné dodržet všechny pokyny v zadání – zejména formáty souborů a parametrů na příkazové řádce. Pročtěte si důkladně podrobné zadání!
Uvolňujte veškerou alokovanou paměť. Pomocí vlastních funkcí pro správu paměti se přesvědčte, že jste uvolnili všechnu alokovanou paměť (alespoň počítáním alokovaných a uvolněných bloků). Přítomnost těchto funkcí s alespoň minimálním kontrolním mechanismem se také hodnotí. Prvotní ověření korektní práce s pamětí zajišťuje program splint již v kontrolním skriptu při uploadu. Detailní analýza práce s pamětí se provádí také automaticky nástrojem valgrind – tímto užitečným programem byste měli svojí práci určitě zkontrolovat před odevzdáním. Neprojde-li bez chyby testem valgrindem, nemá smysl pokoušet se jí odevzdávat.
Používejte dostatek komentářů: Není třeba komentovat samozřejmé úseky kódu. Je-li ve zdrojovém kódu funkce printf(), je vyučujícímu jasné, že se píše na obrazovku. Naopak komentujte zdrojový kód tam, kde jste se uchýlili ke zkratkovitému zápisu, kde jste použili méně obvyklou konstrukci, případně tam, kde je v kódu konstrukce, která se nemá používat (nekonečná smyčka, goto, atp.). Hlavičky funkcí je nutné aspoň minimálně okomentovat.
Snažte s psát zdrojový kód co nejčitelněji. Odsazujte bloky (o tabulátor nebo 2 mezery vpravo). Aritmetické výrazy pište bezpečným, řídkým způsobem (operátor je obklopen mezerami). Úvodní příkaz a uzavírací závorka bloku (složeného příkazu) musí být pod sebou. Kvalita a čitelnost zdrojového kódu a dodržování kultury zápisu jazyka C je významnou součástí hodnocení. Prostudujte si vzorovou semestrální práci, kde je tento tzv. coding style, tj. jednotný a systematický způsob zápisu zdrojového kódu, velmi pečlivě dodržován.
Dokumentace semestrální práce z předmětu PC se odevzdává pouze elektronicky – jako soubor ve formátu PostScript nebo Portable Document Format (PDF), který je součástí ZIP archivu nahraného na server.
S ohledem na katastrofální obsahovou, jazykovou i estetickou úroveň celé řady bakalářských a diplomových prací odevzdaných v posledních letech jsme se po zralé úvaze rozhodli přistoupit k nepopulárnímu – poněkud diktátorskému – kroku a stanovit, že dokumentace semestrální práce musí být vytvořena v sázecím systému LaTeX, aby aspoň základní estetická úroveň dokumentu byla zaručena.
Dokumentace může být napsána v českém nebo v anglickém jazyce a by měla mít rozsah alespoň 8 až 10 stránek A4 původního textu (sázeného písmem velikosti nejvýše 12 pt) a musí obsahovat tyto oddíly (kapitoly):
Stanoveným nástrojem na přípravu a úpravu dokumentu je LaTeX – vypracování dokumentace k semestrální práci může tedy být vhodnou příležitostí se tento vynikající nástroj naučit používat. Při psaní bakalářské či diplomové práce jeho přednosti v plné míře oceníte. K rychlému a snadnému uvedení do problematiky psaní dokumentace v LaTeXu můžete použít materiály v sekci LaTeX.
Estetická kvalita dokumentu je také součástí hodnocení – nemělo by tedy chybět číslování stránek, vhodné použití fontů, zarovnávání (to vše za vás udělá LaTeX, pokud mu v tom výslovně nezabráníte), znak univerzity na titulní stránce, kvalitní – nejlépe vektorové – obrázky, atd. Technický dokument bez obrázků či schémat je podezřelý!
Za dokumentaci lze získat až 20 bodů z celkového počtu 70 za semestrální práci. Věnujte tedy přípravě dokumentace také odpovídající pozornost! Ztráta bodů za dokumentaci může vést i ke snížení výsledné známky.
Pokud práce projde automatickou kontrolou při uploadu na server (tou se zjistí, zda práce obsahuje všechny potřebné soubory, lze bez chyby přeložit a spustit, dodržuje stanovený formát vstupních/výstupních dat, atp.), pokračuje v jejím hodnocení vyučující. Každá práce, která projde automatickou kontrolou, má na počátku hodnocení plný počet bodů, tj. 70. Body se odečítají od maxima v případě nalezení chyb podle předem pevně stanoveného chybovníku.
Vzorovou práci naprogramoval přednášející podle tohoto zadání (jedná se o jedno ze zadání semestrální práce pro studenty z roku 2007). Program byl napsán částečně v editoru Cream (for Vim) a částečně ve vývojovém prostředí wxDev-C++ 6.10.2 a přeložen překladačem gcc. Testován byl i překlad pomocí Microsoft Visual C/C++. K dispozici je Makefile pro gcc (stejný pro UNIX/Linux i Win32/64) a Makefile.win pro Microsoft Visual C/C++. Zdrojový kód odpovídá normě ANSI C, a proto by měl jít přeložit libovolným překladačem ANSI C na libovolné platformě. Formát vstupu a výstupu (soubory a přepínače) je naprosto stejný na všech platformách.
Boole: vyhodnocování logických formulí – archiv ZIP – 24 KB
Algoritmické řešení úlohy, její dekompozice, zvolené techniky i zápis zdrojového kódu odpovídají představám vyučujícího o kvalitní práci – takhle nějak by mělo vypadat i vaše dílo.
Pokud si chcete prohlédnout rozkladový strom analyzované formule, potřebujete ještě program GraphViz. Generování stromu bylo naprogramováno nad rámec zadání zejména proto, aby bylo vidět, jakým způsobem probíhá syntaktická analýza formule technikou rekurzivního sestupu.
Cílem zkoušky je nejen ověřit úroveň a hloubku nabytých teoretických znalostí, ale také schopnost analyzovat existující zdrojový kód, která je pro programátora často klíčová a je proto také v komerční praxi vysoce hodnocená.
Zkouška probíhá u počítače – úkolem studenta je napsat či upravit existující jednoduchý program v jazyce ANSI C podle zadání vyučujícího. Nejčastěji se bude doplňovat nějaká funkce do programu drill.c, což je jakýsi primitivní souborový analyzátor, nebo se bude upravovat aplikace řešící hlavolamy sudoku, sudoku.zip.
Maximální čas na vypracování zkoušky je 120 minut. Po vypršení tohoto časového limitu se strhává z hodnocení zkoušky 1 bod za každou další minutu. Při zkoušce je povoleno používat pomůcky – knihy, skripta, záznam přednášek, apod. a samozřejmě počítač. Množství pomůcek je omezeno pouze nosností studenta – myslete ale na prostorové požadavky svých kolegů a nezavážejte učebnu náklady materiálu, obvykle kvantita nezaručuje kvalitu. Pomůcky si studenti pochopitelně nesmí v průběhu zkoušky předávat či vyměňovat, také nesmí komunikovat žádným způsobem2 spolu, ani s nikým "zvenčí".
2) Jsou zakázané veškeré prostředky elektronické i jiné komunikace (např. e-mail, SMS, ICQ, Jabber, Telegram, WhatsApp, Facebook, Twitter, apod.) – nehodláme je explicitně vyjmenovávat; to, že přijdete na nějaký, který nebyl zmíněn, neznamená, že ho smíte používat. Nesmíte!
Na zkoušku je třeba se zapsat na portálu, přičemž platí běžné podmínky pro zápis na zkoušku tak, jak jsou definovány portálem a studijním a zkušebním řádem ZČU (mezní časy odhlašování, apod.). Termínů zkoušky bude vypsán dostatek (pokud se vám jich teď zdá málo, nezoufejte – podle zájmu se budou objevovat další termíny v průběhu zkouškového), takže každý bude mít pohodlně šanci se zapsat na tři povolené pokusy. Není třeba (dle zkušeností z minulých let) se zapisovat na více termínů hned na začátku zkouškového období.
V této sekci najdete vše, co začátečník (ale i celá řada pokročilých programátorů) potřebuje k úspěšnému vývoji software v jazyce C.
Zde si můžete stáhnout obraz DVD, na kterém jsou všechny důležité nástroje, které budete potřebovat k úspěšnému a relativně bezbolestnému proniknutí do programování v jazyce C. Najdete na něm několik různých překladačů, programátorských editorů, debuggerů, značné množství dokumentace (převážně anglicky) a několik užitečných pomocných nástrojů a knihoven.
Podpůrné DVD pro začínající programátory v jazyce C – ISO obraz – 3,38 GB
K namontování ISO obrazu DVD na vašem počítači (tj. aby se ISO obraz jevil systému jako DVD vložené do mechaniky a nebylo nutné jej vypalovat na fyzický nosič) můžete použít software Virtual CloneDrive.
Referenční karta jazyka C – List A4, na kterém je z obou stran shrnut jazyk ANSI C tak, aby bylo možné rychle (ale bez detailů) najít jakýkoliv element jazyka. Je vhodné si tuto kartu vytisknout na tvrdý papír A4 a případně zalaminovat – taková pomůcka pak může dobře posloužit u zkoušky (je povolena)...
C Reference Card – PDF – 100 KB
learn-c.org Free Interactive C Tutorial – Interaktivní online kurz jazyka C v anglickém jazyce (což by ale pro budoucí profesionální programátory neměl být problém), jednotlivé kapitoly pokrývají nejdůležitější tématické okruhy jazyka C. Přímo na webu je možné spouštět demonstrační zdrojové kódy a libovolně je modifikovat, tak aby bylo vidět "co to udělá".
Wikibook: Programming in C – Elektronická kniha o programování v jazyce C z projektu Wikibooks – můžete jí nalézt na adrese http://en.wikibooks.org/wiki/C_programming nebo si jí stáhnout v PDF z níže uvedeného odkazu. Kniha je napsaná celkem srozumitelně, místy však obsahuje zbytečně mnoho detailů a je orientována zejména na GCC.
Programming in C – PDF – 1234 KB
David Martinek: Nedělejte zbytečné chyby – Velice praktická a dobře napsaná příručka z pera Ing. Davida Martinka z Fakulty informačních technologií VUT Brno. Příručka obsahuje cenné rady jak pro začátečníky, tak pro pokročilejší programátory. Každopádně je velmi dobré (a doporučené) se s ní aspoň rámcově seznámit ještě před započetím práce na semestrálce.
Nedělejte zbytečné chyby při programování v C – PDF – 301 KB
Programming reference for the Win32 API (Application Programming Interface) – Úplný popis mechanismů, datových struktur a funkcí, které operační systémy založené na jádře Win32 dávají k dispozici aplikacím. Bez této nápovědy prakticky nelze naprogramovat plnohodnotnou aplikaci pro Windows.
Programming reference for the Win32 API – odkaz na web Microsoftu
Win32 API Windows Help – instalátor pro Windows – 13 MB
Embarcadero Dev-C++ – Vynikající integrované vývojové prostředí pro jazyk C/C++ naprogramované původně v Borland Delphi 6 (zdrojový kód v Object Pascalu je pro zájemce k dispozici na webu), které je dostatečně jednoduché pro začátečníka a přitom dostatečně výkonné pro zkušeného programátora. Součástí produktu je port překladače gcc na platformu Win32/Win64 (MinGW). Velmi vhodný nástroj k výuce jazyka C v rámci předmětu KIV/PC (na části našich cvičení se pracuje právě s tímto prostředím a překladačem).
Microsoft Visual Studio Community – Volně dostupná verze vynikajícího překladače a vývojového prostředí, které je součástí komerčního vývojového balíku Microsoft Visual Studio. Překladač je velmi rychlý a produkuje vysoce optimalizovaný kód – i zavilí nepřátelé Microsoftu musí připustit, že je to jeden z vůbec nejlepších překladačů jazyka C/C++.
GNU Compiler Collection (GCC) – Balík, považovaný v Linuxu za naprostou klasiku, nabízí kvalitní výkonné překladače C, C++, Objective-C, Fortranu, Javy a Ady a rozsáhlou kolekci pomocných vývojových nástrojů. Kód, generovaný GCC překladačem C/C++ patří mezi nejrychlejší. Nevýhodou balíku je skutečnost, že neobsahuje žádné použitelné integrované vývojové prostředí a jeho správná instalace není úplně přímočará záležitost – chcete-li GCC provozovat na platformě Win32/64, doporučujeme vaší pozornosti port Mingw-w64, což je optimalizovaná verze kolekce překladačů pro Win32/64.
MSYS2 – Velice užitečná vývojová platforma MSYS2 je vlastně – velmi zjednodušeně řečeno – jakýsi UNIX pro Windows. Veškeré součásti této platformy jsou nativní spustitelné soubory pro Win32/64, které ale přesně odpovídají stejnojmenným nástrojům z UNIXu/Linuxu. Díky tomu je možné např. ve Windows spouštět shellové sestavovací skripty zdrojových distribucí softwarových balíků (a mnohé další zajímavé věci). Také instalace překladače GCC je zde výrazně jednodušší, než v samotných Windows – stačí jen do konzole MSYS2 zadat příkaz pacman -S mingw-w64-x86_64-toolchain a balíčkový manažer pacman (tentýž, který je v některých distribucích Linuxu, např. v Archu či Manjaru) se postará o bezchybnou funkční instalaci.
Clang: C Language Front-end for LLVM – jazykový front-end pro programovací jazyky z rodiny C (C, C++, Objective-C/C++, OpenCL a CUDA) pro vysokovýkonný modulární překladač LLVM. Poslední dobou obliba (v závislosti na průběžně se zvyšující kvalitě) tohoto velmi promyšleného překladače raketově roste a v řadě projektů úspěšně nahrazuje poněkud zkostnatělý GCC.
Pelles C – Kompletní vývojový kit (překladač, assembler, linker, debugger, profiler, atp.) pro vývoj aplikací pro operační systém Windows (Win32/Win64) v jazyce C. Překladač vychází z projektu LCC (viz níže), ale byl podstatně upraven, aby podporoval i novější normy jazyka C včetně C99/C11/C17 a C2x a také rozšířené instrukční sady moderních procesorů. Nativně je podporovaná také paralelizace prostředky OpenMP. Projekt je distribuován jako freeware.
Open Watcom C/C++ – Kvalitní překladač pro celou řadu platforem distribuovaný v rámci open source projektu. Jedná se o další (dosud živé) vývojové stádium vynikajícího a v 90. letech 20. století velmi slavného překladače společnosti Watcom, která jej posléze uvolnila k open source vývoji. Balík obsahuje kompletní sadu vývojových nástrojů v kvalitě vyšší, než je běžná u nekomerčních produktů. Podpora ANSI standardu je vynikající. Rozsáhlou dokumentaci v PDF (v angličtině) najdete na stránkách produktu.
LCC-Win: A Compiler System for Windows – Malý a zcela soběstačný systém pro vývoj programů v C/C++ na platformě Win32/64. Součástí balíku je obsáhlá dokumentace API Win32, kurz jazyka C a další užitečné věci. Tento balík je ideální pro začátečníka, který nechce na svůj počítač instalovat megabyty komplikovaných vývojových prostředků. Výsledný kód ovšem pochopitelně nedosahuje (zejména co se týče rychlosti a kvality optimalizace) úrovně "velkých" překladačů.
Intel oneAPI DPC++/C++ Compiler – Vysokovýkonný překladač optimalizovaný pro instrukční sady procesorů architektury IA-32/IA-64 společnosti Intel (ale umí i generickou instrukční sadu 80x86/x86-64, takže přeložený kód běží i na procesorech jiných výrobců). Pokud ovšem máte s M1/M2, tak si neškrtnete...
Eclipse C/C++ Development Tooling – Balík vývojových nástrojů pro velmi sofistikované vývojové prostředí Eclipse, které nabízí mimořádný komfort a nesmírně rozsáhlé možnosti (synax highlighting, šablony, code completion, automatické verzování, refactoring, atp.). Bohužel je ale toto prostředí zároveň značně komplikované, a tudíž ho nelze doporučit pro začátečnické projekty. Také (protože je napsané v Javě) je na starších počítačích dost líné. Balík CDT pro přílušnou verzi Eclipse lze stáhnout ze stránky CDT Downloads webu Eclipse.org.
Na Internetu lze najít mnoho dalších překladačů jazyka C – dá se totiž říct, že každý pořádný programátor si jednou (a někteří i víckrát) za svůj profesní život zkusí napsat překladač... A proč ne zrovna jazyka C? Ovšem ne všechny na Internetu dostupné překladače jsou prakticky použitelné. Prosím, vyhněte se příliš exotickým překladačům – jsou s nimi jen zbytečné problémy, se kterými vám vyučující nepomohou.
Jazyk C patří k nejzdokumentovanějším programovacím jazykům vůbec. Je prakticky vyloučeno, že byste na Internetu nenašli odpovědi na své otázky. Univerzitní knihovna je také dobře zásobena knihami o programování v jazyce C. Z nich lze doporučit zejména:
Stackoverflow.com — Poslední dobou první místo, kam se nešťastní a zoufalí programátoři obracejí, když už neví, kudy kam. Tato anglicky psaná veřejná platforma "kolektivních znalostí" poskytuje návody, rady a diskuse prakticky ve všech oblastech programování a vývoje software. Jazyk C/C++ a veškeré aspekty programování v něm jsou pokryty velmi široce.
LaTeX (vyslovuje se [lejtech]) je zatím nepřekonaný dávkový typografický systém, pomocí kterého lze vytvářet technické dokumenty profesionální kvality. LaTeX je vlastně rozšíření původního systému TeX, vymyšleného a naprogramovaného D. E. Knuthem, o rozsáhlou sadu maker od L. Lamporta, které doplňují jeho možnosti a usnadňují výrobu dokumentů.
TeX je dávkový, tzn. funguje vlastně jako překladač zdrojového kódu dokumentu: Uživatel připraví ve speciálním (nikterak složitém) formálním jazyce zdrojový kód dokumentu, překladač TeXu ho zpracuje a vyrobí výstupní soubor ve formátu DVI (DeVice Independent), PostScript nebo PDF. To sice vypadá na první pohled velmi uživatelsky nepřívětivě, ale opak je pravdou. Skutečnost, že TeX nemá grafické uživatelské rozhraní je bohatě vyvážena faktem, že v něm všechno jde a vypadá to dobře. V TeXu se nestává, že by se najednou změnilo číslování stránek, obrázky se samy přemístily jinam, a podobné legrace, které běžně předvádí textové procesory komerčních výrobců...
MiKTeX – vynikající distribuce určená primárně pro Win32/64. Hlavní výhoda spočívá v tom, že umí "dotahovat" chybějící balíky a automaticky je připojovat k existující instalaci. Další výhody jsou velmi dobrá podpora češtiny a snadná a účinná instalace...
TeX Live – velmi komplexní distribuce podporovaná TUG (TeX Users Group) a CSTUG (Czechoslovak TeX Users Group). Lze nainstalovat přímo z Internetu, podporovány jsou jak Windows, tak Unix/Linux. Lépe funguje v Linuxu...
Z vlastní zkušenosti doporučuji pro Windows spíše MiKTeX. V TeX Live je trochu komplikovanější rozchodit češtinu a některé podpůrné nástroje. V Linuxu funguje TeX Live bezchybně – v moderních distrech postavených na Debianu stačí pouze zadat v shellu příkaz apt-get install texlive a pak k doinstalování jazykového balíku s češtinou apt-get install texlive-lang-czechslovak.
K úspěšné práci v TeXu sice v zásadě stačí to, co nainstaluje instalátor MiKTeXu, ale pro větší uživatelský komfort je dobré mít vytvořené jakési vývojové prostředí, které sestává z několika dalších užitečných nástrojů. Co všechno a jakým způsobem nainstalovat popisuje níže zmíněná stránka Fakulty elektrotechniky a komunikačních technologoií Vysokého učení technického v Brně věnovaná LaTeXu.
Podrobná dokumentace instalace LaTeXu
Na výše zmíněné stránce jsou jako vhodné editory pro přípravu zdrojových kódu v TeXu doporučovány aplikace TeXnic Center a PSPad (proti čemuž nelze nic namítat). Z vlastní zkušenosti bych ale doporučil spíše Notepad++, ve kterém sám TeXovské zdrojáky píšu a jsem s ním velmi spokojen.
V současné době se většinou TeXovské zdrojáky už nepřekládají do metaformátu DVI (Device Independent), ale přímo do PDF. Proto je vhodný i prohlížeč PDF, který neotevírá vytvořený soubor v režimu výhradního přístupu a který načte soubor vždy znovu, když dojde k jeho změně – to umí třeba Evince. Adobe Acrobat bohužel otevírá PDF soubory ve výhradním režimu, a proto když je spuštěný, nelze TeXem překládat zdroják.
Patrně nejpreciznější a nejrozsáhlejší učební text, týkající se pouze samotného základního TeXu (tedy tzv. Plain TeXu, nikoliv LaTeXu či jiných nadstaveb a sad maker), pochází přímo od grand wizarda Donalda E. Knutha, autora TeXu. Jmenuje se The TeXbook a je součástí většiny instalací TeXu, ale obvykle v záměrně upravené podobě, která znemožňuje překlad do cílového formátu. Kliknutím na níže uvedený odkaz si můžete TeXbook stáhnout v PDF.
Učebnice The TeXbook – PDF – 2,41 MB
Rychlým a efektivním způsobem, jak se vpravit do používání TeXového formátu LaTeX, který je dnes de facto standardem pro psaní technických dokumentů, je anglicky psaná příručka švýcarských autorů nazvaná The Not So Short Introduction to LaTeX 2e. Na celkem 168 stranách se lze dozvědet téměř vše, co člověk k práci s LaTeXem běžně potřebuje.
The Not So Short Introduction to LaTeX 2e – PDF – 2,49 MB
TeXbook naruby – kniha jednoho z našich předních expertů na TeX, Petra Olšáka. Nejedná se o učebnici, či referenční příručku. Jde spíš o ukázky a detailní rozbory různých "specialitek".
Velmi rozpracovaná Referenční příručka LaTeXu 2e – možná tuhle příručku někdy dokončím (pokud bude čas a lidi) –, zatím obsahuje jen opravdové základy. Až dočtete na konec, podívejte se na zdrojový kód této příručky, protože z toho bude vidět to ostatní...
Referenční příručka LaTeXu – PDF – 178 KB
Referenční příručka LaTeXu (zdrojáky) – ZIP – 181 KB
Slidy prezentace Stručný úvod do TeXu byly vyrobeny v LaTeXu s využitím třídy beamer. Kliknutím na odkaz níže je možné si stáhnout příručku k práci s touto třídou.
Referenční příručka třídy Beamer – PDF – 1,58 MB
Prezentace Stručný úvod do TeXu – ukázka použití třídy dokumentů beamer, která umožňuje tvorbu propracovaných, částečně interaktivních prezentací ve formátu PDF.
Prezentace (zdroják a PDF) – ZIP – 165 KB
V průběhu jedné z minulých přenášek (v roce 2009) byl vyroben (po obsahové stránce dost příšerný) dokument test.tex. Vše potřebné k jeho přeložení a vyzkoušení najdete níže.