Table of Contents

HW 01 - Standardní výstup v C++

Termín odevzdání 14.3.2020 23:59 CEST
Povinné zadání 4b
Bonusové zadání 4b
Počet uploadů 10

Napište program, který načte formátovaný text ze standardního vstupu, zpracuje jej a výsledek vytiskne na standardní výstup.

Zadání a kritéria

  1. Načítaná data jsou rozdělena na konfiguraci a data oddělena rovná se = na samostatném řádku
  2. Konfigurace začíná klíčovým slovem config a může nabývat těchto vlastností přes tečkovou notaci, viz. příklad níže
    1. min je min. hodnota, která se může vyskytnou v načítaných datech
    2. max je max. hodnota, která se může vyskytnou v načítaných datech
    3. width který označuje počet znaků buňky na výstupu a min. hodnota je 1.
    4. align zarovnává čísla v buňkách vlevo když příkaz nabývá hodnoty left nebo vpravo při hodnotě right
  3. Čísla na vstupu jsou celá, v rozsahu config.min - config.max včetně krajních hodnot.
  4. Počet řádků není omezen.
  5. Jednotlivé sloupce jsou označeny A - Z.
  6. Jednotlivé řádky jsou označeny čísly 1 - n, kde n je poslední řádek
  7. V případě nezadání konfiguračních parametrů na vstupu (viz dále) budou použity defaultní hodnoty a uživatel o tom bude informován.
    1. min=-99, na standardní výstup se vypíše config.min=-99
    2. max=100, na standardní výstup se vypíše config.max=100
    3. width=3, na standardní výstup se vypíše config.width=3.
    4. align=left, na standardní výstup se vypíše config.align=left
  8. Buňky jsou vždy odděleny vždy středníkem ; a řádek končí znakem \n
  9. V načítaných datech se může vyskytnou příkaz SUM(od:do), který bude sčítat hodnoty na daném řádku podle rozsahu od:do. Do příslušné buňky poté uloží výsledek
  10. Pokud řádek bude kratší, vypíše se prázdná buňka
  11. Vypsání parametrů a vykreslení tabulky bude následující
    1. Každý řádek má na konci znak nového řádku \n
    2. Nejprve se vypíšou všechny parametry v pořadí, které jsou uvedeny v bodu 2
    3. Parametry a tabulka jsou odděleny novým řádkem
    4. Každá buňka je ohraničena + v jejím rohu
    5. Sloupce jsou oddělený pomocí svislítka |
    6. Řádky jsou odděleny pomocí pomlček -
    7. První a poslední znak v buňce bude vždy mezera
    8. V případě splnění všech kritérií, návratová hodnota bude 0

Chybová hlášení

  1. Na vstupu bude číslo mimo rozsah config.min a config.max, na chybový výstup se vypíše Out of range a návratová hodnota bude 100
  2. Na vstupu se objeví místo čísla písmeno nebo textový řetězec vyjma příkazu SUM(od:do), na chybový výstup se vypíše Invalid input a návratová hodnota bude 101. Tato chybová hláška se také vypíše, když interval v příkazu SUM() bude rozsah, který program nemůže spočítat (např. existují buňky A-C a program bude chtít spočítat A-G).
  3. Hodnota vstupních parametrů bude mimo povolené hodnoty, na chybový výstup se vypíše Invalid configuration a návratová hodnota bude 102. Toto platí i v případě min>max.
  4. Šířka buňky bude moc úzká na vypsání čísla, na chybový výstup se vypíše Cell is too short a návratová hodnota bude 103

Bonusové zadání a kritéria

K základnímu zadání přibydou ještě tato následující kritéria, zbytek zůstává ze základního zadání

  1. Konfigurace config bude rozšířena o následující parametry
    1. stretch parametr udává, zda-li se buňka má roztahovat podle největšího čísla, v případě, že se do buňky nevejde (stretch=1) nebo se místo čísla vypíše n x #, kde n je šířka buňky (stretch=0)
    2. header vypíše hlavičku jednotlivých sloupců a řádků když header=1, jinak ji vypisovat nebude header=0
  2. V případě nezadání bonusových konfiguračních parametrů na vstupu, se bude uvažovat, že se tyto parametry nezadaly a do standardního výstupu se nebudou vypisovat

