Termín odevzdání | 19.10.2024 23:59 PDT |
Povinné zadání | 1b |
Volitelné zadání | není |
Bonusové zadání | není |
Počet uploadů | 10 |
Podpůrné soubory | b0b36prp-hw01.zip |
Tato úloha slouží k procvičení formátovaného vstupu a výstupu s použitím funkcí scanf
(“”), printf
(“”) a chybového výstupu fprintf
(stderr
, “”). Podobně jako ostatní domácí úkoly, vždy je dostačující znalost témat z předchozích přednášek a cvičení, tj. není nutné (a mnohdy ani vhodné) pro povinné a volitelné zádání používat pokročilé programové konstrukty.
Ze standardního vstupu načtěte dvě celá čísla v rozsahu [-10 000; 10 000] včetně krajních hodnot. V případě chyby načítání vstupu, program vypíše “Chyba nacitani vstupu!\n”
na standardní výstup a končí s návratovou hodnotou “100
”.
Pokud bude některá vstupní hodnota mimo interval, tak vypiště “Error: Vstup je mimo interval!
” na standardní chybový výstup (stderr
) a ukončete program s návratovou hodnotou “100
”.
Vypište čísla v dekadickém a hexadecimálním tvaru na standardní výstup.
Dále vypište celočíselný součet, rozdíl a součin obou čísel.
Vypište celočíselný podíl obou čísel. Pokud by mělo nastat dělení nulou, vypište výsledek NaN
a na stderr
“Error: Nedefinovany vysledek!
” a program ukončete s návratovou hodnotou “101
”.
Vypočtěte průměrnou hodnotu obou čísel a vypište ji na standardní výstup s přesností na jedno desetinné místo.
Dodržte očekávané formátování, zvláště pak mezery a tzv. bílé znaky. Na konci výstupu je vždy konec řádku.
Při
návrhu programu uvažujte o
zjednodušení implementace vhodnou
dekompozicí. Protože načítáme dvě celá čísla, která navíc mají být v definovaném rozsahu, nabízí se napsat funkci, která bude čísla načítat a vracet např.
true
, pokud se čísla v rozsahu podaří načíst. Podobně výstup můžeme řešit samostatnou funkcí, čímž dosáhneme relativně krátké funkce main, která příspívá k
čitelnosti kódu. Například
_Bool read_numbers(int *a, int *b);
.
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.
Abchom vás motivovali, připravili jsme pro vás balíček b0b36prp-hw01.zip, který obsahuje všechny veřejné testovací vstupy a jejich očekávané výstupy. Dále archiv obsahuje jednoduchý Makefile
, díky kterému můžete kompilovat program jednoduše pomocí příkazu make
a vytvořit archiv pro odevzdávací systém pomocí příkazu make zip
(vytvoří se archiv hw01-b0b36prp-brute.zip
).
Na konci každého řádku je symbol nového řádku ( '\n'
).
Pro kontrolu můžete uložit standardní výstup programu do souboru a zobrazit jej v hexadecimálním tvaru pomocí příkazu hexdump -C
| Povinné zadání |
Název v BRUTE | HW01 |
Odevzdávané soubory | main.c |
Argumenty při spuštění | žádné |
Návratová hodnota | 0
100 ; “Chyba nacitani vstupu!” → stderr
100 ; “Error: Vstup je mimo interval!” → stderr
101 ; “Error: Nedefinovany vysledek!” → stderr
|
Kompilace | clang -pedantic -Wall -std=c99 -O2 |
Procvičované oblasti | standardní vstup a výstup |
Domácí úkoly nezkoušejte odevzdávat, prostě je odevzdejte. Otestujte si program sami a to na přiložených příkladech nebo nově vytvořených vstupech a porovnáním s refernečním řešením, více viz -
Testování HW programů před odevzdáním.