Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

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: 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 <stdio.h>
 
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 hw02a_-_vstup_vystup.zip a 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: hw02_-_vstup_vystup.zip 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
courses/b0b99prpa/hw/hw02.txt · Last modified: 2023/09/18 10:36 by nentvond