{{indexmenu_n>1}}
======== HW 1 - Načítání vstupu ========
^ Termín odevzdání | 16.03.2024@23:59 PDT ((Pacific Daylight Time - [[https://www.timeanddate.com/time/zones/pdt|PDT]]))|
^ Povinné zadání | 3b kontrola [[courses:bab36prga:resources:codingstyle:start|Coding Stylu]]|
^ Volitelné zadání | není|
^ Bonusové zadání | není|
^ Počet uploadů | 30|
^ Podpůrné soubory | {{:courses:bab36prga:hw:bab36prga-hw1.zip|}} |
U této úlohy bude cvičící ručně hodnotit dodržení [[courses:bab36prga:resources:codingstyle:start|kódovacího stylu]] a budou postupovat podle [[courses:bab36prga:hw:start|hodnocení]].
Tato úloha slouží k procvičení cyklů. Není potřeba používat pole. **Vstupní čísla je možné ihned vypisovat.**
====== Povinné zadání ======
* Ze standarního vstupu načítejte celá čísla pomocí funkce ''scanf()'' v rozsahu [-10 000; 10 000] včetně krajních hodnot, dokud na něm jsou data, nebo dokud čtení neskončí chybou (včetně případu, kdy vstup není číslo).
* Vypište všechna načtená čísla za sebe, oddělená čárkou (za posledním číslem není čárka ani mezera).
* V případě že načtené číslo leží mimo zadaný interval vypište na standardní výstup na nový řádek: "Error: Vstup je mimo interval!" a program ukončete s návratovou hodnotou 100. Nevypisujte již žádná další čísla. Před výpis chyby vložte vždy symbol nového řádku.
* Vypište statistiku čísel:
* Počet načtených čísel;
* Počet kladných čísel;
* Počet záporných čísel;
* Procentuální podíl kladných a záporných čísel z načtených vstupních hodnot, vypsané (nikoli zaokrouhlené funkcí ''printf()'') s přesností na dvě desetinná místa;
* Četnosti výskytu sudých a lichých čísel;
* Procentuální podíl sudých a lichých čísel z načtených vstupních hodnot, vypsané s přesností na dvě desetinná místa;
* Průměr načtených čísel;
* Maximální a minimální hodnotu.
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:bab36prga:tutorials:testing|Testování HW programů před odevzdáním]].
==== Příklad 1 - pub01 ====
^ Standardní vstup (stdin) ^ Očekávaný výstup (stdout) ^ Návratová hodnota ^
|
212 -78 5 16 32
|
212, -78, 5, 16, 32
Pocet cisel: 5
Pocet kladnych: 4
Pocet zapornych: 1
Procento kladnych: 80.00
Procento zapornych: 20.00
Pocet sudych: 4
Pocet lichych: 1
Procento sudych: 80.00
Procento lichych: 20.00
Prumer: 37.40
Maximum: 212
Minimum: -78
| 0 |
==== Příklad 2 - pub02 ====
^ Standardní vstup (stdin) ^ Očekávaný výstup (stdout) ^ Návratová hodnota ^
|
140 128 8 1603
4905 -3 -2 0 0
9166 255 -1322
8900 10000 -1 6543
|
140, 128, 8, 1603, 4905, -3, -2, 0, 0, 9166, 255, -1322, 8900, 10000, -1, 6543
Pocet cisel: 16
Pocet kladnych: 10
Pocet zapornych: 4
Procento kladnych: 62.50
Procento zapornych: 25.00
Pocet sudych: 10
Pocet lichych: 6
Procento sudych: 62.50
Procento lichych: 37.50
Prumer: 2520.00
Maximum: 10000
Minimum: -1322
| 0 |
==== Příklad 3 - pub03 ====
^ Standardní vstup (stdin) ^ Očekávaný výstup (stdout) ^ Návratová hodnota ^
|
-12 15 523
26 -15000 1
|
-12, 15, 523, 26
Error: Vstup je mimo interval!
| 100 |
Pokud budete chtít v terminálu ukončit načítání ze standardního vstupu, můžete k tomu využít stisknutí **CTRL+D**.
Do terminálu vyšle [[https://en.wikipedia.org/wiki/End-of-Transmission_character|EOT]] (End of Transmission).
V případě, že máme aktuálně rozepsaný řádek vstupu programu, je tento vstup programu předán na ''stdin''.
Pokud je aktuální vstup prázdný, terminál pošle programu [[https://en.wikipedia.org/wiki/End-of-file|EOF]] (End Of File).
Prakticky tedy Ctrl+D funguje jako ''EOF'' na ''stdin'' pro prázdný vstup.
Podrobnější informace lze nalézt např. v manuálové stránce [[https://www.freebsd.org/cgi/man.cgi?query=termios&sektion=4|termios]] v části //Special Characters// znak ''EOF''.
====== Odevzdání ======
Veřejné příklady + Makefile: {{:courses:bab36prga:hw:bab36prga-hw1.zip|}}
^ ^ Povinné zadání ^
^ Název v BRUTE | HW1 |
^ Odevzdávané soubory | main.c |
^ Argumenty při spuštění | žádné |
^ Návratová hodnota | ''0'' \\ ''100''; "Error: Vstup je mimo interval!" -> ''stdout'' \\ |
^ Kompilace pomocí | clang -pedantic -Wall -Werror -std=c99 -O2 |
^ Očekávaná časová složitost ((Kde $n$ je počet čísel.)) | $\mathcal{O}(n)$ |
^ Procvičované oblasti | základní použití cyklů |