{{indexmenu_n>2}}
======== HW 02 a,b - Vstup, výpočet a výstup ========
^ Termín odevzdání | 29.10.2023 7:00 |
^ Bodový zisk | 2+2b |
^ Počet uploadů | 10 |
^ Typ zadání | povinné |
Tyto úloha slouží k procvičení formátovaného vstupu a výstupu s použitím funkcí ''scanf''() a ''printf''(). **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í HW02a ======
* Ze standardního vstupu načtěte dvě celá čísla v rozsahu [-10 000; 10 000] včetně krajních hodnot.
* Pokud bude některá vstupní hodnota mimo interval, tak vypiště "Vstup je mimo interval!" na standardní výstup a ukončete program s návratovou hodnotou ''0''.
* 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. V případě dělení nulou vypište "Nedefinovany vysledek!".
* 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.
* Pro jednoduchost a přehlednost kódu je očekávaná návratová hodnota programu vždy nula (i při nesprávném/neočekávaném vstupu).
==== Příklad 1 - pub01 ====
^ Standardní vstup (stdin) ^ Očekávaný výstup (stdout) ^ 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) ^ 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
Nedefinovany vysledek!
Prumer: 76.0
| 0 |
==== Příklad 3 - pub03 ====
^ Standardní vstup (stdin) ^ Očekávaný výstup (stdout) ^ Návratová hodnota ^
|
10001 125
|
Vstup je mimo interval!
| 0 |
==== Příklad 4 - pub04 ====
^ Standardní vstup (stdin) ^ Očekávaný výstup (stdout) ^ 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 |
====== Povinné zadání HW02b ======
* Ze standardního vstupu načtěte tři celá čísla $a, b, c$, která reprezentují koeficienty kvadratické rovnice $ax^2 + bx + c$.
* Z načtených čísel vypočítejte diskriminant.
* Výsledek operace vypište v podobě tabulky.
* Na základě hodnoty diskriminantu určete, jaké budou kořeny kvadratické rovnice, viz příklady.
* Očekávaná velikost diskriminantu je v rosahu [-999; 999] včetně krajních hodnot. Pokud je vypočtený diskriminant mimo tento interval, vypište "Diskriminant mimo povoleny interval!".
* Dodržte očekávané formátování, zvláště pak mezery (vždy před koncem buňky) a tzv. bílé znaky. Na konci výstupu je vždy konec řádku ''\n''.
* Pro jednoduchost a přehlednost kódu je očekávaná návratová hodnota programu vždy nula (i při nesprávné hodnotě diskriminantu).
==== Příklad 1 - pub01 ====
^ Standardní vstup (stdin) ^ Očekávaný výstup (stdout) ^ Návratová hodnota ^
|
10 20 10
|
+-----+-----+-----+-----+
| 10 | 20 | 10 | 0 |
+-----+-----+-----+-----+
| Jeden koren |
+-----------------------+
| 0 |
==== Příklad 2 - pub02 ====
^ Standardní vstup (stdin) ^ Očekávaný výstup (stdout) ^ Návratová hodnota ^
|
3 0 2
|
+-----+-----+-----+-----+
| 3 | 0 | 2 | -24 |
+-----+-----+-----+-----+
| Dva imaginarni koreny |
+-----------------------+
| 0 |
==== Příklad 3 - pub03 ====
^ Standardní vstup (stdin) ^ Očekávaný výstup (stdout) ^ Návratová hodnota ^
|
-10 2 30
|
Diskriminant mimo povoleny interval!
| 0 |
==== Příklad 4 - pub04 ====
^ Standardní vstup (stdin) ^ Očekávaný výstup (stdout) ^ Návratová hodnota ^
|
3 3 0
|
+-----+-----+-----+-----+
| 3 | 3 | 0 | 9 |
+-----+-----+-----+-----+
| Dva realne koreny |
+-----------------------+
| 0 |
====== Práce se standardním vstupem ======
Pro získání dat ze standardního vstupu se v C typicky používá funkce ''scanf()''. Její použití nemusí být zejména pro začátečníky úplně pochopitelné. Zkuste si projít řešené příklady včetně videoukázek: [[courses:b0b99prpa:solutions:lab02|2 - Standardní vstup a výstup]]
V tomto domácím úkolu je možné využít jednoduchou funkci, definovanou v hlavičkovém souboru ''getint.h''. Načtení dvou čísel typu ''int'' lze provést následujími způsoby:
#include
int main()
{
int a, b;
scanf ("%i", &a);
scanf ("%i", &b);
printf ("a = %i, b = %i\n", a, b);
return 0;
}
#include "getint.h"
int main()
{
int a, b;
a = getint();
b = getint();
printf ("a = %i, b = %i\n", a, b);
return 0;
}
Pokud se rozhodnete využit v tomto domácím úkolu funkci ''getint()'', je třeba mít příslušný hlavičkový soubor ve stejném adresáři, jako překládaný hlavní soubor. Hlavičkový soubor nedávejte do zip balíčku, který nahráváte na server.
V dalších domácích úkolech tento přístup využít nelze.
====== Odevzdání ======
Abchom vám ulehčili práci, tak jsme pro vás připravili balíčky {{ :courses:b0b99prpa:hw:hw02a_-_vstup_vystup.zip |}} a {{ :courses:b0b99prpa:hw:hw02b_diskriminant.zip |}}, které obsahují všechny veřejné testovací vstupy a jejich očekávané výstupy. Dále archivy obsahují 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 hw02-us.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''
Pokud si nejste jisti, jak správně použít funkci ''scanf()'', je v HW02 možné využit alternativní funkci ''getint()'', která je definována v přiloženém hlavičkovém souboru.
Veřejné příklady + Makefile: {{ :courses:b0b99prpa:hw:hw02_-_vstup_vystup.zip|}} {{ :courses:b0b99prpa:hw:hw02b_diskriminant.zip |}}
^ ^ Zadání ^
^ Název v BRUTE | HW02a, HW02b |
^ Odevzdávané soubory | main.c |
^ Argumenty při spuštění | žádné |
^ Kompilace pomocí | clang -pedantic -Wall -std=c99 -O2 |
^ Procvičované oblasti | standardní vstup a výstup |