Pokud nebude na příkazové řádce uveden právě jeden argument, vypište chybové hlášení a stručný

Podobné dokumenty
Semestrální práce KIV/PC Řešení kolizí frekvencí sítě vysílačů Zdeněk Bečvář A14B0466P 10. ledna 2016

Semestrální práce z KIV/PC. Kolja Matuševský (A14B0310P)

Šifrování/Dešifrování s použitím hesla

Semestální práce z předmětu PC

Implementace numerických metod v jazyce C a Python

DUM 01 téma: Obecné vlastnosti tabulkového editoru, rozsah, zápis do buňky, klávesové zkratky

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

a jiné elektronické přístroje včetně mobilů. Pracujte samostatně. Povolen je 1 list A4 vlastnoručně psaných poznámek k předmětu...

PROBLÉM ČTYŘ BAREV. Lze obarvit jakoukoliv mapu v rovině čtyřmi barvami tak, aby žádné dvě sousedící oblasti neměly stejnou barvu?

Jarníkův algoritmus. Obsah. Popis

Základy operačních systémů

5 Rekurze a zásobník. Rekurzivní volání metody

Administrace počítačových sítí. WEB a LPT

ak. rok 2013/2014 Michal Španěl,

MATEMATIKA rozšířená úroveň

Instalace aplikace 602XML Filler

OPTIMALIZACE FUNKCE GENETICKÝM ALGORITMEM

UMÍME TO S POČÍTAČEM - test k IT dovednostem

Vyplňování souvislé oblasti

Fotogalerie pro redakční systém Marwel Obscura v. 2.0

M I S Y S - W E B. Intranet řešení systému MISYS. Verze Příručka uživatele

Aktualizace map přístrojů ZENEC ZE-NC5xx, ZE-NA2000, ZE-NA2000N

SPZ Uživatelská příručka

Spojovník spojuje dvě části slova nebo dva výrazy bez mezer (Plzeň-sever, bude-li...).

Software. Mgr. Renáta Rellová. Výukový materiál zpracován v rámci projektu EU peníze školám

Obsah. Úvod Co je KORG KONTROL Editor?... 2 Požadavky na systém... 2 Instalace... 3

Šablona klíčové aktivity III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Obsah. Seznam možných testů. Termíny úkolů

Automatický přenos dat z terminálů BM-Finger

Klasifikace textu do kategorií spam/ne-spam

Principy operačních systémů. Lekce 3: Virtualizace paměti

TÉMATICKÝ OKRUH TZD, DIS a TIS

MATLAB a Simulink R2015b

Operační systémy 2. Přednáška číslo 2. Přidělování paměti

Elektronická spisová služba

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

IB109 Návrh a implementace paralelních systémů. Kolektivní komunikační primitava. RNDr. Jiří Barnat, Ph.D.

První přihlášení do datové schránky krok za krokem

Principy operačních systémů. Lekce 7: Souborový systém

NÁVOD K POUŽÍVÁNÍ PU 298

SEZNÁMENÍ S PROGRAMEM

ŠKODA AUTO VYSOKÁ ŠKOLA

ÚVOD 3 SEZNÁMENÍ SE SYSTÉMEM 4

Volby a Referenda ALIS spol. s r.o.

Základní ovládání aplikace

6. ROČNÍK ŠKOLNÍ SOUTĚŽE V PROGRAMOVÁNÍ 2013

Veřejné. Aplikace EP2W. Uživatelská příručka pro externího uživatele


Projekt implementace OS Linux do výuky informačních technologií

Návrhy elektromagnetických zení

Genetické algoritmy. Vysoká škola ekonomická Praha. Tato prezentace je k dispozici na:

Operační systémy Linux, Mac OS X a jejich srovnání

ABSOLVENTSKÁ PRÁCE. Vyšší odborná škola a Střední průmyslová škola elektrotechnická Plzeň, Koterovská 85. Vyšší odborná škola

