Zadání finálové úlohy

Autoatlas

Soutěž dětí a mládeže v programování – finále 17. ročníku


Napište program pro zobrazení mapy cest mezi městy a vyhledávání optimální trasy podle zadaných kritérií.

Mapa je uložena ve formátu XML, jehož strukturu pochopíte z přiloženého ukázkového souboru.

Postupně implementujte následující funkce:

  1. Načtení dat ze souboru zvoleného uživatelem.

  2. Program graficky zobrazí mapu obsahující jednotlivá města.

  3. Program zobrazí cesty mezi jednotlivými městy. Zobrazení cest může uživatel zapínat/vypínat. Program může graficky rozlišit rychlost dosažitelnou na jednotlivých cestách.

  4. Program pro každé město umožní pohodlně zjistit cesty do okolních měst, jejich délku a dobu jízdy.

  5. Program umožní uživateli vybrat města, kde má začínat a končit cesta.

  6. Program navrhne a vypíše optimální trasu podle uživatelem zvoleného kritéria (nejkratší, nejrychlejší, nejlevnější). Cena cesty mezi sousedními městy se určuje na základě průměrné rychlosti a spotřeby paliva pro danou rychlost.

  7. Program zobrazí na mapě nalezenou trasu.

  8. Program umožní uložení nalezené optimální trasy do uživatelem zvoleného souboru ve formátu XML.

Formáty vstupních i výstupních souborů XML jsou samopopisné, prostudujte si ukázkové soubory.

Příklad 1. Ukázka datového souboru s mapou

<?xml version="1.0" encoding="windows-1250"?>
<mapa>
  <mesta>
    <mesto>
      <nazev>Aš</nazev>
      <polohaX>8</polohaX>
      <polohaY>-20</polohaY>
    </mesto>
    <mesto>
      <nazev>Brno</nazev>
      <polohaX>270</polohaX>
      <polohaY>80</polohaY>
    </mesto>
    ...
  </mesta>
  <cesty>
    <cesta>
      <z>Aš</z>
      <do>Cheb</do>
      <vzdalenost>24</vzdalenost>
      <prumernaRychlost>70</prumernaRychlost>
    </cesta>
    <cesta>
      <z>Brno</z>
      <do>Břeclav</do>
      <vzdalenost>61</vzdalenost>
      <prumernaRychlost>130</prumernaRychlost>
    </cesta>
    ...
  </cesty>
  <spotreby>
    <spotreba>
      <rychlost>60</rychlost>
      <litru>5</litru>
    </spotreba>
    <spotreba>
      <rychlost>70</rychlost>
      <litru>5.5</litru>
    </spotreba>
    ...
  </spotreby>
</mapa>

Příklad 2. Ukázka formátu pro uložení nalezené cesty

<?xml version="1.0" encoding="windows-1250"?>
<cesta>
  <z>Plzeň</z>
  <do>Brno</do>
  <pres>Praha</pres>
  <!-- Element <pres> se může opakovat a obsahuje postupně všechna
       města, přes která se jede. -->
  <vzdalenost>282</vzdalenost>
  <dobaJizdy>2:10</dobaJizdy>
  <spotreba>28.2</spotreba>
</cesta>

Na řešení úlohy máte 4 hodiny čistého času. Za každou úlohu můžete dostat maximálně 10 bodů, z nichž 6 bodů je vyhrazeno na ohodnocení funkčnosti programu a jeho shody se zadáním, 3 body na efektivitu a jeden bod na dokumentaci a přehlednost zdrojového kódu.