Chybová hlášení pro bonus

  1. Chybová hlášení zůstávají stejná vyjma posledního bodu, který je řešením bonusového zadání

Příklady

Standardní vstup (cin) Očekávaný výstup (cout) Očekávaný chybový výstup (cerr) Návratová hodnota
config.min=-99
config.max=150
config.width=3
config.align=left
=
10;20;20;SUM(A:C)
-10;-20;-30;-40;-50
config.min=-99
config.max=150
config.width=3
config.align=left

+-----+-----+-----+-----+-----+-----+
|     | A   | B   | C   | D   | E   |
+-----+-----+-----+-----+-----+-----+
| 1   | 10  | 20  | 20  | 50  |     |
+-----+-----+-----+-----+-----+-----+
| 2   | -10 | -20 | -30 | -40 | -50 |
+-----+-----+-----+-----+-----+-----+
0
config.width=3
config.align=right
=
10;20;30;SUM(A:C)
-40;-50;-60;-70
90;80;-20;-30
config.min=-99
config.max=100
config.width=3
config.align=right

+-----+-----+-----+-----+-----+
|     |   A |   B |   C |   D |
+-----+-----+-----+-----+-----+
|   1 |  10 |  20 |  30 |  60 |
+-----+-----+-----+-----+-----+
|   2 | -40 | -50 | -60 | -70 |
+-----+-----+-----+-----+-----+
|   3 |  90 |  80 | -20 | -30 |
+-----+-----+-----+-----+-----+
0
config.min=0
config.max=10
=
10;20;30;SUM(A:C)
60;20;70
Out of range
100
config.min=0
config.max=1000
=
a;b;c;400;500;SUM(A:E)
60;20;30;40;50;60;70
Invalid input
101
config.min=0
config.max=1000
config.width=-5
=
100;200;300;400;500;SUM(A:E)
60;20;30;40;50;60;70
Invalid configuration
102
config.min=0
config.max=1000
config.width=2
=
100;200;300;400;500;SUM(A:E)
60;20;30;40;50;60;70
Cell is too short
103
config.min=-5000
config.max=5000
config.width=3
config.align=left
config.stretch=0
=
3300;4400;20;SUM(A:C)
-40;-50;-60
config.min=-5000
config.max=5000
config.width=3
config.align=left
config.stretch=0

+-----+-----+-----+-----+-----+
|     | A   | B   | C   | D   |
+-----+-----+-----+-----+-----+
| 1   | ### | ### | 20  | ### |
+-----+-----+-----+-----+-----+
| 2   | -40 | -50 | -60 |     |
+-----+-----+-----+-----+-----+
0
config.min=-5000
config.max=5000
config.width=3
config.align=left
config.stretch=1
=
3300;4400;20;SUM(A:C)
-40;-50;-60
config.min=-5000
config.max=5000
config.width=4
config.align=left
config.stretch=1

+------+------+------+------+------+
|      | A    | B    | C    | D    |
+------+------+------+------+------+
| 1    | 3300 | 4400 | 20   | 7720 |
+------+------+------+------+------+
| 2    | -40  | -50  | -60  |      |
+------+------+------+------+------+
0
config.min=-99
config.max=100
config.width=4
config.align=left
config.header=0
=
33;44;20;SUM(A:C)
-40;-50;SUM(A:B);SUM(A:C)
3;14;15;92
config.min=-99
config.max=100
config.width=4
config.align=left
config.header=0

+------+------+------+------+
| 33   | 44   | 20   | 97   |
+------+------+------+------+
| -40  | -50  | -90  | -180 |
+------+------+------+------+
| 3    | 14   | 15   | 92   |
+------+------+------+------+
0

Odevzdání

Veřejné příklady + Template: HW01.zip

Povinné i bonusové zadání
Název v BRUTE HW01
Povinný soubor main.cpp
Volitelný soubor main.hpp
Argumenty při spuštění žádné
Kompilace pomocí g++ -pedantic -Wall -Werror -std=c++17
Procvičované oblasti standardní vstup a výstup v C++