HW 03 - Kreslení (ASCII art)

Termín odevzdání 02.11.2024 23:59 PDT
Povinné zadání 2b kontrola Coding Stylu
Volitelné zadání 2b
Bonusové zadání není
Počet uploadů 10
Podpůrné soubory b0b36prp-hw03.zip
Tato úloha slouží k procvičení vnořených cyklů. Není potřeba používat pole. Zároveň vyžaduje uvažovat velikost základní datových typů a omezenou velikost zásobníku.

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í:

  1. Zadaná šířka domu nebo výška domu není platné číslo (100)
  2. Zadaná šířka domu nebo výška domu není v požadovaném intervalu (101)
  3. 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 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:

  1. Stejná kontrola jako v povinné části (Chyby 100, 101, 102)
  2. 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: 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
courses/b0b36prp/hw/hw03.txt · Last modified: 2024/09/15 13:15 by faiglj