======== HW 02 - Std. šablony a algoritmy - MHD ======== ^ Termín odevzdání | 4.4.2021 23:59 CEST | ^ Možný bodový zisk | až 8b (2+2+3+1) | ^ Počet uploadů | 10 | ====== Zadání ====== 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í: - Zastávkový jízní řád pro zadané zastávky //(2 body)// - Seznamy zastávek pro každou linku s jízdními dobami //(2 body)// - Seznam řidičů s počtem provedených jízd a projetých zastávek.//(3 body)// * //Bonus:// Pokud bude váš kód kratší než 1,5 násobek referenčního řešení, dostanete //1 bod// navíc. 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'' - Jsou zavolány funkce načítání dat ze souborů do připravených struktur, je implementováno dekódování argumentů programu. Komentáři je naznačeno, kde by se měla volat různá zpracování dat. * ''doprava.hpp'' - deklarace tříd/struktur uchovávajících načtená data a jejich funkcí * ''doprava.cpp'' - definice funkcí tříd/struktur deklarovaných v ''doprava.hpp'' Soubory jsou uložené v balíčku {{ :courses:b2b99ppc:hw:hw02.zip | HW02.zip}}. Všechny tři soubory můžete upravit, všechny tři se odevzdávají do BRUTE. Při úpravách dejte pozor, abyste zbytečně nepoškodili funkce načítání nebo nezměnili chování dalších tříd, které jsou již implementovány. Jsou možné dva přístupy: * Již definované třídy a funkce vůbec neměňte, pro vytvoření třídy z rošířenou funkcionalitou použijte //dědičnost//. * Již definované třídy a funkce pouze rozšiřujte, neumazávejte funkce ani členské proměnné, neměňte implementaci. ==== Struktura načtených dat ==== **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'', navíc je pouze funkce na načítání ze souboru. **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''. **Každá linka** v ''Network net'' je typu ''Line''. Třída ''Line'' obsahuje 3 vektory s viditelností ''public'': | ''vector stops'' | Seznam zastávek ve směru od začátku do konce linky. | | ''vector conns_fwd'' | Seznam spojů ve směru od začátku do konce linky. Spoje jsou seřazeny podle času odjezdu na začátku jízdy. | | ''vector conns_bwd'' | Seznam spojů ve směru od konce do začátku linky Spoje jsou seřazeny podle času odjezdu na začátku jízdy. | Každý spoj je vektorem odjezdů (instancí třídy ''Departure''). Délka i indexování ''stops'', ''conns_fwd'', ''conns_bwd'' jsou stejné. Dejte velký pozor, abyste při zpracování dat samotná data omylem neupravili. Používejte klíčové slovo ''const'' - označujte funkce, které nemají měnit obsah struktury, popřípadě argumenty funkcí, které se nemají měnit. Pokud byste se pokusili přepsat konstantní hodnotu, kompilátor vás upozorní. 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()'' ==== Pomocné třídy ==== Popis není úplný, další informace můžou poskytnout komentáře v ''doprava.hpp'' nebo implementace v ''doprava.cpp''. ^ Třída: ^ Popis + čleské proměnné a funkce || |''Lndir''| ''enum class'' Označení směru spoje/odjezdu, možné jen hodnoty ''Lndir::fwd'' a ''Lndir::bwd''. || |''Time'' | Struktura uchovávající čas s přesností na 1 sekundu. Konstruktory umožňují inicializaci pomocí počtu sekund, nebo pomocí formátu hh,mm,ss. Lze kopírovat, přiřazovat, plně porovnávat, přičítat a odečítat || | ::: | ''int gets()'' | Vrátí čas jako počet sekund.| | ::: | ''void gett(hh,mm,ss)'' | Zapíše čas ve formátu hh:mm:ss do proměnných typu ''int'' | |''Depart''| Popis odjezdu. Strukturu lze kopírovat, přiřazovat.|| | ::: | ''Time ti'' | čas odjezdu | | ::: | ''Lndir dir'' | směr odjezdu | | ''Driver'' | Označení řidiče. Obsahuje jeho jméno ve ''string name''. Lze kopírovat, přiřazovat, kontrolovat rovnost a nerovnost || | ''PlanConn'' | Dědí z ''vector'', obsahuje navíc proměnnou ''Driver drv'', která obsahuje instanci řidiče, který obsluhuje dané plánované spojení. Lze kopírovat a přiřazovat || ==== Úloha 1: Zastávkové jízdní řády (2 body) ==== Při zadání názvu zastávky, která má v sobě mezeru, jako argument programu, nahradte mezeru za podtržítko. Viz. příklad dole ^Volání programu: | ''%%./main --schedule [Nazev_zastavky1] [Nazev_zastavky2] [Nazev_zastavky3] ...%%'' | ^Příklad volání: | ''%%./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 | | +----+---------------------------------++----+---------------------------------+ * Minuty odjezdů jsou zaokrouhlené dolů (v 'Depart.ti' je přesnost na celé sekundy ). Můžete využít poskytnutou funkci ''Time::gett(hh, mm, ss)''. Jsou oddělené mezerou a doplněné nulami na šířku 2 znaků. * Za 'L' dosaďte číslo linky o šířce 1 znaku. * Levý sloupec obsahuje odjezdy ve směru ''Lndir::fwd'', pravý sloupec ve směru ''Lndir::bwd''. * V případě přestupní zastávky vypište jízdní řád pro všechny relevantní linky (seřazené podle čísla linky vzestupně). Plánované odjezdy ze zastávek zjistíte vždy ve struktuře ''Line'' ve vektorech ''conns_fwd'' a ''conns_bwd''. Pro tuto úlohu nemusíte použít strukturu ''DepartDB'', ta obsahuje skutečné (tedy zpožděné) časy odjezdů ze zastávek. Při implementaci je dobré vědět že: * Lze používat více iterátorů současně pro přístup do jednoho objektu. * Existují i zpětné iterátory. Vektory jednotlivých spojů ''conns_fwd'' a ''conns_bwd'' jsou už seřazené. Ukázka výstupu pro výše zmíněný příklad volání je v poskytnutém souboru ''output1.txt'' nebo zde: 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 | +----+---------------------------------++----+---------------------------------+ ==== Úloha 2: Linky - plánované (2 body) ==== ^Volání programu: | ''%%./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) | +---+----+-----------------------------++---+----+-----------------------------+ * Za 'L' vzdy dosaďte správné číslo linky * Ve sloupci 'd' je plánovaná jízdní doba od //předchozí// zastávky, zaokrouhlená na minuty dolů. Šířka je 1 znak. * Ve sloupci 'rT' je plánovaná jízdní doba od //první// zastávky, zaokrouhlená na minuty dolů. Šířka je 2 znaky, doplněné nulami. * Místo 'Zastavka( i )' dosaďte jména zastávek dané linky. * Výsledné tabulky vypište pod sebe. Linky jsou seřazeny vzestupně. Přesnost plánovaných odjezdů je na vteřiny. Nejdříve jízdní dobu vypočtěte, až poté zaokrouhlujte. Můžete opět využít poskytnutou funkci ''Time::gett(hh, mm, ss)''. Ukázka výstupu pro výše zmíněný příklad volání je v poskytnutém souboru ''output2.txt'' nebo zde: 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 | +---+----+-----------------------------++---+----+-----------------------------+ ==== Úloha 3: Řidiči - zpoždění (3 body)==== ^Volání programu: | ''%%./main --driver-stops%%'' | Implementujte výpis seznamu řidičů se statistikam zpoždění ve formátu: +----------------------+---+----+-----+ | Driver Name | L | nC | nSt | +----------------------+---+----+-----+ | Nejvytizenejsi Ridic | # | ## | ### | <<< Zde jsou radky pro vsechny ridice>>> | Nevyuzity Ridic | X | XX | XXX | +----------------------+---+----+-----+ Pro řidiče, kteří nevyjeli jsou hodnoty nahrazeny sekvencí znaků ''X''. Obsah sloupců je: * ''Driver Name'': Jméno řidiče * ''L'': Číslo linky, na které řidič jezdil (vždy jezdí jen na jedné lince). * ''nC'': Počet jízd (projetí linky v jednom směru) řidiče. Šířka 2 znaky, doplněno mezerami * ''nSt'': Počet stanic, kterými řidič projel (počet odjezdů včetně konečných). Šířka 3 znaky, doplněno mezerami. Seznam seřaďte podle následujících kritérií: - Řidiči, kteří vůbec nevyjeli jsou zařazeni na konci seznamu. - Podle počtu projetých stanic sestupně (první je ten, který projel nejvíce stanic) - Abecedně podle jména řidiče 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: 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 | +----------------------+---+----+-----+ ==== Bonus - Úsporná implementace (1 bod) ==== Váš kód se bude porovnávat s referenčním řešením podle následujících kritérií: * Porovnávat se budou všechny odevzdané soubory s příponami ''.cpp'' a ''.hpp''. Součet délek souborů musí být kratší než 1,5 násobek celkové délky referenčního řešení (150% délky v BRUTE). * Komentáře se do délky kódu nezapočítávají. * Počítají se celá slova, nikoliv znaky. Takže není třeba zkracovat názvy proměnných nebo funkcí. * Operátor ''::'' nerozděluje slova, tzn. ''std::cout'' je považováno za jedno slovo (není třeba na začátku deklarovat ''using namespace std;'' pro zkrácení kódu) * Operátory ''+'', ''-'', ''*'', ''/'', ''<<'', ''>>'', ''&'', ''%'', ''='', '';'' nespojují slova a ani se jako slova nepočítají. * Závorky ''('', '')'', ''['', '']'', ''{'', ''}'' a čárky se rovněž nepočítají. Jak zkracovat kód: * pro rutinní činnosti vytvořte funkci * Vhodně používejte dědičnost - není třeba vždy definovat celou třídu a její funkce znovu * **Využívejte standardní šablony a standardní algoritmy** * Kde je to vhodné, použijte lambda-funkce **Nezkracujte kód na úkor přehlednosti!** * Odsazení a mezery a prázdné řádky vám kód "neporodlouží" * Komentáře se nepočítají do délky ====== Odevzdání ====== main.cpp, doprava.hpp, doprava.cpp, datové soubory, výstupy: {{ :courses:b2b99ppc:hw:hw02.zip | HW02.zip}}. Odevzdávaný zip soubor pojmenujte ''main.zip''. ^ ^ Povinné i bonusové zadání ^ ^ Název v BRUTE | HW02 | ^ Povinný soubor | main.cpp, doprava.cpp, doprava.hpp | ^ Volitelný soubor | žádný | ^ Argumenty při spuštění | ''%%--schedule [seznam zastavek]%%'' ''%%--line-routing%%'' ''%%--driver-stops%%'' | ^ Kompilace pomocí | g++ -pedantic -Wall -Werror -std=c++17 | ^ Procvičované oblasti | polymorfismus v C++, přetěžování operátorů, STL, hlavičkový soubor, algoritmizace |