HW 2 - Kreslení (ASCII art)

Termín odevzdání 23.03.2024@23:59 PDT
Povinné zadání 3b kontrola Coding stylu
Volitelné zadání není
Bonusové zadání není
Počet uploadů 30
Výchozí soubory bab36prga-hw2.zip
Podpora Lab 03 - Dekompozice programu
Video tutoriál 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í.

  1. Zadaná velikost nebo počet opakování není platné číslo (100).
  2. Zadaná velikost nebo počet opakování není v požadovaném intervalu (101).
  3. 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 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 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ů
courses/bab36prga/hw/hw2.txt · Last modified: 2024/02/11 11:54 by faiglj