{{indexmenu_n>2}} ======== HW 2 - Kreslení (ASCII art) ======== ^ Termín odevzdání | 23.03.2024@23:59 PDT | ^ Povinné zadání | 3b kontrola [[courses:bab36prga:resources:codingstyle:start|Coding stylu]]| ^ Volitelné zadání | není | ^ Bonusové zadání | není | ^ Počet uploadů | 30 | ^ Výchozí soubory | {{ :courses:bab36prga:hw:bab36prga-hw2.zip |}}| ^ Podpora | [[courses:bab36prga:labs:lab03|Lab 03 - Dekompozice programu]] | ^ Video tutoriál | [[courses:bab36prga:resources:hw_coding|Kódování k domácím úkolům]] | Tato úloha slouží k procvičení vnořených cyklů a dekompozici program na funkce. Není potřeba používat pole. Naimplementujte program, který na standardní výstup vykreslí definovaný obrazec. V úloze si vyzkoušejte načítání vstupu, kontrolu správnosti vstupních hodnot a dekompozici program na samostatné funkce. Ze zadání definujte návratového hodnoty programu a chybové zprávy, které vypisujte na standardní chybový výstup. Na standardní výstup vykreslete znakovou reprezentaci DNA dvoušroubovice, která je tvořena dvěma trojúhelníky, tvořené znakem ''X'' nebo v případě definovaného vstupy znaky '\', '/', '|', '-'. Podle zadané velikosti, je dvoušroubovice spojená jednou nebo několika "příčkami". Šroubovice jsou vždy spojeny v nejširším místě. Pokud jsou spojeny znakem '-', jsou dále spojeny dalšími příčníky a to tak, že je mezi nimi jeden řádek bez spojní, viz níže uvedné příklady. ======= Povinné zadání ======= * Program ze standardního vstupu načtěte dvě přirozená čísla v rozsahu 3 až 69, včetně obou těchto krajních hodnot. * Dle hodnot čísel program vykreslí na standardní výstup dvooušroubovici DNA s využitím znaků velké X (''X''), mezer ('' '') a znaků nového řádku (''\n'') jako několik segmentů ve tvaru dvou trojúhelníků spojených společnou základnou, viz předloha níže. * První číslo je velikost základního segmentu, druhé počet zobrazených segmentů, viz Příklad 1 a 2. * Pokud se **obě celá čísla** nepodaří načíst, tak standardní chybový výstup zprávu vypište: "''Error: Chybny vstup!''" a program ukončete s návratovou hodnotou ''100'', viz Příklad 3. * Obě čísla definující velikost a opakování musí být z intervalu [3, 69]. Pokud je číslo mimo interval, program na standardní chybový výstup vypíše zprávu: "''Error: Vstup mimo interval!''" a program skončí s návratovou hodnotou ''101'', viz Příklad 4. * Velikost segmentu musí být liché číslo. Pokud tomu tak není, program vypíše na standardní chybový výstup chybovou: "''Error: Velikost neni liche cislo!''" a končí s návratovou hodnotu ''102'', viz Příklad 5. * **Pokud je první číslo bezezbytku dělitelné druhým**, vykreslete dvoušroubovici s využitím znaků ''\'', ''/'', ''|'' a ''-'' , viz příklad 6. V tomto případě jsou šroubice spojeny kromě nejširšího místa také na každém druhém řádku a to poslopností znaků ''-''. * Každý řádek končí znakem nového řádku, který je **ihned za posledním symbolem na řádku** (''X'' a v případě "vyšší kvality" ihned za symboly) ''\'', ''/'' a ''|''. Pokud se nepodaří načíst celé(á) číslo(a) neodpovídá vstup očekávání. Využijte návratovou hodnotu funkce ''scanf().'' === Pořadí kontroly vstupu: === Kontrola vstupu a případné vypsání chyby vychází z definové granularity chybových zpráv a odpovídá následujícímu pořadí. - Zadaná velikost nebo počet opakování není platné číslo (''100''). - Zadaná velikost nebo počet opakování není v požadovaném intervalu (''101''). - Zadaná velikost není liché číslo (''102''). Program vhodně dekomponujte na jednotlivé funkce tak, aby byl čitelný a přehledný. ==== Příklad 1 - pub01-m ==== ^ Vstupní hodnoty (stdin) ^ Výstup (stdout) ^ Chybový výstup (stderr) ^ Návratová hodnota ^ | 11 3 | X X X X X X X X X X X XXXXXXXXXXX X X X X X X X X X X X X X X X X X X X X X X XXXXXXXXXXX X X X X X X X X X X X X X X X X X X X X X X XXXXXXXXXXX X X X X X X X X X X X | | 0| ==== Příklad 2 - pub02-m ==== ^ Vstupní hodnoty (stdin) ^ Výstup (stdout) ^ Chybový výstup (stderr) ^ Návratová hodnota ^ | 7 4 | X X X X X X X XXXXXXX X X X X X X X X X X X X X X XXXXXXX X X X X X X X X X X X X X X XXXXXXX X X X X X X X X X X X X X X XXXXXXX X X X X X X X | | 0| ==== Příklad 3 - pub03-m ==== ^ Vstupní hodnoty (stdin) ^ Výstup (stdout) ^ Chybový výstup (stderr) ^ Návratová hodnota ^ | x 16 | | Error: Chybny vstup!| 100| ==== Příklad 4 - pub04-m ==== ^ Vstupní hodnoty (stdin) ^ Výstup (stdout) ^ Chybový výstup (stderr) ^ Návratová hodnota ^ | -4 16 | | Error: Vstup mimo interval!| 101| ==== Příklad 5 - pub05-m ==== ^ Vstupní hodnoty (stdin) ^ Výstup (stdout) ^ Chybový výstup (stderr) ^ Návratová hodnota ^ | 8 21 | | Error: Velikost neni liche cislo!| 102| ==== Příklad 6 - pub06-m ==== ^ Vstupní hodnoty (stdin) ^ Výstup (stdout) ^ Chybový výstup (stderr) ^ Návratová hodnota ^ | 9 3 | | /-\ / \ /-----\ / \ |-------| \ / \-----/ \ / \-/ | | /-\ / \ /-----\ / \ |-------| \ / \-----/ \ / \-/ | | /-\ / \ /-----\ / \ |-------| \ / \-----/ \ / \-/ | | | 0| ====== Odevzdání ====== /* Veřejné příklady + Makefile: {{:courses:b3b36prg:hw:b3b36prg-hw02.zip|}} */ Ve výpisu dvoušroubovice dbejte na bíle znaky (mezery), platný znak obrázku je zakončem symbolem nového řádku ('''\n' ''). I znaky, které nejsou na první pohled viditelné jsou znaky, proto pro kontrolu můžete uložit standardní výstup programu do souboru a zobrazit jej v hexadecimálním tvaru například příkazem ''hexdump -C'' a porovnat s přiloženými vzorovými výstupy.Věnujte pozornost [[courses:bab36prga:tutorials:testing|Testování HW programů před odevzdáním]]. ^ ^ Povinné zadání ^ ^ Název v BRUTE | HW2 | ^ Odevzdávané soubory | main.c | ^ Argumenty při spuštění | žádné | ^ Kompilace pomocí | clang -pedantic -Wall -Werror -std=c99 | ^ Očekávaná časová složitost | $\mathcal{O}(n \cdot m)$, resp. $\mathcal{O}(n \cdot m + p \cdot p )$ | ^ Procvičované oblasti | použití vnořených cyklů |