VYSOKÁ ŠKOLA EKONOMICKÁ V PRAZE. Optimalizace trasy při revizích elektrospotřebičů

Manuál k aplikaci SDO PILOT v.0.2

Manuál administrátora FMS...2

Pokyn k vypracování absolventské práce

Univerzální regulační systém TERM 4M. Technická data vstupy Pt100. proud (IMEA) binární (BIN) výstupy binární: (OUTPUTS)

Obsah. Úvodem 9 Komu je kniha určena 9 Co si v knize přečtete 9

1. Úroveň znalostí a dovedností

Databázový systém Matylda

MATEMATIKA 1 4 A B C D. didaktický test. Zadání neotvírejte, počkejte na pokyn! Krok za krokem k nové maturitě Maturita nanečisto 2006

Uživatelský manuál. A3600 DL ( Data Download)

Datavsuchu.cz zálohovací klient Microsoft Windows Instalační návod

zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry.

e Utility Report Vyjadřování k existenci sítí

MATEMATIKA základní úroveň obtížnosti

Operační systémy (OS)

Rozdělení operačních systémů

Návod k používání webové služby ABA-DOPRAVNÍ INFORMACE

Dokumentace programu piskvorek

MARUSHKA. Tipy na práci s mapovým prohlížečem Marushka. Marushka je webová mapová aplikace pro zobrazování map a informací z GISu města Plzně.

Skripty - úvod. Linux - skripty 2

DUM 20 téma: Formátování rozsáhlého dokumentu

Office podrobný průvodce. Tomáš Šimek

Univerzita Jana Evangelisty Purkyně v Ústí nad Labem. Jak na PDF

Metodická příručka pro učitele. InspIS SET modul školní testování

POKYNY PRO ŘEDITELE. k profilovým zkouškám a ústním zkouškám společné části

PROGRAMOVÁNÍ NC STROJŮ

A0M15EZS Elektrické zdroje a soustavy ZS 2011/2012 cvičení 1. Jednotková matice na hlavní diagonále jsou jedničky, všude jinde nuly

PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY BAKALÁŘSKÁ PRÁCE. Desková hra s podporou hraní po síti Lovci pokladů.

Návrh aplikace. Project Westpon. Inteligentní simulátor budov. Martin Mudra, Jan Smejkal, Onřej Macoszek, Marek Žehra, Jiří Slivárich

Registrační číslo projektu: CZ.1.07/1.5.00/ Název projektu: Moderní škola 21. století. Zařazení materiálu: Ověření materiálu ve výuce:

Tato tematika je zpracována v Záznamy přednášek: str materiál: PrikladyZobrazeniCisel.pdf

Postup zprovoznění aplikace Crypta 2

INTERNET SERVIS MANUÁL

BEZDRÁTOVÉ PROPOJENÍ ROZHRANÍ LABQUEST 2

LOGIC. Stavebnice PROMOS Line 2. Technický manuál

Technická specifikace předmětu veřejné zakázky Zhotovení interaktivního webového portálu a mobilních aplikací

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk

1. Uživatelská úprava příkazů I.

Obsah. Úvodem 9 Komu je kniha určena 9 Co v knize najdete 9

Svobodná chebská škola, základní škola a gymnázium s.r.o. procvičení a zapamatování počítání a měření úhlů

Implementace A* algoritmu na konkrétní problém orientace v prostoru budov

8. Geometrie vrací úder (sepsal Pavel Klavík)

Základní škola Moravský Beroun, okres Olomouc

4EK311 Operační výzkum. 5. Teorie grafů

Přímý kanál pro obchodníky - Informace pro příjemce platebních karet

Transkript:

