{{indexmenu_n>4}} ======== HW 03 - Kreslení (ASCII art) ======== ^ Termín odevzdání | 22.10.2022 23:59 PDT | ^ Povinné zadání | 2b kontrola [[courses:b0b36prp:resources:tessun:start|Coding Stylu]]| ^ Volitelné zadání | 2b | ^ Bonusové zadání | není | ^ Počet uploadů | 10 | ^ Podpůrné soubory | {{:courses:b0b36prp:hw:b0b36prp-hw03.zip|}} | Tato úloha slouží k procvičení vnořených cyklů. Není potřeba používat pole. ======= 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. * Z načtených čísel "vykreslete" na standardní výstup domeček podle předlohy níže. * První číslo udává šířku domečku, druhé výšku domečku. Viz Příklad 1. * Pokud se nepodaří načíst obě čísla, tak vypište na standardní chybový výstup zprávu: "''Error: Chybny vstup!''" a program ukončete s návratovou hodnotou ''100''. Viz Příklad 2. * Obě čísla (jak šířka, tak výška) musí být v daném intervalu. V případě, že tomu tak není, vypište na standardní chybový výstup zprávu: "''Error: Vstup mimo interval!''" a program ukončete s návratovou hodnotou ''101''. Viz Příklad 3. * První číslo reprezentující šířku musí být vždy liché. Pokud tomu tak není vypište na standardní chybový výstup chybovou hlášku: "''Error: Sirka neni liche cislo!''", v takovém případě je návratová hodnota programu ''102''. Viz Příklad 4. * Každý řádek končí znakem nového řádku, který je ihned za posledním symbolem na řádku ''('X')'', nebo ''('|')'' pro volitelné zadání. === Pořadí kontroly vstupu: === Kontroly vstupu a případné vypsání chyby musí být provedeno v předem zadaném pořadí: - Zadaná šířka domu nebo výška domu není platné číslo (''100'') - Zadaná šířka domu nebo výška domu není v požadovaném intervalu (''101'') - Zadaná šířka domu není liché číslo (''102'') Pro testování funkčnosti program před jeho odevzdáním lze využít přiložené vstupní a referenční výstupní soubory. Dále je možné testovat také generátorem a referečním řešení viz [[courses:b0b36prp:tutorials:testing|Testování HW programů před odevzdáním]]. Pro generování volitelného zadání použijte dodatečný přepínač ''-optional''. ==== Příklad 1 - pub01 ==== ^ Vstupní hodnoty (stdin) ^ Výstup (stdout) ^ Chybový výstup (stderr) ^ Návratová hodnota ^ | 7 4 | X X X X X XXXXXXX X X X X XXXXXXX | žádný | 0 | ==== Příklad 2 - pub02 ==== ^ Vstupní hodnoty (stdin) ^ Výstup (stdout) ^ Chybový výstup (stderr) ^ Návratová hodnota ^ | x 16 | žádný | Error: Chybny vstup! | 100 | ==== Příklad 3 - pub03 ==== ^ Vstupní hodnoty (stdin) ^ Výstup (stdout) ^ Chybový výstup (stderr) ^ Návratová hodnota ^ | -4 16 | žádný | Error: Vstup mimo interval! | 101 | ==== Příklad 4 - pub04 ==== ^ Vstupní hodnoty (stdin) ^ Výstup (stdout) ^ Chybový výstup (stderr) ^ Návratová hodnota ^ | 8 21 | žádný | Error: Sirka neni liche cislo! | 102 | ======= Volitelné zadání ======= * V případě, že jsou první dvě čísla shodná, načtěte třetí kladné celé číslo, které udává délku a výšku plotu. Viz Příklad 4. * Velikost plotu musí být kladná a ostře menší než je výška domu. V případě, že tomu tak nebude, uvědomte o tom uživatele zprávou na standardní chybový výstup ve znění: "''Error: Neplatna velikost plotu!''" a program ukončete s návratovou hodnotou 103. Viz Příklad 5 a 6. * Horizontální části plotu jsou vždy na prvním a posledním řádku plotu. Pravá část plotu končí vždy svislou plaňkou, takže první řádek plotu vypadá pro velikost 2 takto: "''-|''", pro velikost 3: "''|-|''" a pro velikost 4: "''-|-|''" atd. * Domeček je vyplněn znaky 'o' a '*', přičemž v levém horním rohu je vždy znak 'o' a znaky tvoří diagonály. === Pořadí kontroly vstupu: === - Stejná kontrola jako v povinné části (Chyby ''100'', ''101'', ''102'') - Kontrola velikosti plotu (Chyba ''103'') ==== Příklad 5 - pub05 ==== ^ Vstupní hodnoty (stdin) ^ Výstup (stdout) ^ Chybový výstup (stderr) ^ Návratová hodnota ^ | 9 9 6 | X X X X X X X XXXXXXXXX Xo*o*o*oX X*o*o*o*X Xo*o*o*oX-|-|-| X*o*o*o*X | | | Xo*o*o*oX | | | X*o*o*o*X | | | Xo*o*o*oX | | | XXXXXXXXX-|-|-| | žádný | 0 | ==== Příklad 6 - pub06 ==== ^ Vstupní hodnoty (stdin) ^ Výstup (stdout) ^ Chybový výstup (stderr) ^ Návratová hodnota ^ | 5 5 x | žádný | Error: Chybny vstup! | 100 | ==== Příklad 7 - pub07 ==== ^ Vstupní hodnoty (stdin) ^ Výstup (stdout) ^ Chybový výstup (stderr) ^ Návratová hodnota ^ | 5 5 10 | žádný | Error: Neplatna velikost plotu! | 103 | ====== Odevzdání ====== Veřejné příklady + Makefile: {{:courses:b0b36prp:hw:b0b36prp-hw03.zip|}} ^ ^ Povinné zadání ^ Volitelné zadání ^ ^ Název v BRUTE | HW03 || ^ Odevzdávané soubory | main.c || ^ Argumenty při spuštění | žádné || ^ Návratová hodnota | ''0''; //Načtený správný vstup// \\ ''100''; "Error: Chybny vstup!" -> stderr\\ ''101''; "Error: Vstup mimo interval!" \\ ''102''; "Error: Sirka neni liche cislo!" -> stderr \\ | ''0''; //Načtený správný vstup// \\ ''100''; "Error: Chybny vstup!" -> stderr\\ ''101''; "Error: Vstup mimo interval!" -> stderr \\ ''102''; "Error: Sirka neni liche cislo!" -> stderr\\ ''103''; "Error: Neplatna velikost plotu!" -> stderr!| ^ Kompilace pomocí | clang -pedantic -Wall -Werror -std=c99 -O2 || ^ Očekávaná časová složitost | $\mathcal{O}(n \cdot m)$ | $\mathcal{O}(n \cdot m + p \cdot p )$ | ^ Procvičované oblasti | použití vnořených cyklů | složitější podmínky |