Koordinace integrovaného záchranného systému
Použité datové struktury
Mapa města Reprezentace jako graf křižovatky jsou uzly, ulice jsou hrany Uzel – rekord seznam sousedů U každého i vzdálenost v BČJ seznam bloků
Blok ukazatelé na křižovatky, Každé centrum svou informaci čas na uhašení, čas na zachránění živých, poslední aktualizace (policisté mají něco jiného)
Událost V klasickém slova smyslu Co vše je událost Centrum vydá nebo přijme příkaz Jednotka se hodlá přesunout, provádí akci, mluví s centrem.
Datová reprezentace kalendáře Kalendář je seznam událostí Globální proměnná čas – integer Seznam Položka obsahuje: Kdy– integer Kdo– pointer na aktéra Co – událost
Aktér Akter je abstraktní třída jak nad centrem tak nad jednotkami Kvůli ukazování na jednotlivé Aktéry v kalendáři. Obsahuje virtuální metody ZpracujUdalost a NaplanujUdalost
Datová reprezentace centra Vysílačka (integer) – čas, kdy je vysílačka volná Seznam událostí k vyřízení Obsahuje náročnost problému, pointer na místo, kde je problém Seznam jednotek Ukazatele na jednotky Specializovaná mapa města
Datová reprezentace komanda Komando je skupina záchranářů, hasičů nebo policistů. Pozice Počet členů Stav Kdy budu volné – integer
Jdeme na algoritmizaci Počítač pouze řeší problémy, které by bez něj vůbec neexistovaly.
Nejkratší cesta Pokud centrum někomu zadá kam a kudy má jít. Dijkstrův algoritmus
Co dělá skupina, když nemá co dělat? Jednotku kompletně řídí centrum. Nastane jen když centrum nemá nahlášený problém (např. na počátku akce). V takovém případě jednotka prohledává dosud neprozkoumanou oblast a centru hlásí výsledky zkoumání.
Jak jednotka prohledává? Jednotky se snaží napodobit prohledávání do šířky: Centrum najde nejbližší neprozkoumanou křižovatku (blok) a přidělí ji jednotce k prozkoumání. Po prozkoumání se jednotka naplánuje na vysílání centru.
Pascal Kolik jazyků znáš tolikrát jsi počítačem
Mapa PUzel = ^ TUzel; TUzel = record; SeznamSousedu : PSeznam1; SeznamBloku : PSeznam2; end; TMapa = PUzel;
Blok PBlok = ^ TBlok; TBlok = record SeznamKrizovatek : PSeznam1; PozadovanaHodnota: Integer; {Lisi se dle centra} PosledniAktualizace: Integer; end;
Kalendář PPolozka = ^TPolozka TPolozka = record Kdo : TAkter; /CHCIP Kdy : Integer; Co : TUdalost end; PKalendar = PPolozka;
Některé procedury pro kalendář Procedure NaplanujUdalost(Udalost:TUdalost, Akter:PAkter; Cas:Integer) Zatridi do seznamu udalost... Kdo:=Akter;Kdy:=Cas;Co:=Udalost... Procedure VykonejUdalosti; begin while TKalendar.kdy= CAS do begin Kdo^.ZpracujUdalost(Udalost); OdeberCeloKalendare; end;
Centrum PCentrum = ^TCentrum TCentrum = Object(TAkter) Mapa:TMapa; VolnaVysilacka:Integer; Seznam Jednotek Seznam Problemu; SeznamCekajicichNaHovor ReagujNaUdalost, NajdiNejkratsiCestu end;
Procedury pro Centrum Procedure ReagujnaUdalost; case Udalost of PrijemNebezpeci: PrijemKontrola: PrijemKonecUkolu; PrijemNajdiNovouCestu Zadani: end;