KIV/PC ZS 2015/2016 Zadání ZADÁNÍ SEMESTRÁLNÍ PRÁCE ŘEŠENÍ KOLIZÍ FREKVENCÍ SÍTĚ VYSÍLAČŮ VARIANTA 2 (REx) Naprogramujte v ANSI C přenositelnou 1 konzolovou aplikaci, která jako vstup načte z parametru příkazové řádky název textového souboru obsahující informaci o pozici vysílačů na mapě a na jeho základě přidělí každému vysílači frekvenci tak, aby jeho signál nekolidoval s vysílači v blízkém okolí. Úloha je znázorněna obrázku 1. Program se bude spouštět příkazem freq.exe <soubor-s-vysílači>. Symbol <soubor-s-vysílači> zastupuje jméno textového souboru, který obsahuje informaci o rozmístění vysílačů na mapě a o dostupných vysílacích frekvencích, které jim je možné přidělit. Váš program tedy může být během testování spuštěn například takto: freq.exe vysilace-25.txt Výsledkem práce programu bude výpis do konzole se seznamem přidělených frekvencí každému vysílači ze vstupního souboru (viz Specifikace výstupu programu). V případě chyby nebo neřešitelné situaci skončí program výpisem příslušné chybové hlášky. Pokud nebude na příkazové řádce uveden právě jeden argument, vypište chybové hlášení a stručný návod k použití programu v angličtině podle běžných zvyklostí (viz např. ukázková semestrální práce na webu předmětu Programování v jazyce C). Vstupem programu je pouze argument na příkazové řádce interakce s uživatelem pomocí klávesnice či myši v průběhu práce programu se neočekává. Hotovou práci odevzdejte v jediném archivu typu ZIP prostřednictvím automatického odevzdávacího a validačního systému. Postupujte podle instrukcí uvedených na webu předmětu. Archiv nechť obsahuje všechny zdrojové soubory potřebné k přeložení programu, makefile pro Windows i Linux (pro překlad v Linuxu připravte soubor pojmenovaný makefile a pro Windows makefile.win) a dokumentaci ve formátu PDF vytvořenou v typografickém systému TEX, resp. L A TEX. Bude-li některá z částí chybět, kontrolní skript Vaši práci odmítne. 1 Je třeba, aby bylo možné Váš program přeložit a spustit na PC s operačním prostředím Win32/64 (tj. operační systémy Microsoft Windows NT/2000/XP/Vista/7/8/10) a s běžnými distribucemi Linuxu (např. Ubuntu, Mint, OpenSUSE, Debian, atp.). Server, na který budete Vaši práci odevzdávat a který ji otestuje, má nainstalovaný operační systém Debian GNU/Linux 7.8 Wheezy s jádrem verze 3.2.51-1 x86 64 a s překladačem gcc 4.7.2. 1

Obrázek 1: Znázornění úlohy. Na mapě je dána množina vysílačů, jejichž pozice je znázorněna tečkou. Vysílač dokáže vyslat svůj signál pouze v okruhu do předem definované vzdálenosti. Ve skutečnosti spolu ale signály sousedních vysílačů mohou kolidovat (situace vlevo). Každému vysílači je proto potřeba přiřadit jinou frekvenci (barvu) tak, aby signál žádné dvojice vysílačů nekolidoval (vpravo). Specifikace vstupu programu Vstupem programu je pouze parametr na příkazové řádce: soubor s informacemi o vysílačích a frekvencích, které má program přidělovat. Tento soubor je textový a má následující formát: Available frequencies: ID f0 f 0 ID f1 f 1 ID f2 f 2... ID fnf 1 f N f 1 Transimission radius: R Transmitters: ID t0 X t0 Y t0 ID t1 X t1 Y t1 ID t2 X t2 Y t2... ID tn 1 X tn 1 Y tn 1 Kde ID fi je číselný identifikátor i-té vysílací frekvence a f i je příslušná vysílací frekvence v Hertzích. N f je celkový počet dostupných vysílacích frekvencí a N je celkový počet vysílačů. Konstanta R udává poloměr kruhu v kilometrech, v němž má vysílač pokrytí signálu a kde může docházet ke kolizím. V sekci Transmitters se nachází identifikátory a pozice jednotlivých vysílačů. ID ti je identifikační číslo i-tého vysílače a X ti a Y ti jsou jeho příslušné souřadnice [X, Y ] na mapě. Tyto souřadnice jsou stejně jako R udávány v kilometrech. Poznámka: Předpokládejte, že veškerá identifikační čísla jsou vždy číslována vzestupně od nuly a jsou ve vstupním souboru seřazena. 2

