zpět
Cvičení 3 - Fronta
Zadání cvičení:
- Stáhněte a prostudujte si ukázkovou implementaci fronty pro ukládání celých čísel pomocí spojového seznamu: linkedQueue.h linkedQueue.cpp
- Implementujte následující úlohy s využitím fronty:
Simulace situace ve výdejně e-shopu
- Výdejna má trojici přepážek, u každé přepážky se tvoří fronta zákazníků
-
Každý zákazník má přiděleno číslo objednávky
- Čísla objednávek jsou zákazníkům přidělena sekvencně od 1 do n
- Uvažujeme situaci, že do naší výdejny si přišlo dnes pro zboží všech n zákazníků.
- Postupné vyřízení objednávek simulujte v cyklech - 1 časová jednotka = 1 cyklus. V každém cyklu přijde do prodejny několik zákazníků (v každém cyklu stejný počet), zařadí se do front a následně se u přepážek vyřídí několik objednávek (taktéž v každém cyklu stejný počet).
-
V jeden okamžik přijde do prodejny m nových zákazníků a postupně, po jednom, se každý zákazník zařadí do aktuálně nejkratší fronty.
- Pokud budou nejmenší počty stejné, zákazník se přioritně zařadí do první, resp. druhé fronty.
- Následně první dvě přepážky vyřídí po dvou objednávkách, třetí přepážka je pomalejší a vyřídí jen jednu objednávku.
- Simulace končí, když jsou všechny fronty prázdné a současně bylo odbaveno všech n zákazníků.
- Při zařazení zákazníka do fronty a při vyřizení objednávky provědte v programu výpis pro kontrolu. Vypište číslo zákazníka a frontu, do které se zařadil (první, druhá, třetí), resp. u které byla vyřízena jeho objednávka.
- Zjistěte, kolik časových jednotek bude trvat odbavení 100 zákazníků za předpokladu že v každém cyklu přijde do prodejny 7 zákazniků.
Horký brambor
-
Horký brambor je jednoduchá dětská hra, kterou hraje n lidí s jedním horkým
bramborem, který si mezi sebou přehazují. Kdo má brambor vyhodnotí
jednoduché kritérium (jako každý sedmý) a pokud toto kritérium splňuje, pak
vypadává ze hry. Vyhrává poslední hráč.
-
Naprogramujte tuto hru za použití fronty. Přičemž hraje n lidí, jejichž jména
dostane program ve vektoru a vypadává každý k-tý hráč.
-
Brambor má v aktuálním okamžiku hráč na začátku fronty. Přehození bramboru je simulováno jako odstranení hráče ze začátku fronty a jeho zařazení na konec.
-
Průběh hry, tj. hráče aktálně držícího brambor a aktuálně vypadnuvšiho hráče průběžně vypisujte. Nakonec vypište jméno vítěze.
-
Budete potřebovat frontu pro ukládání jmen, tedy objektů typu string. Využijte generickou frontu z STL library.
-
U fronty v STL budete marně hledat funkce enqueue, dequeue a peek. Vkládání na konec fronty je realizováno funkcí push a odebrání prvku ze začátku fronty (bez jeho přečtení) realizováno funkcí pop. Pokud budete chtít přečíst prvek ze začátku fronty a zpracovat, je potřeba použít funkci front.
Soubor s funkcí main a hlavičkami funkcí k implememntaci: cviceni3.cpp
Řešení: cviceni3-reseni.cpp