Soutěž dětí a mládeže v programování – finále 18. ročníku
Vaším úkolem je napsat program, který bude sloužit jako řídící jednotka výtahů. Program bude výtahy ovládat pomocí síťového protokolu, který je popsaný v samostatném manuálu. Správa KRNAPu nám neumožnila pro každého z vás zřídit zde na Duncanu několik výtahových šachet pro testování vaší řídící jednotky. Místo toho váš program bude ovládat jen simulátor reálného výtahu. Simulátor má podobu serveru, který umožňuje sledovat a ovlivňovat chování výtahů a cestujících. Server máte k dispozici na vašem počítači jako program LiftServer.exe.
Váš program (řídící jednotka) od serveru dostává informace v podobě událostí. Události odpovídají reálným procesům, které se dějí ve výtahu. Například stisk tlačítka pro přivolání výtahu je klientovi poslán jako událost. Kompletní přehled událostí je popsán v manuálu v části Události (zprávy Server → Client). Váš program by měl tyto události vyhodnotit a na základě nich se snažit s jednotlivými kabinami výtahu jezdit tak, aby byla co nejmenší průměrná doba potřebná na přepravení jednoho pasažéra. Váš program může kabiny výtahů ovládat zasíláním příkazů popsaných v části Příkazy (zprávy Client → Server).
Pro rychlé pochopení toho, jak funguje simulační server a jak může spolupracovat s klientem (řídící jednotkou), jsme pro vás připravili velmi jednoduchého ukázkového klienta. Postup spuštění a využití je následující:
Spusťte simulační server LiftServer.exe.
Proveďte inicializaci serveru příkazem z menu F4)
→ (Spusťte si ukázkového klienta LiftClient.exe.
Připojte klienta k testovacímu serveru F3), Enter.
→ (Aktivujte řídící jednotku klienta příkazem F5).
→ (Aktivujte jádro serveru. Z menu vyberte příkaz F2) a do příkazové řádky zadejte příkaz start odeslaný stiskem klávesy Enter.
→ (Nyní můžete v serveru opakovaně generovat příchody nových pasažérů příkazem F5) a sledovat chování celého systému.
→ (V případě potřeby můžete nové pasažéry přidávat ručně pomocí příkazu newpas.
Server umožňuje dávkové provedení příkazů uložených v souboru. Načtení a provedení příkazů ze souboru se provádí příkazem load. V adresáři se serverem a ukázkovým klientem naleznete několik ukázkových souborů s příkazy (skriptů s příponou lss).
Postupně ve vašem programu naimplementujte následující funkce:
Připojení k serveru běžícímu na uživatelem zvolené adrese a portu.
Přijímání událostí od serveru a zasílání příkazů serveru.
Správné reagování na události, např. rozvěcení indikátorů po stisku tlačítka pasažérem, nastavení textu na info panelech, atd.
Primitivní ovládání výtahů, které k přesunu kabin používá příkaz floor. Pohyb výtahů optimalizujte tak, aby průměrná doba potřebná pro přepravení cestujícího byla co nejmenší.
Pokročilé ovládání výtahů, které k přesunu kabin místo příkazu floor používá příkaz speed. Pohyb výtahů optimalizujte tak, aby průměrná doba potřebná pro přepravení cestujícího byla co nejmenší.
Na řešení úlohy máte 4 hodiny čistého času. Vaše řešení uložte do adresáře c:\XX, kde XX je vaše startovní číslo. Za úlohu můžete dostat maximálně 100 bodů, z nichž 60 bodů je vyhrazeno na ohodnocení funkčnosti programu a jeho shody se zadáním, 30 bodů na efektivitu a deset bodů na dokumentaci a přehlednost zdrojového kódu.