Obrázek 2: Převod informací o vysílačích na graf kolizí. Pokud se signály (kruhy) překrývají, může dojít ke kolizi, a proto jsou tyto vysílače (vrcholy) v grafu spojeny hranou. Graf kolizí K vyřešení úlohy je třeba sestrojit graf kolizí, který bude mít tyto vlastnosti: Každý vysílač je v grafu reprezentován unikátním vrcholem. Vrcholy (vysílače) propojuje hrana pouze tehdy, pokud mezi nimi může docházet ke kolizi signálu. (Jejich vysílací oblasti se překrývají.) Každý vrchol nese informaci o přiřazené frekvenci. Tato informace je vyjádřena jako celé číslo, které se v teorii grafů označuje jako barva vrcholu. Nechť barva vrcholu odpovídá identifikačním číslům frekvencí ID fi ve vstupním souboru. Na obrázku 2 je znázorněn převod informací o vysílačích na graf kolizí dle zmíněných pravidel. Jako podmínku kolize berte situaci, kdy je Euklidovská vzdálenost mezi dvěma vysílači menší než 2R (dvojnásobek poloměru kruhu, ve kterém vysílač propaguje signál). Obarvování grafu Úlohu přidělování frekvencí vysílačů lze řešit metodou teorie grafů, která se nazvývá obarvování grafu. Obarvování grafu je postup, při kterém každému vrcholu přiřadíme celé číslo (barvu) tak, aby každá dvojice vrcholů spojená hranou měla rozdílnou barvu. Zároveň požadujeme, aby k tomuto obarvení bylo použito co nejméně barev (frekvencí vysílačů). V tomto případě bude obarvován graf kolizí. Rozdílná barva v tomto případě znamená rozdílná vysílací frekvence, a je tedy zřejmé, že pokud správně obarvíme kolizní graf, ke kolizi signálů nemůže dojít. Správně obarvený graf je znázorněn na obrázku 3. Úloha korektního obarvení grafu s použitím nejmenšího počtu barev je ve skutečnosti NPúplná, z čehož vyplývá, že dosud není znám algoritmus, který by problém dokázal optimálně vyřešit s polynomiální časovou složitostí. Existuje ale algoritmus, který problém řeší v mnoha případech optimálně nebo je jeho řešení blízké optimálnímu řešení. Postup tohoto algoritmu je následující: 3

Obrázek 3: Neobarvený graf kolizí (vlevo) a jeho správně obarvená varianta (vpravo). V obarveném grafu žádná dvojice vrcholů spojená hranou nemá shodnou barvu (a tedy i příslušné vysílače mají různou frekvenci a nekolidují spolu.) 1. Vytvoř graf kolizí. 2. Nastav všechny vrcholy grafu jako dosud neobarvené. 3. Procházej všechny vrcholy grafu a vlož do zásobníku první neobarvený vrchol. 4. Není-li zásobník prázdný, vyjmi vrchol ze zásobníku. 5. Vybranému vrcholu postupně přiřazuj barvy 0, 1,..., N f 1, dokud není nalezena barva, která nekoliduje se sousedními vrcholy (těmi, do kterých z aktuálního vrcholu vede hrana). Přiřaď aktuálnímu vrcholu nejnižší možnou barvu, která tuto podmínku splňuje a vlož do zásobníku všechny dosud neobarvené sousední vrcholy aktuálně zpracovaného vrcholu. Pokud je nejnižší nalezená barva větší než dostupný počet barev (frekvencí), algoritmus ukonči a označ úlohu jako neřešitelnou. (Poznámka: úloha sice řešení mít může, ale tento algoritmus jej nedokázal naleznout.) 6. Opakuj postup od bodu 4. Je-li zásobník prázdný, pokračuj na další neobarvený vrchol v grafu (bod 3). Tento algoritmus rovněž pěkně ilustruje video na adrese: http://www.youtube.com/watch?v=o3b-v94vnqg Řešitelnost úlohy Tato úloha není vždy řešitelná existují varianty vstupu, pro které nelze graf kolizí obarvit tak, aby byl použit pouze zadaný počet frekvencí. Dojde-li k tomu, že program nebude schopen úlohu vyřešit, nechť zareaguje chybovým hlášením podle níže uvedené ukázky (s přesným dodržením formátování): ERR#3: Non-existent solution! Upozornění: Graf, který bude Váš program obarvovat může mít i tisíce vrcholů a hran, a je proto nutné zvolit zvolit vhodný způsob implementace vnitřní reprezentace grafu tak, aby výpočet proběhl v rozumném čase. 4

