Search
Napište program, který spočítá statistiky jednoho dne provozu zjednodušeného systému hromadné dopravy. V závislosti na argumentech zadaných při spuštění programu vypište do std::cout následující:
std::cout
Detailně jsou jednotlivé výpisy a statistiky popsány v následujících sekcích. K dispozici máte soubory které obsahují hotové části kódu:
main.cpp
doprava.hpp
doprava.cpp
Soubory jsou uložené v balíčku HW02.zip. Všechny tři soubory můžete upravit, všechny tři se odevzdávají do BRUTE.
Seznam všech řidičů imaginárního dopravního podniku je uložena v instanci DriverList dl. S DriverList lze pracovat stejně jako s std::list<Driver>, navíc je pouze funkce na načítání ze souboru.
DriverList dl
DriverList
std::list<Driver>
Všechny linky jsou uoženy v instanci Network net. K přístupu k dané lince vhodné využít zavolání funkce Line linka = net.getLine(cislo_linky); nebo jejího ekvivalentu Line linka = net(cislo_linky);. Počet linek zjistíte funkcí Network::nlines();. Linky jsou indexovány od 0.
Network net
Line linka = net.getLine(cislo_linky);
Line linka = net(cislo_linky);
Network::nlines();
0
Každá linka v Network net je typu Line. Třída Line obsahuje 3 vektory s viditelností public:
Line
public
vector<string> stops
vector<PlanConn> conns_fwd
vector<PlanConn> conns_bwd
Každý spoj je vektorem odjezdů (instancí třídy Departure). Délka i indexování stops, conns_fwd, conns_bwd jsou stejné.
Departure
stops
conns_fwd
conns_bwd
const
Pro přístup do standardních šabon zkuste využít konstantní iterátory. Například místo x.begin() můžete použít x.cbegin()
x.begin()
x.cbegin()
Popis není úplný, další informace můžou poskytnout komentáře v doprava.hpp nebo implementace v doprava.cpp.
Lndir
enum class
Lndir::fwd
Lndir::bwd
Time
int gets()
void gett(hh,mm,ss)
int
Depart
Time ti
Lndir dir
Driver
string name
PlanConn
vector<Depart>
Driver drv
./main --schedule [Nazev_zastavky1] [Nazev_zastavky2] [Nazev_zastavky3] ...
./main --schedule "Petrackovo_namesti" "Vitkov" "U_Bufetu"
Implementujte výpis zastávkových jízdních řádů ve formátu:
+------------------------------------------------------------------------------+ | [Jmeno zastavky pro kterou je jizdni rad] Line: L | +--------------------------------------++--------------------------------------+ | To: [Posledni zastavka linky] || To: [Prvni zastavka linky] | +----+---------------------------------++----+---------------------------------+ | 00 | << minuty odjezdu >> || 00 | | | 01 | 20 40 || 01 | 00 30 | <<< Zde jsou radky pro vsechny hodiny >>> | 23 | || 23 | | +----+---------------------------------++----+---------------------------------+
Time::gett(hh, mm, ss)
Ukázka výstupu pro výše zmíněný příklad volání je v poskytnutém souboru output1.txt nebo zde:
output1.txt
Loaded 45 names from driver_list.txt. Loaded network from network.txt. +------------------------------------------------------------------------------+ | Petrackovo namesti Line: 1 | +--------------------------------------++--------------------------------------+ | To: Spanelska || To: Italska | +----+---------------------------------++----+---------------------------------+ | 00 | || 00 | | | 01 | || 01 | | | 02 | || 02 | | | 03 | || 03 | | | 04 | 13 38 || 04 | 22 47 | | 05 | 03 28 53 || 05 | 12 37 | | 06 | 18 38 58 || 06 | 02 27 47 | | 07 | 18 38 58 || 07 | 07 27 47 | | 08 | 18 38 58 || 08 | 07 27 47 | | 09 | 18 38 58 || 09 | 07 27 47 | | 10 | 18 38 58 || 10 | 07 27 47 | | 11 | 23 48 || 11 | 07 32 57 | | 12 | 13 38 || 12 | 22 47 | | 13 | 03 28 53 || 13 | 12 37 | | 14 | 18 43 || 14 | 02 27 52 | | 15 | 08 28 48 || 15 | 17 37 57 | | 16 | 08 28 48 || 16 | 17 37 57 | | 17 | 08 28 48 || 17 | 17 37 57 | | 18 | 08 28 48 || 18 | 17 37 57 | | 19 | 08 28 48 || 19 | 17 37 57 | | 20 | 28 || 20 | 37 | | 21 | 08 48 || 21 | 17 57 | | 22 | 28 || 22 | 37 | | 23 | || 23 | | +----+---------------------------------++----+---------------------------------+ +------------------------------------------------------------------------------+ | Petrackovo namesti Line: 2 | +--------------------------------------++--------------------------------------+ | To: Maternovy sady || To: Vitkov | +----+---------------------------------++----+---------------------------------+ | 00 | || 00 | | | 01 | || 01 | | | 02 | || 02 | | | 03 | || 03 | | | 04 | 58 || 04 | | | 05 | 38 || 05 | 04 44 | | 06 | 18 38 58 || 06 | 24 44 | | 07 | 18 38 58 || 07 | 04 24 44 | | 08 | 18 38 58 || 08 | 04 24 44 | | 09 | 18 38 58 || 09 | 04 24 44 | | 10 | 38 || 10 | 04 44 | | 11 | 18 58 || 11 | 24 | | 12 | 38 || 12 | 04 44 | | 13 | 18 58 || 13 | 24 | | 14 | 38 || 14 | 04 44 | | 15 | 18 58 || 15 | 24 | | 16 | 18 38 58 || 16 | 04 24 44 | | 17 | 18 38 58 || 17 | 04 24 44 | | 18 | 18 38 58 || 18 | 04 24 44 | | 19 | 18 38 58 || 19 | 04 24 44 | | 20 | 18 38 58 || 20 | 04 24 44 | | 21 | 38 || 21 | 04 44 | | 22 | 18 58 || 22 | 24 | | 23 | || 23 | 04 | +----+---------------------------------++----+---------------------------------+ +------------------------------------------------------------------------------+ | Vitkov Line: 2 | +--------------------------------------++--------------------------------------+ | To: Maternovy sady || To: Vitkov | +----+---------------------------------++----+---------------------------------+ | 00 | || 00 | | | 01 | || 01 | | | 02 | || 02 | | | 03 | || 03 | | | 04 | 45 || 04 | | | 05 | 25 || 05 | 18 58 | | 06 | 05 25 45 || 06 | 38 58 | | 07 | 05 25 45 || 07 | 18 38 58 | | 08 | 05 25 45 || 08 | 18 38 58 | | 09 | 05 25 45 || 09 | 18 38 58 | | 10 | 25 || 10 | 18 58 | | 11 | 05 45 || 11 | 38 | | 12 | 25 || 12 | 18 58 | | 13 | 05 45 || 13 | 38 | | 14 | 25 || 14 | 18 58 | | 15 | 05 45 || 15 | 38 | | 16 | 05 25 45 || 16 | 18 38 58 | | 17 | 05 25 45 || 17 | 18 38 58 | | 18 | 05 25 45 || 18 | 18 38 58 | | 19 | 05 25 45 || 19 | 18 38 58 | | 20 | 05 25 45 || 20 | 18 38 58 | | 21 | 25 || 21 | 18 58 | | 22 | 05 45 || 22 | 38 | | 23 | || 23 | 18 | +----+---------------------------------++----+---------------------------------+ +------------------------------------------------------------------------------+ | U Bufetu Line: 0 | +--------------------------------------++--------------------------------------+ | To: Studijni odd. || To: U Petnika | +----+---------------------------------++----+---------------------------------+ | 00 | || 00 | | | 01 | || 01 | | | 02 | || 02 | | | 03 | || 03 | | | 04 | 20 50 || 04 | 13 43 | | 05 | 20 50 || 05 | 13 43 | | 06 | 20 35 50 || 06 | 13 28 43 58 | | 07 | 05 20 35 50 || 07 | 13 28 43 58 | | 08 | 05 20 35 50 || 08 | 13 28 43 58 | | 09 | 05 20 35 50 || 09 | 13 28 43 58 | | 10 | 05 20 50 || 10 | 13 43 | | 11 | 20 50 || 11 | 13 43 | | 12 | 20 50 || 12 | 13 43 | | 13 | 20 50 || 13 | 13 43 | | 14 | 20 50 || 14 | 13 43 | | 15 | 20 35 50 || 15 | 13 28 43 58 | | 16 | 05 20 35 50 || 16 | 13 28 43 58 | | 17 | 05 20 35 50 || 17 | 13 28 43 58 | | 18 | 05 20 35 50 || 18 | 13 28 43 58 | | 19 | 05 20 50 || 19 | 13 43 | | 20 | 20 50 || 20 | 13 43 | | 21 | 20 50 || 21 | 13 43 | | 22 | 20 50 || 22 | 13 43 | | 23 | 20 || 23 | 13 | +----+---------------------------------++----+---------------------------------+
./main --line-routing
Implementujte výpis vedení (seznamu zastávek) pro všechny linky ve formátu:
+------------------------------------------------------------------------------+ | Line: L | +---+----+-----------------------------++---+----+-----------------------------+ | d | rT | ==> || d | rT | <== | +---+----+-----------------------------++---+----+-----------------------------+ | 0 | 00 | Zastavka(0) || 0 | 00 | Zastavka(N-1) | | # | ## | Zastavka(1) || # | ## | Zastavka(N) | <<< Zde jsou radky pro vsechny zastavky>>> | # | ## | Zastavka(N-1) || # | ## | Zastavka(1) | | # | ## | Zastavka(N) || # | ## | Zastavka(0) | +---+----+-----------------------------++---+----+-----------------------------+
Ukázka výstupu pro výše zmíněný příklad volání je v poskytnutém souboru output2.txt nebo zde:
output2.txt
Loaded 45 names from driver_list.txt. Loaded network from network.txt. +------------------------------------------------------------------------------+ | Line: 0 | +---+----+-----------------------------++---+----+-----------------------------+ | d | rT | ==> || d | rT | <== | +---+----+-----------------------------++---+----+-----------------------------+ | 0 | 00 | U Petnika || 0 | 00 | Studijni odd. | | 3 | 03 | Pred Menzou || 2 | 02 | Rektorat | | 2 | 05 | Matematiku || 1 | 03 | Dekanat | | 2 | 07 | Fyziku || 2 | 06 | Knihovnicka | | 2 | 09 | Radioelektronicka || 2 | 08 | U Bufetu | | 1 | 10 | Elektromagnetickeho pole || 2 | 10 | U Zavrene skoly | | 2 | 12 | Mikroelektronicka || 1 | 11 | Nosterova | | 1 | 14 | Studentska || 1 | 13 | Paterova | | 1 | 15 | Paterova || 1 | 14 | Studentska | | 1 | 16 | Nosterova || 1 | 16 | Mikroelektronicka | | 1 | 18 | U Zavrene skoly || 2 | 18 | Elektromagnetickeho pole | | 2 | 20 | U Bufetu || 1 | 19 | Radioelektronicka | | 2 | 22 | Knihovnicka || 2 | 21 | Fyziku | | 2 | 24 | Dekanat || 2 | 23 | Matematiku | | 1 | 26 | Rektorat || 2 | 25 | Pred Menzou | | 2 | 28 | Studijni odd. || 3 | 28 | U Petnika | +---+----+-----------------------------++---+----+-----------------------------+ +------------------------------------------------------------------------------+ | Line: 1 | +---+----+-----------------------------++---+----+-----------------------------+ | d | rT | ==> || d | rT | <== | +---+----+-----------------------------++---+----+-----------------------------+ | 0 | 00 | Italska || 0 | 00 | Spanelska | | 3 | 03 | Desinfekcni || 2 | 02 | V Karantene | | 3 | 06 | Lihovar || 2 | 04 | Na Ventilaci | | 3 | 09 | Za Filtrem || 2 | 06 | Infekcni | | 3 | 12 | Testovaci || 2 | 08 | Svepomoci | | 2 | 14 | Respiratoru || 2 | 10 | Remdesivirova | | 2 | 16 | Petrackovo namesti || 2 | 12 | Prymulova | | 2 | 18 | Ochrannych stitu || 2 | 14 | U Zavrene skoly | | 2 | 20 | U Zavrene skoly || 2 | 16 | Ochrannych stitu | | 2 | 22 | Prymulova || 2 | 18 | Petrackovo namesti | | 2 | 24 | Remdesivirova || 2 | 20 | Respiratoru | | 2 | 26 | Svepomoci || 2 | 22 | Testovaci | | 2 | 28 | Infekcni || 3 | 25 | Za Filtrem | | 2 | 30 | Na Ventilaci || 3 | 28 | Lihovar | | 2 | 32 | V Karantene || 3 | 31 | Desinfekcni | | 2 | 34 | Spanelska || 3 | 34 | Italska | +---+----+-----------------------------++---+----+-----------------------------+ +------------------------------------------------------------------------------+ | Line: 2 | +---+----+-----------------------------++---+----+-----------------------------+ | d | rT | ==> || d | rT | <== | +---+----+-----------------------------++---+----+-----------------------------+ | 0 | 00 | Vitkov || 0 | 00 | Maternovy sady | | 2 | 02 | Dobesova alej || 2 | 02 | Pani Vyborne | | 2 | 04 | Navratilova || 2 | 04 | Petrackovo namesti | | 2 | 06 | Nentvichova || 2 | 06 | Patova trida | | 2 | 09 | Studentska || 2 | 09 | Studentska | | 2 | 11 | Patova trida || 2 | 11 | Nentvichova | | 2 | 13 | Petrackovo namesti || 2 | 13 | Navratilova | | 2 | 15 | Pani Vyborne || 2 | 15 | Dobesova alej | | 2 | 18 | Maternovy sady || 2 | 18 | Vitkov | +---+----+-----------------------------++---+----+-----------------------------+ +------------------------------------------------------------------------------+ | Line: 3 | +---+----+-----------------------------++---+----+-----------------------------+ | d | rT | ==> || d | rT | <== | +---+----+-----------------------------++---+----+-----------------------------+ | 0 | 00 | Svepomoci || 0 | 00 | Posledni role | | 2 | 02 | Dobrovolniku || 2 | 02 | Papirenske zavody | | 2 | 04 | Lekaru || 2 | 04 | Bezrouskova | | 2 | 06 | Svadlen || 2 | 06 | Cesko-cinskeho pratelstvi | | 2 | 09 | Cesko-cinskeho pratelstvi || 2 | 09 | Svadlen | | 2 | 11 | Bezrouskova || 2 | 11 | Lekaru | | 2 | 13 | Papirenske zavody || 2 | 13 | Dobrovolniku | | 2 | 15 | Posledni role || 2 | 15 | Svepomoci | +---+----+-----------------------------++---+----+-----------------------------+
./main --driver-stops
Implementujte výpis seznamu řidičů se statistikami zpoždění ve formátu:
+----------------------+---+----+-----+ | Driver Name | L | nC | nSt | +----------------------+---+----+-----+ | Nejvytizenejsi Ridic | # | ## | ### | <<< Zde jsou radky pro vsechny ridice>>> | Nevyuzity Ridic | X | XX | XXX | +----------------------+---+----+-----+
X
Obsah sloupců je:
Driver Name
L
nC
nSt
Seznam seřaďte podle následujících kritérií:
tj. pokud se shoduje kritérium 1, řadíte podle kritéria 2 atd.
Ukázka výstupu pro výše zmíněné volání je v poskytnutém souboru output3.txt nebo zde:
output3.txt
Loaded 45 names from driver_list.txt. Loaded network from network.txt. +----------------------+---+----+-----+ | Driver Name | L | nC | nSt | +----------------------+---+----+-----+ | Nelson Piquet | 0 | 11 | 176 | | Ayrton Senna | 0 | 10 | 160 | | Graham Hill | 0 | 10 | 160 | | Jackie Stewart | 0 | 10 | 160 | | Niki Lauda | 0 | 10 | 160 | | Emerson Fittipaldi | 0 | 9 | 144 | | Fernando Alonso | 1 | 9 | 144 | | Jacques Villeneuve | 1 | 9 | 144 | | Jim Clark | 0 | 9 | 144 | | Keke Rosberg | 0 | 9 | 144 | | Sebastian Vettel | 1 | 9 | 144 | | Alain Prost | 1 | 8 | 128 | | Jack Brabham | 0 | 8 | 128 | | James Hunt | 0 | 8 | 128 | | Jochen Rindt | 0 | 8 | 128 | | John Surtees | 0 | 8 | 128 | | Kimi Raikkonen | 1 | 8 | 128 | | Lewis Hamilton | 1 | 8 | 128 | | Michael Schumacher | 1 | 8 | 128 | | Nico Rosberg | 1 | 8 | 128 | | Nigel Mansell | 1 | 8 | 128 | | Damon Hill | 1 | 7 | 112 | | Jenson Button | 1 | 7 | 112 | | Mika Hakkinen | 1 | 7 | 112 | | Alberto Ascari | 2 | 12 | 108 | | Phil Hill | 2 | 10 | 90 | | Alan Jones | 2 | 9 | 81 | | Denny Hulme | 2 | 9 | 81 | | Giuseppe Farina | 2 | 9 | 81 | | Mike Hawthorn | 2 | 9 | 81 | | Henri Toivonen | 3 | 10 | 80 | | Timo Salonen | 3 | 10 | 80 | | Carlos Sainz | 3 | 9 | 72 | | Jody Scheckter | 2 | 8 | 72 | | Juan M. Fangio | 2 | 8 | 72 | | Mario Andretti | 2 | 8 | 72 | | Miki Biasion | 3 | 9 | 72 | | Stig Blomqvist | 3 | 9 | 72 | | Ari Vatanen | 3 | 8 | 64 | | Michele Mouton | 3 | 8 | 64 | | Richard Burns | 3 | 8 | 64 | | Petter Solberg | 3 | 7 | 56 | | Bruce McLaren | X | XX | XXX | | Eddie Irvine | X | XX | XXX | | Jean Alesi | X | XX | XXX | +----------------------+---+----+-----+
Váš kód se bude porovnávat s referenčním řešením podle následujících kritérií:
.cpp
.hpp
::
using namespace std;
+
-
*
/
«
»
&
%
=
;
(
)
[
]
{
}
main.cpp, doprava.hpp, doprava.cpp, datové soubory, výstupy: HW02.zip.
Odevzdávaný zip soubor pojmenujte main.zip.
main.zip
--schedule [seznam zastavek]
--line-routing
--driver-stops