{{indexmenu_n>1}}
======== HW 1 - Kreslení (ASCII art) ========
^ Termín odevzdání | 18.03.2023 23:59 AoE (([[https://www.timeanddate.com/time/zones/aoe|AoE]]))|
^ Povinné zadání | 3b kontrola [[courses:bab36prga:resources:codingstyle:start|Coding stylu]]|
^ Volitelné zadání | není |
^ Bonusové zadání | není |
^ Počet uploadů | 1030 |
^ Výchozí soubory | {{ :courses:bab36prga:hw:bab36prga-hw1.zip |}} (update 2022-03-07)|
^ 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-hw01.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 | HW1 |
^ 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ů |