Specifikace výstupu programu Výstup programu bude směrován pouze na konzoli. Výstupem (v případě, že nenastala chyba) bude rostoucí seřazená posloupnost identifikačních čísel vysílačů a jim přiřazená vysílací frekvence v Hertzích, například: 0 92300 1 105600 2 92300 3 86200 4 86200 Každá dvojice těchto hodnot je vypsána na samostatné řádce a ukončena znakem konec řádky \n. Pokud algoritmus řešení nenašel, nechť program vypíše chybu č. 3 (viz výše a níže). Pro testovací účely jsou připojeny vstupní soubory s příslušnými vzorovými výstupy. (Poznámka: graf lze samozřejmě obarvit mnoha různými způsoby tak, aby byla splněna podmínka korektního obarvení, berte výstup pouze jako příklad správného řešení.) V souboru vysilace-25.txt a vysilace-25-vysledek.txt se nachází testovací množina 25-ti vysílačů, resp. odpovídající výstup pro tento vstupní soubor. Podobně v souborech vysilace-1000.txt a vysilace-1000-vysledek.txt se nachází vstupní soubor pro 1000 vysílačů a jemu odpovídající vzorové obarvení (tato množina je vhodná pro testování rychlosti vašeho programu). Chybové stavy Odhalí-li program chybu, nechť reaguje výpisem jedné z chybových hlášek uvedených v tabulce. Mějte, prosím, na paměti, že z důvodu automatické kontroly odevzdávaného díla je nezbytně nutné přesně dodržet formát chybových hlášek. Chybové hlášení ERR#1: Missing argument! ERR#2: Out of memory! ERR#3: Non-existent solution! Význam, popis chybového stavu Na příkazové řádce nebyl program předán parametr, specifikující vstupní soubor s informacemi o vysílačích. Není k dispozici dostatek operační paměti. Řešení pro daný počet vysílacích frekvencí nebylo nalezeno. Hodnoty chyb od 4 výše můžete využít pro vlastní potřeby, ovšem dodržte uvedené formátování, tj. velkými písmeny zkratka ERR, následovaná bez mezer znakem # a číslem chyby za číslem budiž pak dvojtečka a mezera a pak stručný popis chyby ukončený vykřičníkem (! ). Číselný kód chyby nechť program předá také operačnímu systému prostřednictvím návratové hodnoty z funkce int main(). V případě, že program proběhne bez chyby, nechť je návratová hodnota programu 0. Užitečné techniky a odkazy Uvedené techniky je možné využít při řešení úlohy. Protože se jedná o postupy víceméně standardní, lze k nim nalézt velké množství dokumentace: 1. teorie grafů http://cs.wikipedia.org/wiki/teorie_graf%c5%af, 2. barvení grafu http://en.wikipedia.org/wiki/graph_coloring, 3. zásobník. Řešení úlohy je zcela ve vaší kompetenci zvolte takové algoritmy a techniky, které podle vás nejlépe povedou k cíli. 5