Vaša konzolová aplikácia napísaná v jazyku C bude fungovať v týchto krokoch:
Existujú 2 možnosti spustenia programu:
V tomto prípade program postupuje nasledovne:
ITEMS_FILE
, ktoré sa nachádza v dodanom hlavičkovom súbore
data.h
.
Spustenie programu bez CMD argumentov:
z5.exe
Používateľ zadá 2 CMD argumenty, ktoré predstavujú cestu k TXT súborom pre načítanie armád. V tomto prípade program postupuje nasledovne:
ITEMS_FILE
, ktoré sa nachádza v dodanom hlavičkovom súbore
data.h
.
Spustenie programu s 2 CMD argumentmi:
z5.exe txt/army1.txt txt/army2.txt
Nastane v prípade, že používateľ zadá nesprávny počet CMD argumentov. Správny počet argumentov
je 0 (argc=1
) alebo 2 (argc=3
).
Pri odhalení chyby sa vypíše chybové hlásenie ERR_CMD
na štandardný
chybový výstup (stderr). Následne program skončí s návratovou hodnotou 0.
Príklady spustenia programu, kedy nastane chyba ERR_CMD:
z5.exe txt/army1.txt
Poznámka: v tomto prípade používateľ zadal iba 1 CMD argument, ktorý predstavuje cestu k TXT súboru s 1. armádou. Chýba zadanie cesty k súboru s 2. armádou.
z5.exe txt/army1.txt txt/army2.txt txt/army3.txt
Poznámka: v tomto prípade používateľ zadal viac ako 2 cesty (bojujú proti sebe len 2 armády).
Predmety sa načítajú z JSON súboru. Cesta k tomuto súboru je určená makrom
ITEMS_FILE
, ktoré sa nachádza v dodanom hlavičkovom súbore
data.h
. JSON súbor môže obsahovať premenlivý počet predmetov. Z toho
dôvodu je ideálne načítavanie implementovať pomocou dynamického poľa. Počas načítavania môžu
nastať rôzne chybové situácie, ktoré je potrebné odhaliť.
JSON je štruktúrovaný formát súboru na uchovávanie údajov. JSON môže obsahovať:
Uvádzame príklad JSON súboru, ktorý obsahuje pole objektov s osobami. Každý objekt má key-value páry definujúce jednotlivé atribúty objektu.
[
{
"name": "Alice Johnson",
"age": 30,
"email": "alice@example.com"
},
{
"name": "Bob Smith",
"age": 25,
"email": "bob@example.com"
},
{
"name": "Charlie Brown",
"age": 40,
"email": "charlie@example.com"
}
]
Pravidlá pre JSON
[...]
.{...}
.:
).Na overenie, či je JSON súbor platný môžete použiť JSON Lint.
Uvádzame príklad JSON súboru, ktorý bude obsahovať databázu predmetov.
JSON obsahuje pole predmetov.
Každý predmet je reprezentovaný ako objekt.
Každý predmet má svoje atribúty vyjadrené pomocou key-value párov.
Atribúty každého predmetu sú vždy v nasledovnom poradí: name
,
att
, def
,
slots
, range
a
radius
.
[
{
"name":"wand",
"att":12,
"def":4,
"slots":1,
"range":4,
"radius":2
},
{
"name":"fireball",
"att":11,
"def":0,
"slots":1,
"range":3,
"radius":3
},
{
"name":"sword",
"att":9,
"def":2,
"slots":1,
"range":0,
"radius":0
},
{
"name":"spear",
"att":6,
"def":1,
"slots":1,
"range":1,
"radius":1
},
{
"name":"dagger",
"att":4,
"def":0,
"slots":1,
"range":0,
"radius":0
},
{
"name":"rock",
"att":3,
"def":0,
"slots":1,
"range":2,
"radius":1
},
{
"name":"armor",
"att":2,
"def":7,
"slots":1,
"range":0,
"radius":0
},
{
"name":"shield",
"att":2,
"def":6,
"slots":1,
"range":0,
"radius":0
},
{
"name":"gloves",
"att":1,
"def":4,
"slots":1,
"range":0,
"radius":0
},
{
"name":"helmet",
"att":1,
"def":5,
"slots":1,
"range":0,
"radius":0
},
{
"name":"aura",
"att":0,
"def":8,
"slots":1,
"range":0,
"radius":0
},
{
"name":"cannon",
"att":12,
"def":0,
"slots":2,
"range":4,
"radius":4
},
{
"name":"axe",
"att":10,
"def":2,
"slots":2,
"range":1,
"radius":1
},
{
"name":"hammer",
"att":8,
"def":2,
"slots":2,
"range":1,
"radius":2
},
{
"name":"crossbow",
"att":5,
"def":1,
"slots":2,
"range":3,
"radius":0
},
{
"name":"slingshot",
"att":2,
"def":0,
"slots":2,
"range":2,
"radius":1
}
]
Uvádzame pokyny k formátu JSON súboru, ktorý obsahuje databázu predmetov. Treba si tieto pokyny riadne naštudovať, aby ste vedeli, na čo si treba dať počas načítania pozor.
}
bude vždy nasledovať
čiarka ešte v tom istom riadku. Za posledným predmetom čiarka nebude.
:
Formátovaný JSON súbor
[
{
"name":"slingshot",
"att":2,
"def":0,
"slots":2,
"range":2,
"radius":1
},
{
"name":"spear",
"att":6,
"def":1,
"slots":1,
"range":1,
"radius":1
},
{
"name":"armor",
"att":2,
"def":7,
"slots":1,
"range":0,
"radius":0
},
{
"name":"shield",
"att":2,
"def":6,
"slots":1,
"range":0,
"radius":0
},
{
"name":"aura",
"att":0,
"def":8,
"slots":1,
"range":0,
"radius":0
},
{
"name":"hammer",
"att":8,
"def":2,
"slots":2,
"range":1,
"radius":2
},
{
"name":"crossbow",
"att":5,
"def":1,
"slots":2,
"range":3,
"radius":0
},
{
"name":"fireball",
"att":11,
"def":0,
"slots":1,
"range":3,
"radius":3
},
{
"name":"sword",
"att":9,
"def":2,
"slots":1,
"range":0,
"radius":0
}
]
Neformátovaný JSON súbor
[
{
"name":"slingshot",
"att":2 ,
"def":0,
"slots" :2,
"range":2,
"radius":1
},
{
"name":"spear",
"att":6 ,
"def":1,
"slots":1 ,
"range":1 ,
"radius":1
},
{
"name":"armor",
"att":2,
"def":7,
"slots":1 ,
"range":0,
"radius":0
},
{
"name": "shield",
"att": 2,
"def":6,
"slots":1,
"range":0 ,
"radius":0
},
{
"name":"aura",
"att": 0,
"def":8,
"slots": 1,
"range":0,
"radius":0
},
{
"name":"hammer",
"att":8,
"def":2,
"slots":2,
"range":1 ,
"radius":2
},
{
"name":"crossbow",
"att":5,
"def":1,
"slots":2,
"range" : 3,
"radius": 0
},
{
"name" : "fireball",
"att": 11 ,
"def": 0,
"slots":1,
"range":3 ,
"radius":3
},
{
"name":"sword",
"att":9,
"def":2,
"slots":1,
"range":0,
"radius":0
}
]
Počas načítavania predmetov môžu nastať nasledovné chyby, ktoré je potrebné odhaliť, vypísať príslušné chybové hlásenie na stderr (štandardný chybový výstup) a následne ukončiť program s návratovou hodnotou 0. Chyby sa nebudú vzájomne kombinovať.
Nastane ak sa JSON súbor nedá otvoriť (t.j. súbor daný makrom
ITEMS_FILE
neexistuje). V danom prípade
sa na stderr vypíše chybové hlásenie ERR_FILE
a
program skončí s návratovou hodnotou 0.
Ak v JSON súbore chýba niektorý atribút predmetu (t.j. chýba príslušný key-value pár).
V danom prípade sa na stderr vypíše chybové hlásenie ERR_MISSING_ATTRIBUTE
a program skončí s návratovou hodnotou 0.
Príklad
{
"att":9,
"def":2,
"slots":1,
"range":0,
"radius":0
}
Poznámka: predmet nemá zadaný atribút name
.
Ak v JSON súbore chýba niektorému kľúču jeho povinná hodnota.
V danom prípade sa na stderr vypíše chybové hlásenie ERR_MISSING_VALUE
a program skončí s návratovou hodnotou 0.
Príklad
{
"name":"aura",
"att":0,
"def":,
"slots":1,
"range":0,
"radius":0
}
Poznámka: kľúč def
nemá zadanú hodnotu.
Ak má kľúč v JSON súbore neplatnú hodnotu. Napríklad očakáva sa číslo a bol zadaný reťazec písmen.
Testovať sa budú len numerické atribúty, t.j. att
,
def
, slots
,
range
a radius
(t.j. či bola
pre tieto atribúty zadaná numerická hodnota).
V danom prípade sa na stderr vypíše chybové hlásenie ERR_BAD_VALUE
a program skončí s návratovou hodnotou 0.
Príklad
{
"name":"fireball",
"att":abcd,
"def":0,
"slots":1,
"range":3,
"radius":3
}
Poznámka: Kľúč att
má namiesto čísla zadaný reťazec
abcd
.
Predmety sa vypíšu v takom poradí, v akom sú uložené v JSON súbore. Každému predmetu sa vypíšu všetky atribúty.
JSON súbor s predmetmi
[
{
"name":"slingshot",
"att":2,
"def":0,
"slots":2,
"range":2,
"radius":1
},
{
"name":"spear",
"att":6,
"def":1,
"slots":1,
"range":1,
"radius":1
},
{
"name":"armor",
"att":2,
"def":7,
"slots":1,
"range":0,
"radius":0
},
{
"name":"shield",
"att":2,
"def":6,
"slots":1,
"range":0,
"radius":0
},
{
"name":"aura",
"att":0,
"def":8,
"slots":1,
"range":0,
"radius":0
},
{
"name":"hammer",
"att":8,
"def":2,
"slots":2,
"range":1,
"radius":2
},
{
"name":"crossbow",
"att":5,
"def":1,
"slots":2,
"range":3,
"radius":0
},
{
"name":"fireball",
"att":11,
"def":0,
"slots":1,
"range":3,
"radius":3
},
{
"name":"sword",
"att":9,
"def":2,
"slots":1,
"range":0,
"radius":0
}
]
Výpis predmetov
Name: slingshot
Attack: 2
Defense: 0
Slots: 2
Range: 2
Radius: 1
Name: spear
Attack: 6
Defense: 1
Slots: 1
Range: 1
Radius: 1
Name: armor
Attack: 2
Defense: 7
Slots: 1
Range: 0
Radius: 0
Name: shield
Attack: 2
Defense: 6
Slots: 1
Range: 0
Radius: 0
Name: aura
Attack: 0
Defense: 8
Slots: 1
Range: 0
Radius: 0
Name: hammer
Attack: 8
Defense: 2
Slots: 2
Range: 1
Radius: 2
Name: crossbow
Attack: 5
Defense: 1
Slots: 2
Range: 3
Radius: 0
Name: fireball
Attack: 11
Defense: 0
Slots: 1
Range: 3
Radius: 3
Name: sword
Attack: 9
Defense: 2
Slots: 1
Range: 0
Radius: 0
Pre výpis predmetov budú platiť nasledovné pravidlá.
Name
, Attack
,
Defense
, Slots
,
Range
a Radius
.
Očakávaný výstup
Name: slingshot
Attack: 2
Defense: 0
Slots: 2
Range: 2
Radius: 1
Name: spear
Attack: 6
Defense: 1
Slots: 1
Range: 1
Radius: 1
Name: armor
Attack: 2
Defense: 7
Slots: 1
Range: 0
Radius: 0
Name: shield
Attack: 2
Defense: 6
Slots: 1
Range: 0
Radius: 0
Name: aura
Attack: 0
Defense: 8
Slots: 1
Range: 0
Radius: 0
Name: hammer
Attack: 8
Defense: 2
Slots: 2
Range: 1
Radius: 2
Name: crossbow
Attack: 5
Defense: 1
Slots: 2
Range: 3
Radius: 0
Name: fireball
Attack: 11
Defense: 0
Slots: 1
Range: 3
Radius: 3
Name: sword
Attack: 9
Defense: 2
Slots: 1
Range: 0
Radius: 0
Tolerovaný výstup
Name: slingshot
Attack: 2
Defense: 0
Slots: 2
Range: 2
Radius: 1
Name: spear
Attack: 6
Defense: 1
Slots: 1
Range: 1
Radius: 1
Name: armor
Attack: 2
Defense: 7
Slots: 1
Range: 0
Radius: 0
Name: shield
Attack: 2
Defense: 6
Slots: 1
Range: 0
Radius: 0
Name: aura
Attack: 0
Defense: 8
Slots: 1
Range: 0
Radius: 0
Name: hammer
Attack: 8
Defense: 2
Slots: 2
Range: 1
Radius: 2
Name: crossbow
Attack: 5
Defense: 1
Slots: 2
Range: 3
Radius: 0
Name: fireball
Attack: 11
Defense: 0
Slots: 1
Range: 3
Radius: 3
Name: sword
Attack: 9
Defense: 2
Slots: 1
Range: 0
Radius: 0
Bojové jednotky jednej armády sú uložené v TXT súbore (cesta k tomuto súboru je zadaná ako CMD argument). Formát TXT súboru je rovnaký ako v zadaní 4.
Príklad TXT súboru, ktorý obsahuje bojové jednotky armády.
5
Lukas gloves
Tomas spear dagger
Robo rock
Patrik axe
Juro aura wand
Uvádzame pokyny k formátu, ktorý bude platiť pre TXT súbor s armádou. Tester môže počas testovania skúšať TXT súbory s rôznym formátovaním v rámci platných pravidiel.
Formátovaný TXT súbor
3
Neil hammer
Nick rock helmet
Buck axe
Neformátovaný TXT súbor
3
Neil hammer
Nick rock helmet
Buck axe
Počas načítavania armád môžu nastať nasledovné chyby, ktoré je potrebné odhaliť, vypísať príslušné chybové hlásenie na stderr (štandardný chybový výstup) a následne ukončiť program s návratovou hodnotou 0. Chyby sa nebudú vzájomne kombinovať.
Zadaný TXT súbor s aramádou sa nedá otvoriť (napr. neplatná cesta). V danom prípade sa na stderr vypíše chybové hlásenie ERR_FILE a program skončí s návratovou hodnotou 0.
Príklad
z5.exe txt/army1.txt bad/path/to/file.txt
Poznámka: v tomto prípade používateľ zadal 2 CMD argumenty, pričom druhý CMD argument predstavuje neplatnú cestu k súboru (taký súbor neexistuje).
Nesprávny počet jednotiek v armáde. Platia tu rovnaké pravidlá ako v zadaní 4. V danom prípade sa na stderr vypíše chybové hlásenie ERR_UNIT_COUNT a program skončí s návratovou hodnotou 0.
Príklad
armyA.txt
6
Tom dagger
Paul sword shield
Miko rock
Rago shield
Finto cannon
Lepto spear helmet
armyB.txt
4
Adam rock aura
Miro crossbow
Jano dagger dagger
Jozo wand
z5.exe armyA.txt armyB.txt
Poznámka: v súbore armyA.txt
je zadaných až 6 bojových jednotiek.
Nesprávny počet predmetov v inventári. Platia tu rovnaké pravidlá ako v zadaní 4. V danom prípade sa na stderr vypíše chybové hlásenie ERR_ITEM_COUNT a program skončí s návratovou hodnotou 0.
Príklad
armyA.txt
1
Mike slingshot
armyB.txt
2
Hell shield gloves
Bill rock rock dagger
z5.exe armyA.txt armyB.txt
Poznámka: v súbore armyB.txt
má jednotka s menom
Bill
zadané až 3 predmety.
Neznámy predmet v inventári. Platia tu rovnaké pravidlá ako v zadaní 4. V danom prípade sa na stderr vypíše chybové hlásenie ERR_WRONG_ITEM a program skončí s návratovou hodnotou 0.
Príklad
armyA.txt
1
Tobby dagger paper
armyB.txt
2
Tom dagger
Paul sword shield
z5.exe armyA.txt armyB.txt
Poznámka: v súbore armyA.txt
má jednotka s menom
Tobby
zadaný neplatný predmet s názvom
paper
(nenachádza sa v databáze
items.json).
Počet slotov bol prekročený. Platia tu rovnaké pravidlá ako v zadaní 4. V danom prípade sa na stderr vypíše chybové hlásenie ERR_SLOTS a program skončí s návratovou hodnotou 0.
Príklad
armyA.txt
5
Lukas gloves
Tomas spear dagger
Robo rock
Patrik axe
Juro aura wand
armyB.txt
3
Shu dagger
Pho hammer gloves
Rhi sword sword
z5.exe armyA.txt armyB.txt
Poznámka: v súbore armyB.txt
má jednotka s menom
Pho
prekročený počet slotov, pretože predmety
hammer
a gloves
zaberajú
dokopy 3 sloty (použila sa databáza
items.json).
Pre výpis armád platia rovnaké pravidlá ako v zadaní 4. V každej armáde sa vypíšu všetky jednotky a ich atribúty.
Súbor army4.txt
4
Adam rock aura
Miro crossbow
Jano dagger dagger
Jozo wand
Súbor army1.txt
1
Mike slingshot
Spustenie programu
z5.exe army4.txt army1.txt
Výpis armád
Army 1
Unit: 0
Name: Adam
HP: 100
Item 1: rock,3,0,1,2,1
Item 2: aura,0,8,1,0,0
Unit: 1
Name: Miro
HP: 100
Item 1: crossbow,5,1,2,3,0
Unit: 2
Name: Jano
HP: 100
Item 1: dagger,4,0,1,0,0
Item 2: dagger,4,0,1,0,0
Unit: 3
Name: Jozo
HP: 100
Item 1: wand,12,4,1,4,2
Army 2
Unit: 0
Name: Mike
HP: 100
Item 1: slingshot,2,0,2,2,1
Poznámka: použila sa databáza items.json
Pre výpis armád budú platiť nasledovné pravidlá.
Army
,
Unit:
,
Name:
,
HP:
,
Item 1:
a
Item 2:
.
Očakávaný výstup
Army 1
Unit: 0
Name: Mike
HP: 100
Item 1: slingshot,2,0,2,2,1
Army 2
Unit: 0
Name: Tom
HP: 100
Item 1: dagger,4,0,1,0,0
Unit: 1
Name: Paul
HP: 100
Item 1: sword,9,2,1,0,0
Item 2: shield,2,6,1,0,0
Tolerovaný výstup
Army 1
Unit: 0
Name: Mike
HP: 100
Item 1: slingshot, 2, 0, 2, 2, 1
Army 2
Unit: 0
Name: Tom
HP: 100
Item 1: dagger,4,0,1,0,0
Unit: 1
Name: Paul
HP: 100
Item 1: sword,9,2,1,0, 0
Item 2: shield, 2,6,1,0,0
K zadaniu sú k dispozícii na stiahnutie nasledovné súbory.
Z webstránky zadania si môžete stiahnuť dodané zdrojové/hlavičkové súbory.
Hlavičkový súbor data.h
/*
* Makra a struktury
*/
#ifndef DATA_H
#define DATA_H
#define ITEMS_FILE "items.json" // fixne dana cesta k JSON suboru s predmetmi ... NEMENIT !!!
#define MAX_LINE 1000 // maximalna dlzka riadku v TXT/JSON subore
#define MAX_FILENAME 500 // maximalna dlzka cesty k suboru
#define MAX_NAME 100 // maximalna dlzka nazvu/mena predmetu/jednotky
#define MIN_ARMY 1 // minimalny pocet bojovych jednotiek v armade
#define MAX_ARMY 5 // maximalny pocet bojovych jednotiek v armade
// chyby vznikajuce pocas nacitania predmetov z JSON suboru
#define ERR_MISSING_ATTRIBUTE "ERR_MISSING_ATTRIBUTE" // chybajuci atribut predmetu
#define ERR_MISSING_VALUE "ERR_MISSING_VALUE" // chybajuca hodnota kluca
#define ERR_BAD_VALUE "ERR_BAD_VALUE" // zla hodnota kluca
// chyby vznikajuce pocas nacitania armady z TXT suboru
#define ERR_UNIT_COUNT "ERR_UNIT_COUNT" // nespravny pocet jednotiek
#define ERR_ITEM_COUNT "ERR_ITEM_COUNT" // nepovoleny pocet predmetov v inventari
#define ERR_WRONG_ITEM "ERR_WRONG_ITEM" // neznamy predmet v inventari
#define ERR_SLOTS "ERR_SLOTS" // pocet slotov prekroceny
// dalsie chyby
#define ERR_FILE "ERR_FILE" // subor sa neda otvorit (plati pre JSON aj TXT subor)
#define ERR_CMD "ERR_CMD" // zly pocet CMD argumentov
// Struktura pre predmet v inventari
typedef struct item {
char name[MAX_NAME + 1]; // nazov predmetu
int att; // utok
int def; // obrana
int slots; // pocet slotov, ktore zabera predmet v inventari
int range; // utocny dosah/dostrel predmetu
int radius; // sirka zasahu (alebo damage radius)
} ITEM;
// Struktura pre bojovu jednotku
typedef struct unit {
char name[MAX_NAME + 1]; // meno jednotky
const ITEM *item1; // prvy predmet v inventari (ukazuje do pola 'items')
const ITEM *item2; // druhy predmet v inventari (ukazuje do pola 'items')
int hp; // zdravie (z angl. hit points)
} UNIT;
#endif //DATA_H
Zdrojový súbor z5.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
// NEMENIT, inak vas kod neprejde testom !!!
#include "data.h"
int main(const int argc, char *argv[]) {
return 0;
}
Z webstránky zadania si môžete stiahnuť dodané JSON/TXT súbory. Tieto súbory sa používajú na načítanie predmetov a armád.
Štruktúra a obsah archívu json_txt.zip
json
obsahuje JSON súbory potrebné pre načítanie databázy
predmetov.
txt
obsahuje TXT súbory potrebné pre načítanie armád.readme.txt
s popisom.json_txt.zip
├── json/
│ ├── err_bad_value1.json
│ ├── err_bad_value2.json
│ ├── err_bad_value3.json
│ ├── err_missing_attribute1.json
│ ├── err_missing_attribute2.json
│ ├── err_missing_attribute3.json
│ ├── err_missing_value1.json
│ ├── err_missing_value2.json
│ ├── err_missing_value3.json
│ ├── items1.json
│ ├── items1_noformat.json
│ ├── items2.json
│ ├── items2_noformat.json
│ ├── items3.json
│ ├── items3_noformat.json
│ └── readme.txt
└── txt/
├── army_noformat.txt
├── army1.txt
├── army2.txt
├── army3.txt
├── army4.txt
├── army5.txt
├── army6.txt
├── army7.txt
├── army8.txt
├── army9.txt
├── err_item_count.txt
├── err_slots.txt
├── err_unit_count.txt
├── err_wrong_item.txt
└── readme.txt
Dôležitá poznámka:
Program vždy načítava predmety zo súboru, ktorý je daný makrom
ITEMS_FILE
v súbore data.h
.
Toto makro je fixne nastavené cestu items.json
.
Z toho dôvodu je nutné vždy premenovať testovaný JSON súbor z priečinku
json
na názov items.json
.
Taktiež je nutné, aby bol daný JSON súbor v rovnakom adresári
ako spúšťaný program resp. sa nachádzal v pracovnom adresári programu.
Z webstránky zadania si môžete stiahnuť dodané testovacie súbory.
Štruktúra a obsah archívu z5_testing.zip
cmd
obsahuje textové súbory s
návodom ako spustiť program v jednotlivých scenároch. Daný textový súbor obsahuje
príkaz akým je nutné spustiť program v príkazovom riadku a informáciu o tom, ktorý
JSON súbor bol použitý na testovanie.
output
obsahuje textové súbory s výstupom programu v
jednotlivých scenároch. V prípade scenárov, kde sú testované chybové situácie sa jedná o štandardný
chybový výstup (stderr) a v prípade ostatných scenárov sa jedná o štandardný výstup (stdout).
z5_testing.zip
├── cmd/
│ ├── s1/
│ │ ├── example1.txt
│ │ ├── example2.txt
│ │ ├── example3.txt
│ │ ├── example4.txt
│ │ ├── example5.txt
│ │ └── example6.txt
│ ├── s2/
│ │ ├── example1.txt
│ │ ├── example2.txt
│ │ └── example3.txt
│ ├── s3/
│ │ ├── example1.txt
│ │ ├── example2.txt
│ │ └── example3.txt
│ ├── s4/
│ │ ├── example1.txt
│ │ ├── example2.txt
│ │ └── example3.txt
│ ├── s5/
│ │ ├── example1.txt
│ │ ├── example2.txt
│ │ ├── example3.txt
│ │ ├── example4.txt
│ │ ├── example5.txt
│ │ ├── example6.txt
│ │ └── example7.txt
│ ├── s6/
│ │ ├── example1.txt
│ │ ├── example2.txt
│ │ ├── example3.txt
│ │ └── example4.txt
│ ├── s7/
│ │ ├── example1.txt
│ │ └── example2.txt
│ └── s8/
│ ├── example1.txt
│ └── example2.txt
└── output/
├── s1/
│ ├── example1.txt
│ ├── example2.txt
│ ├── example3.txt
│ ├── example4.txt
│ ├── example5.txt
│ └── example6.txt
├── s2/
│ ├── example1.txt
│ ├── example2.txt
│ └── example3.txt
├── s3/
│ ├── example1.txt
│ ├── example2.txt
│ └── example3.txt
├── s4/
│ ├── example1.txt
│ ├── example2.txt
│ └── example3.txt
├── s5/
│ ├── example1.txt
│ ├── example2.txt
│ ├── example3.txt
│ ├── example4.txt
│ ├── example5.txt
│ ├── example6.txt
│ └── example7.txt
├── s6/
│ ├── example1.txt
│ ├── example2.txt
│ ├── example3.txt
│ └── example4.txt
├── s7/
│ ├── example1.txt
│ └── example2.txt
└── s8/
├── example1.txt
└── example2.txt
Vstupný súbor z priečinku cmd
Textový súbor cmd/s5/example3.txt
Spustenie: z5.exe txt/army4.txt txt/army1.txt
Databaza predmetov: items1.json (treba premenovat na items.json)
Vysvetlenie:
Jedná sa o scenár 5 a testovací prípad 3. Skompilovaný program je potrebné spustiť príkazom
z5.exe txt/army4.txt txt/army1.txt
.
Program treba umiestniť do správneho priečinku tak, aby boli uvedené cesty platné.
Na testovanie sa použil JSON súbor s názvom items1.json
.
Tento súbor je potrebné premenovať na items.json
a prekopírovať z
adresára json
do rovnakého priečinku, v ktorom sa nachádza
spúšťaný program z5.exe
.
Výstupný súbor z priečinku output
Textový súbor output/s5/example3.txt
Army 1
Unit: 0
Name: Adam
HP: 100
Item 1: rock,3,0,1,2,1
Item 2: aura,0,8,1,0,0
Unit: 1
Name: Miro
HP: 100
Item 1: crossbow,5,1,2,3,0
Unit: 2
Name: Jano
HP: 100
Item 1: dagger,4,0,1,0,0
Item 2: dagger,4,0,1,0,0
Unit: 3
Name: Jozo
HP: 100
Item 1: wand,12,4,1,4,2
Army 2
Unit: 0
Name: Mike
HP: 100
Item 1: slingshot,2,0,2,2,1
Vysvetlenie:
Tento výstup dostaneme po spustení programu podľa
inštrukcií v súbore cmd/s5/example3.txt
.
Keďže sa nejednalo o chybový výstup, tak text bol vypísaný na stdout.
Odovzdávací systém otestuje a vyhodnotí nasledovné oblasti funkcionality vášho programu. Na získanie bodov za konkrétny testovací scenár je nutné, aby testom prešli všetky testovacie prípady v danom scenári.
Scenár 1
Spustenie programu bez CMD argumentov + výpis predmetov
|
3,5 b |
Scenár 2
Chyba ERR_MISSING_ATTRIBUTE
|
1,0 b |
Scenár 3
Chyba ERR_MISSING_VALUE
|
1,0 b |
Scenár 4
Chyba ERR_BAD_VALUE
|
1,0 b |
Scenár 5
Spustenie programu s 2 CMD argumentmi + výpis armád.
|
2,0 b |
Scenár 6
Chyby zo zadania 4 (ERR_UNIT_COUNT, ERR_ITEM_COUNT, ERR_WRONG_ITEM, ERR_SLOTS)
|
0,5 b |
Scenár 7
Chyba ERR_FILE (JSON súbor s predmetmi alebo TXT súbor s armádou sa nedá otvoriť)
|
0,5 b |
Scenár 8
Chyba ERR_CMD
|
0,5 b |
Súčet | 10,0 b |
Nasledujúce zdroje vám môžu pomôcť pri programovaní zadania. Odporúčame si tieto zdroje preštudovať. Na prístup k niektorým zdrojom potrebujete byť prihlásení vo vašom univerzitnom Google STU konte.