{{ :courses:b0b36prp:hw:b0b36prp-hw01.zip |}}{{indexmenu_n>2}}
======== HW 01 - Načítání vstupu, výpočet a výstup ========
^ 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 | {{:courses:b0b36prp:hw: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.**
====== Povinné zadání ======
* 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í chybový 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 [[courses:b0b36prp:resources:tessun:cs_struktura|č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 [[courses:b0b36prp:tutorials:testing|Testování HW programů před odevzdáním]].
==== Příklad 1 - pub01 ====
^ Standardní vstup (''stdin'') ^ Očekávaný výstup (''stdout'') ^ Očekávaný výstup (''stderr'') ^ Návratová hodnota ^
|
11 24
|
Desitkova soustava: 11 24
Sestnactkova soustava: b 18
Soucet: 11 + 24 = 35
Rozdil: 11 - 24 = -13
Soucin: 11 * 24 = 264
Podil: 11 / 24 = 0
Prumer: 17.5
| | 0 |
==== Příklad 2 - pub02 ====
^ Standardní vstup (''stdin'') ^ Očekávaný výstup (''stdout'') ^ Očekávaný výstup (''stderr'') ^ Návratová hodnota ^
|
152 0
|
Desitkova soustava: 152 0
Sestnactkova soustava: 98 0
Soucet: 152 + 0 = 152
Rozdil: 152 - 0 = 152
Soucin: 152 * 0 = 0
Podil: 152 / 0 = NaN
Prumer: 76.0
| Error: Nedefinovany vysledek! | 101 |
==== Příklad 3 - pub03 ====
^ Standardní vstup (''stdin'') ^ Očekávaný výstup (''stdout'') ^ Očekávaný výstup (''stderr'') ^ Návratová hodnota ^
|
10001 125
| | Error: Vstup je mimo interval! | 100 |
==== Příklad 4 - pub04 ====
^ Standardní vstup (''stdin'') ^ Očekávaný výstup (''stdout'') ^ Očekávaný výstup (''stderr'') ^ Návratová hodnota ^
|
212 -78 5 16 32
|
Desitkova soustava: 212 -78
Sestnactkova soustava: d4 ffffffb2
Soucet: 212 + -78 = 134
Rozdil: 212 - -78 = 290
Soucin: 212 * -78 = -16536
Podil: 212 / -78 = -2
Prumer: 67.0
| | 0 |
====== Odevzdání ======
Abchom vás motivovali, připravili jsme pro vás balíček {{:courses:b0b36prp:hw: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 - [[courses:b0b36prp:tutorials:testing|Testování HW programů před odevzdáním]].