Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
public:pb161_fall14_cviko01_510401 [2014/07/31 10:30]
xklucar [Vzorové řešení]
public:pb161_fall14_cviko01_510401 [2018/02/24 19:10] (aktuální)
Řádek 5: Řádek 5:
 Stiahnite si [[https://​www.fi.muni.cz/​~xklucar/​_tmp/​pb161/​pb161-cv01.zip|archív]] s predpripraveným CMake projektom. Archív okrem súborov pre implementáciu požadovaných tried obsahuje aj súbory s ukážkou funkčnosti jednotlivých tried a súbory na automatické otestovanie funkčnosti vašej implementácie. Stiahnite si [[https://​www.fi.muni.cz/​~xklucar/​_tmp/​pb161/​pb161-cv01.zip|archív]] s predpripraveným CMake projektom. Archív okrem súborov pre implementáciu požadovaných tried obsahuje aj súbory s ukážkou funkčnosti jednotlivých tried a súbory na automatické otestovanie funkčnosti vašej implementácie.
 ===== První úkol - semafor ===== ===== První úkol - semafor =====
-V úlohe budeme uvažovať jednoduchý cestný semafor ​(bez signalizácie smeru a ďalších "​vychytávok"​). Semafor môže byť vypnutý (bliká ​oranžová) alebo zapnutý (opakuje sa sekvencia červená -> červená+oranžová -> zelená -> oranžová) -- viď obrázok. Implementácia ​teda bude obsahovať metódy pre zapnutie a vypnutie semafora, zistenie jeho stavu a prepnutie do ďalšieho stavu.+V úlohe budeme uvažovať jednoduchý cestný semafor. Ide o bežný semafor ​bez signalizácie smeru a ďalších "​vychytávok"​, tzn. tri farebné svetlá -- červené, oranžové/​žlté a zelené, každé z nich môže byť zapnuté alebo vypnuté (či je prostredné svetlo žlté alebo oranžové sa líši v závislosti od krajiny, v zadaní pre jednoduchosť bude použitá žltá). Semafor môže byť vypnutý (bliká žltá) alebo zapnutý (opakuje sa sekvencia červená -> červená+žltá -> zelená -> žltá) -- viď obrázok. Implementácia bude obsahovať metódy pre zapnutie a vypnutie semafora, zistenie jeho stavu a prepnutie do ďalšieho stavu.
  
 == Stavy semafora == == Stavy semafora ==
Řádek 12: Řádek 12:
 ==== Zadání úkolu ==== ==== Zadání úkolu ====
 Implementujte triedu ''​TrafficLight''​ reprezentujúcu semafor (súbor ''​trafficlight.h''​ obsahuje hlavičky metód, vašu implementáciu umiestnite do ''​trafficlight.cpp''​). Vnútorná implementácia triedy (atribúty, pomocné privátne metódy) je na vás, dôležité je len, aby trieda obsahovala nasledujúce verejné metódy: Implementujte triedu ''​TrafficLight''​ reprezentujúcu semafor (súbor ''​trafficlight.h''​ obsahuje hlavičky metód, vašu implementáciu umiestnite do ''​trafficlight.cpp''​). Vnútorná implementácia triedy (atribúty, pomocné privátne metódy) je na vás, dôležité je len, aby trieda obsahovala nasledujúce verejné metódy:
-  * Bezparametrický konštruktor -- po vytvorení je semafor vypnutý, svieti ​oranžová.+  * Bezparametrický konštruktor -- po vytvorení je semafor vypnutý, svieti žltá.
   * ''​bool isTurnedOn() const''​ -- vráti ''​true/​false''​ podľa toho, či je semafor zapnutý alebo vypnutý.   * ''​bool isTurnedOn() const''​ -- vráti ''​true/​false''​ podľa toho, či je semafor zapnutý alebo vypnutý.
   * ''​void turnOn()''​ -- Ak už semafor bol zapnutý, neurobí nič. V opačnom prípade zapne semafor (začína sa v stave, keď svieti červená).   * ''​void turnOn()''​ -- Ak už semafor bol zapnutý, neurobí nič. V opačnom prípade zapne semafor (začína sa v stave, keď svieti červená).
-  * ''​void turnOff()''​ -- Ak bol semafor vypnutý, neurobí nič. V opačnom prípade vypne semafor (začína sa v stave, keď svieti ​oranžová).+  * ''​void turnOff()''​ -- Ak bol semafor vypnutý, neurobí nič. V opačnom prípade vypne semafor (začína sa v stave, keď svieti žltá).
   * ''​bool isColorOn(Color color) const''​ -- Vráti ''​true''​ ak daná farba na semafore svieti, ináč (aj v prípade, že parameter nepredstavuje korektnú farbu) vráti ''​false''​. (''​Color''​ je enum, ktorý je definovaný v priloženom súbore).   * ''​bool isColorOn(Color color) const''​ -- Vráti ''​true''​ ak daná farba na semafore svieti, ináč (aj v prípade, že parameter nepredstavuje korektnú farbu) vráti ''​false''​. (''​Color''​ je enum, ktorý je definovaný v priloženom súbore).
-  * ''​void nextState()''​ -- Prepne semafor do ďalšieho stavu (zmení rozsvietené farby) podľa toho, či je semafor vypnutý (oranžová -> nič -> ...) alebo zapnutý (červená -> červená+oranžová -> zelená -> oranžová -> ...). +  * ''​void nextState()''​ -- Prepne semafor do ďalšieho stavu (zmení rozsvietené farby) podľa toho, či je semafor vypnutý (žltá -> nič -> ...) alebo zapnutý (červená -> červená+žltá -> zelená -> žltá -> ...). 
-  * ''​string stateToString() const''​ -- Vráti reťazec popisujúci stav semafora v tvare ''​RED:​ <​stav_červenej>,​ YELLOW: <stav_oranžovej>, GREEN: <​stav_zelenej>''​ kde ''<​stav_farby>''​ je ''​ON''​ alebo ''​OFF'',​ podľa toho, či daná farba svieti alebo nie.+  * ''​string stateToString() const''​ -- Vráti reťazec popisujúci stav semafora v tvare ''​RED:​ <​stav_červenej>,​ YELLOW: <stav_žltej>, GREEN: <​stav_zelenej>''​ kde ''<​stav_farby>''​ je ''​ON''​ alebo ''​OFF'',​ podľa toho, či daná farba svieti alebo nie.
   * ''​void printState() const''​ -- Vypíše stav semafora na štandardný výstup v rovnakom formáte, ako vráti ''​stateToString''​ a odriadkuje.   * ''​void printState() const''​ -- Vypíše stav semafora na štandardný výstup v rovnakom formáte, ako vráti ''​stateToString''​ a odriadkuje.
  
Řádek 24: Řádek 24:
  
 ===== Druhý úkol - križovatka ===== ===== Druhý úkol - križovatka =====
-Budeme pracovať s križovatkou,​ kde sa pretínajú na seba kolmé cesty (orientované podľa ​jednotlivých svetových strán, svetové strany budeme používať aj pre označenie jednotlivých ciest). Pre začiatok nás u križovatky bude zaujímať len to, či je cesta hlavná alebo vedľajšia. ​+Budeme pracovať s križovatkou,​ kde sa pretínajú na seba kolmé cesty vedúce z jednotlivých svetových strán, svetové strany budeme používať aj pre označenie jednotlivých ciest (viď obrázok). Pre začiatok nás u križovatky bude zaujímať len to, či je cesta hlavná alebo vedľajšia, pričom v našej implementácii budú vždy dve cesty hlavné a dve vedľajšie. 
 + 
 +{{https://​www.fi.muni.cz/​~xklucar/​_tmp/​pb161/​pictures/​crossroad.png?​150x150|Križovatka}}
  
 ==== Zadání úkolu ==== ==== Zadání úkolu ====
 Napíšte triedu ''​Crossroad''​ pre reprezentáciu križovatky (rozdelenie do ''​.h''​ a ''​.cpp''​ je podobné ako u ''​TrafficLight''​). Pre reprezentáciu smerov použite ''​enum Direction''​ definovaný v priloženom súbore. Trieda bude obsahovať nasledujúce verejné metódy: Napíšte triedu ''​Crossroad''​ pre reprezentáciu križovatky (rozdelenie do ''​.h''​ a ''​.cpp''​ je podobné ako u ''​TrafficLight''​). Pre reprezentáciu smerov použite ''​enum Direction''​ definovaný v priloženom súbore. Trieda bude obsahovať nasledujúce verejné metódy:
-  * Bezparametrický konšruktor -- nastaví atribúty triedy tak, že na hlavnej ceste sme vtedy, ak na križovatku ​prichádzame z východu alebo zo západu+  * Bezparametrický konšruktor -- vytvorí ​križovatku, kde hlavná bude východná a západná cesta
-  * ''​void setMainroad''​ s dvoma parametrami typu ''​Direction''​ -- nastaví atribúty triedy tak, že na hlavnej ceste sme vtedyak na križovatku prichádzame z jedného zo smerov určeného parametrami ​metódy. **V prípade že parametre nepredstavujú dve rôzne svetové strany, ​hlavná cesta sa nezmení**. +  * ''​void setMainroad''​ s dvoma parametrami typu ''​Direction''​ -- nastaví atribúty triedy tak, že hlavné cesty sú tiektoré sú zadané ako parametre ​metódy. **V prípade že parametre nepredstavujú dve rôzne svetové strany, ​hlavné cesty sa nezmenia.**. 
-  * ''​bool isMainroad(Direction d) const''​ -- vráti ''​true'',​ ak je cesta zo smeru ''​d''​ hlavná, ináč vráti ''​false''​.+  * ''​bool isMainroad(Direction d) const''​ -- vráti ''​true'',​ ak je cesta označená smerom ​''​d''​ hlavná, ináč vráti ''​false''​.
  
 <note important>​Pre ukážku funkcionality triedy použite cieľ CrossroadDemo. Správnosť implementácie si otestujte pomocou dodaných testov (cieľ CrossroadTests).</​note>​ <note important>​Pre ukážku funkcionality triedy použite cieľ CrossroadDemo. Správnosť implementácie si otestujte pomocou dodaných testov (cieľ CrossroadTests).</​note>​
Řádek 36: Řádek 38:
 ===== Vzorové řešení ===== ===== Vzorové řešení =====
 [[https://​www.fi.muni.cz/​~xklucar/​_tmp/​pb161/​pb161-cv01-solution.zip|Vzorové riešenie]] [[https://​www.fi.muni.cz/​~xklucar/​_tmp/​pb161/​pb161-cv01-solution.zip|Vzorové riešenie]]
 +
 +--- //Cvičenie pripravil Marek Klučár. Ak v zadaní, pripravenom kóde alebo vzorovom riešení objavíte nejaké nedostatky/​chyby,​ píšte prosím na <​klucar@mail.muni.cz>//​
QR Code
QR Code public:pb161_fall14_cviko01_510401 (generated for current page)