Zadání
Zadání domácích úkolů naleznete na stránce Domácí úkoly.
|
Během semestru bude zadáno šest domácích úkolů, pět základních a jeden bonusový. Cílem těchto úkolů je procvičení probíraných témat na větším příkladu.
Součástí hodnocení úkolu je automatické testování funkcionality a pak hodnocení kvality kódu opravujícím.
Pravidla
-
Pracujte samostatně!
Opisování bude na obou stranách přísně potrestáno penalizací nebo projednáním u disciplinární komise.
-
Na úspěšné vypracování úkolu jsou celkem 3 pokusy.
-
Termín odevzdání uvedený v zadaní je striktní.
Odevzdání po tomto termínu může být odevzdávacím systémem akceptováno, ale hodnocení nebude uznáno.
-
Odevzdání úkolu není závislé na cvičení.
Absence na cvičení nebo jeho nekonání (např. kvůli státnímu svátku) není důvod pro individuální posun termínu odevzdání.
-
Řešení pište pouze do zdrojových souborů uvedených v zadání.
Tyto názvy musíte dodržet přesně a žádný soubor nesmí chybět. Jiné soubory odevzdávací systém ignoruje.
-
Program nesmí při překladu hlásit chyby ani varování. + Způsob kompilace je popsaný níže v části Jak Kontr kompiluje. V případe chyby se testy dané sekce automaticky vyhodnotí na 0.
Zdrojový kód
-
Programy musí splňovat standard ISO/IEC 9899:1999 (C99).
Rozšíření a nestandardní knihovny lze použít, pouze pokud je zadání explicitně povolí.
-
Programy musí dodržovat požadované rozhraní a formát výstupu.
Protože se výstup testuje automaticky, musí program dodržovat formát přesně a nesmí vypisovat navíc nic, co není zadáním požadováno.
-
Programy smí otevírat pouze soubory v zadání nebo uvedené v argumentech.
Není povoleno vytvářet, číst nebo přepisovat jiné soubory.
-
Zdrojový kód musí dodržovat konzistentní formátování a zásady vhodného způsobu programování.
-
Zdrojový kód musí vhodným způsobem dokumentovat netriviální části kódu.
Menší části kódu komentujte. Pro dokumentaci funkcí, struktur atd. můžete použít Doxygen.
Zadání může podle potřeby některé požadavky změnit.
Nepovolené extenze
Pokud není v zadání uvedeno jinak, je zakázáno používat rozšíření jazyka mimo standard C99 a externí knihovny. Pokud nevíte, o co jde, extenze se obvykle zapínají makry, např.
nastavením Pokud tohle někde uvidíte, nepoužívejte to. |
Předběžné termíny pro úkoly
Tyto termíny se mohou během semestru měnit podle okolností. O změnách budou organizátoři předmětu informovat v relevantních vláknech v diskusním fóru v IS MU. |
úkol | zadání | pokus navíc | konec odevzdání |
---|---|---|---|
HW01 |
2024-02-26 |
2024-03-06 24:00 |
2024-03-13 24:00 |
HW02 |
2024-03-11 |
2024-03-20 24:00 |
2024-03-27 24:00 |
HW03 |
2024-03-25 |
2024-04-10 24:00 |
2024-04-17 24:00 |
HW04 |
2024-04-15 |
2024-04-24 24:00 |
2024-05-01 24:00 |
HW05 |
2024-04-29 |
2024-05-08 24:00 |
2024-05-15 24:00 |
HW06 |
2024-05-13 |
není |
2024-06-16 24:00 |
Vlastní testování
Očekává se, že studenti si svoje řešení důkladně otestují. Toto testování nelze nahradit odevzdáním nanečisto, protože to pokrývá pouze triviální vstupní případy. Je skutečně potřebné věnovat čas pochopení zadání, zkoušení různých platných či neplatných vstupů a validace chování řešení.
V rámci tohoto testování si můžete s kamarády nebo kolegy vyměnit svoje zkompilovaná řešení a hledat v nich chyby.
Nesmíte však sdílet ani si navzájem ukazovat zdrojový kód!
Časová náročnost
Programování se lze naučit pouze programováním. Proto jsou úkoly v tomto předmětu náročné a jejich obtížnost se postupně zvyšuje. U posledních úkolů počítejte s desítkami hodin času.
Proto jsou na každý úkol alespoň dva týdny času, nenechávejte si vypracování na poslední chvíli. Úkol odevzdaný třeba jen sekundu po konci odevzdání nebude hodnocen.
Zadání si přečtěte ihned po zveřejnění. Pokud netušíte, jak začít, zkuste si vypracovat miniúkoly. |
Odevzdávání
Odevzdání úkolu probíhá na počítači aisa.fi.muni.cz
v systému Kontr.
Řešení musí být uložené v Git repozitáři ve správném adresáři a
ve větvi podle úkolu. Při odevzdání se berou v potaz pouze
soubory požadované zadáním. Ostatní soubory odevzdávací systém ignoruje.
Postup pro založení repozitáře, vytvoření větve atd. naleznete v návodu pro GitLab repozitář. |
Řešení lze odevzdat ve dvou režimech, nanečisto a naostro.
Struktura repozitáře
Každý úkol má v repozitáři vlastní adresář a větev, ve kterém jsou
uložené soubory. Název adresáře je hwNN
kde NN
je číslo úkolu, např.
hw01
, hw03
atd. Speciální úkoly (např. testovací úkol hello
) můžou
požadovat jiné adresáře.
Pro jednoduchost má větev stejný název, jako adresář. Tj. na úkolu hw03
pracujete ve složce hw03
ve větvi hw03
.
Příklad:
[gitlab.fi.muni.cz/LOGIN/]pb071.git
├── hello/
│ └── hello.c
├── hw01/
│ ├── CMakeLists.txt
│ ├── main.c
│ └── tests.c
├── hw02/
...
Nanečisto
Odevzdání nanečisto slouží pouze pro ověření velmi jednoduchých vstupních případů, které mohou odhalit nepochopení části zadání.
-
Tato odevzdání nejsou hodnocená.
-
Dejte si pozor na limity popsané níže.
Svoje řešení důkladně testujte!
Fakt, že při odevzdání nanečisto nebyla nalezená žádná chyba,
negarantuje, že testy naostro projdou bezchybně.
|
-
Ověřte si, že jste řešení nahráli do repozitáře správně!
-
Přihlaste se na stroj
aisa.fi.muni.cz
. -
Spusťte následující skript (za
UKOL
dosaďte kód úkolu, např.hw03
):login@aisa:~$ /home/kontr/odevzdavam pb071 UKOL nanecisto
-
Výsledek obdržíte e-mailem za 10-30 minut podle vytížení serveru.
Naostro
Testy naostro jsou hodnocené a pokrývají mnohem větší vstupní množinu než testy nanečisto. Zejména kontrolují i okrajové případy a mohou selhat, i když testy nanečisto prošly bez chyby.
-
Před odevzdáním naostro vždy vyzkoušejte kompilaci na Aise.
-
Hodnotí se pouze první tři pokusy.
-
Testy naostro požadují plnou funkčnost řešení v testech nanečisto, a to zejména bez chyb při práci s pamětí (
valgrind
).Pokud testy nanečisto neprojdou, testy naostro se přeskočí.
-
Před odevzdáním naostro musíte mít v GitLab FI Merge Request pro větev s úlohou.
Viz taky manuál pro GitLab.
Kompilace na Aise
Podle pravidel výše si před každým odevzdáním kompilaci vyzkoušejte
pomocí příkazů z části Jak kontr
kompiluje. Toto pravidlo se nekontroluje, ale na argumenty „doma
se mi to zkompiluje“ se nebude brát žádný ohled.
|
-
Ověřte si, že jste řešení nahráli do repozitáře správně!
-
Přihlaste se na stroj
aisa.fi.muni.cz
. -
Spusťte následující skript (za
UKOL
dosaďte kód úkolu, např.hw03
):login@aisa:~$ /home/kontr/odevzdavam pb071 UKOL naostro
-
Zkontrolujte vypsané informace, zda odevzdáváte správný úkol a jeho správnou verzi.
-
Výsledek obdržíte e-mailem za 10-30 minut podle vytížení serveru. Body budou zapsané v poznámkovém bloku.
Omezení
Kontr má jako uživatel na Aise omezený diskový prostor. Aby nedošlo k jeho zaplnění nadměrným počtem odevzdání, a naopak abychom motivovali studenty k důkladnějšímu testování, uplatňují se na odevzdání následující limity.
-
Po vyhodnocení lze stejný úkol ve stejném režimu odevzdat nejdříve po 10 minutách.
Mezi režimy tento limit neplatí, tzn. můžete po vyhodnocení nanečisto ihned odevzdat naostro.
-
Před prvním odevzdáním úkolu naostro můžete použít nanejvýš 10 odevzdání nanečisto.
-
Před dalším odevzdáním naostro můžete použít nanejvýš 5 odevzdání nanečisto.
-
Překročení limitu na počet odevzdání nanečisto bude penalizováno -5 body za každé odevzdání navíc.
Pozor na počet odevzdání
Rozhraní Kontru neinformuje o možném překročení limitu, to si musíte
pohlídat sami. Pokud neumíte počítat do deseti, dělejte si čárky na papír.
|
Hodnocení
Hodnotí se pouze odevzdání naostro.
Testy
Automatické testy udělí bodové hodnocení, které se zapíše i do poznámkového bloku. Konečné slovo má však opravující, který výjimečně a v odůvodněných případech může hodnocení upravit. Příkladem může být udělení nulového bodového zisku za odevzdání, jež neimplementují žádnou ze zásadních částí zadání, a snaží se pouze obejít testy nanečisto.
-
max. 0 b za úspěšné testy nanečisto.
Testy se hodnotí pouze v režimu odevzdání naostro.
-
max. 100 b za úspěšné testy naostro.
Platí pouze pokud testy nanečisto prošly kompletně správně, včetně kontroly nástrojem
valgrind
. -
50 % z každého úspěšného testovacího případu naostro, na kterém kontrola nástrojem
valgrind
nalezne chybu. -
Některé úlohy mohou mít nepovinná rozšíření za další body. Viz podrobnosti níže.
-
Ze všech pokusů se počítá nejlepší dosažené hodnocení.
Kvalita kódu
Hodnocení automatickými testy je nutno potvrdit kontrolou kvality kódu. Tuto provádí opravující obvykle do týdne po konci odevzdání.
Opravující jsou náhodně přiřazeni ve druhém týdnu semestru a změní se
pouze ve velmi výjimečných případech. Přiřazené opravující naleznete ve
výstupu skriptu opravujici
(nebo při odevzdání ze skriptu odevzdavam
):
login@aisa:~$ /home/kontr/opravujici pb071 UKOL
Kontrolu kvality kódu provádí opravující v Merge Request, který musí existovat již při prvním odevzdání naostro.
Opravující obvykle řešení kontrolují automaticky po ukončení odevzdávání. Pokud úkol vypracujete dříve, můžete je požádat o recenzi napsáním poznámky v MR. Nelze však garantovat, že budou mít na vypracování recenze čas před koncem odevzdávání úkolu. |
Návod pro vytvoření MR naleznete v návodu pro GitLab repozitář. |
Opravující odevzdání opraví a zpětnou vazbu zapíše do poznámek v GitLabu. Pokud řešení splňuje požadavky na kvalitu kódu, opravující potvrdí hodnocení schválením MR (Approve v GitLabu).
-
Nevytvářejte pro úkol víc než jeden MR. Zejména zavření MR, Merge bez Approve od opravujících nebo vytvoření dalších MR pro stejný úkol může způsobit, že opravující nebudou odevzdání hodnotit vůbec.
-
Bez kontroly kvality kódu nebudou body z testů uznány a započítány do celkového hodnocení.
-
Řešení, které nebylo ani jednou odevzdáno naostro, může být opravujícími vyhodnoceno, ale nebude uděleno žádné hodnocení.
-
Pokud do řešení zavedete nové chyby, mohou opravující požadovat jejich nápravu.
Opravné odevzdání
Pokud je řešení funkční, ale s výraznými nedostatky v kvalitě kódu,
může opravující požadovat nápravu. Poznámky popisující, co vyžaduje opravit, vyznačí
na začátku textem FIX:
.
-
Pokud cvičící nestanoví jinak, na opravu je jeden pokus nejpozději týden od zadání poznámek do GitLabu.
-
Oprava se odevzdává skriptem
odevzdavam
v režimunaostro
stejně, jako řádné odevzdání. Poté je nutno vyžádat ještě jednou o kontrolu kvality. -
Při opravě lze používat i odevzdání nanečisto.
Pozor, limity pro počet těchto odevzdání včetně penalizace stále platí.
-
Body získané navíc oproti řádnému odevzdání se nepočítají.
-
Opravující může nedostatečnou opravu penalizovat.
Typicky pokud řešení obsahuje nové chyby, nejsou opravené všechny nalezené nedostatky nebo byla oprava odevzdána pozdě.
Bonusy
Pro lepší pochopení uvedených pravidel se podívejte i na Příklady hodnocení. |
Odevzdání navíc
Pokud odevzdáte řešení úkolu naostro nejpozději týden před koncem odevzdávání, získáte další (čtvrtý) hodnocený pokus naostro navíc.
-
Nejpozdější termín pro možnost získání tohoto bonusu bude vždy uveden v zadání.
-
Bonus se nevztahuje na šestý bonusový domácí úkol.
Nepovinné rozšíření
Některé úkoly mohou mít nepovinná rozšíření, jejichž vypracování může být hodnoceno různým počtem bonusových bodů.
-
Hodnoceno pouze pokud testy naostro prošly kompletně správně, včetně kontroly nástrojem
valgrind
. -
Pokud má zadání více rozšíření, studenti si mohou vybrat libovolné z nich nebo i všechna, pokud zadání nestanoví podmínky jinak.
Samostatná práce a opisování
Domácí úkoly musí studenti vypracovat samostatně. Jakákoliv činnost, která vede k přepsání nebo kopírování zdrojového kódu jiné osoby do řešení se bude chápat jako opisování. Toto se netýká částí kódu, které jsou dodávané v kostře úkolu.
Co tedy není povoleno:
-
Sdílení zdrojového kódu nebo jeho částí, fotografie nebo snímky obrazovky.
-
Sdílení podrobného popisu fungování řešení.
-
Opsání řešení problému ze Stack Overflow (nebo podobných stránek), vzorových řešení úkolů atd.
Je však povoleno (a doporučováno) následující:
-
Vysvětlení a posouzení teoretické metody řešení, např. diskuse zvoleného algoritmu.
Popis algoritmu však nesmí být příliš podrobný. Například přiřaď do proměnné
y
odmocninu zx
, pak pokudy
je větší než 0, tak zavolej funkcifoo()
, pak v cyklu od1
pox
… se bude chápat jako popis fungování řešení, což není v pořádku. -
Vysvětlení části řešení ve skupině, např. na tabuli. Řešení však musíte přepsat z vlastní hlavy do kódu sami.
-
Sdílení a testování sestaveného řešení jinými studenty.
Při závažném a opodstatněném podezření z opsání celého nebo i jenom částečného řešení bude hodnocení domácího úkolu dočasně anulováno oběma stranám a případ bude projednán u disciplinární komise FI MU (DK).
-
Pokud DK přestupek potvrdí, anulace zůstane permanentní a navíc se udělí penalizace -50 bodů.
-
Pokud naopak DK vyhodnotí, že k porušení Disciplinárního řádu FI nedošlo, anulace se zruší.