Autorské riešenie
[stiahni imp : py]

  • Počet riešiteľov: 8 / 10 = 80 %

  • Úspešnosť riešenia: 5 / 6 = 83 %

Zo zadania úlohy vyplýva, že musíme porovnať objem vane s počtom litrov, ktoré pretečú sprchou počas doby sprchovania. Od budúceho majiteľa ekologickej kúpeľne si teda vyžiadame päť údajov:

  • dĺžka, šírka a hĺbka vane (v centimetroch)
  • prietok sprchy (v litroch za sekundu)
  • doba sprchovania (v minútach)

Pri výpočte objemu vane si musíme uvedomiť, že jej hľbku zmenšíme o 10 cm (pozícia bezpečnostného odtoku). Rozmery vane sú zadané v centimetroch - preto ich potrebujeme previesť na decimetre (aby sme objem vane vypočítali v litroch). Samozrejme, mohli by sme objem vypočítať v centimetroch kubických a tie potom vydeliť hodnotou 1000, vďaka čomu by sme opäť získali jednotku litre. Od takto získanej hodnoty (objem vane v litroch) odpočítame objem kúpajúcej sa korytnačky - 80 litrov.

Pri výpočte spotrebovanej vody pri sprchovaní je potrebné uvedomiť si, že prietok sprchy je zadaný v litroch za sekundu, no doba sprchovania je zadaná v minútach. Preto je potrebné previesť túto hodnotu na litre za minútu vynásobením číslom 60. Potom stačí prietok sprchy vynásobiť dobou sprchovania.

Takto získané hodnoty porovnáme a ošetríme všetky tri možné situácie:

  • výhodnejšie je kúpať sa vo vani,
  • výhodnejšie je sprchovať sa,
  • pri kúpaní sa vo vani aj pri sprchovaní spotrebujeme rovnaký objem vody.

Pri tomto ošetrení je efektívne použiť dva vnorené príkazy ak2, na základe čoho procedúra rozhodni vráti odpoveď na otázku, či je výhodnejšia vaňa alebo sprcha - nie vypíše.

V zadaní sa to nevyžadovalo - ale v autorskom riešení uvádzame aj overenie toho, či sú jednotlivé rozmery vane väčšie ako 50 cm. Ak v riešení tento test chýbal, body za to neboli strhnuté.

;Imagine logo
viem rozhodni :dlzka :sirka :hlbka :prietok :cas
  ;otestujeme zadane rozmery vane
  ak2 (zaroven (:dlzka >= 50) (:sirka >= 50) (:hlbka >= 50))[
    ;rozmery vane prevedieme z cm na dm, hlbku najprv zmensime o 10 cm
    urobtu "dlzka :dlzka/10
    urobtu "sirka :sirka/10
    urobtu "hlbka (:hlbka - 10)/10
    ;vypocitame objem vane v litroch
    urobtu "voda_vana :dlzka * :sirka * :hlbka
    ;od vypocitaneho objemu vane odpocitame objem uvazovanej korytnacky - 80 litrov
    urobtu "voda_vana :voda_vana - 80
    ;prietok sprchy prevedieme na litre za minutu, a vynasobime casom sprchovania
    ;ziskame tak pocet litrov vody spotrebovanych pocas sprchovania
    urobtu "voda_sprcha :prietok * 60 * :cas
    ;vnorenymi prikazmi ak2 zistime, ktora z troch moznych situacii nastala
    ak2 :voda_vana < :voda_sprcha[
      pis "vana vysledok "|Menej vody spotrebujeme pri kúpaní sa vo vani.|
    ][
      ak2 :voda_vana > :voda_sprcha[
        vysledok "|Menej vody spotrebujeme pri sprchovaní sa.|
      ][
        vysledok "|Množstvo spotrebovanej vody je rovnaké.|
      ]
    ]
  ][
    vysledok "|Zadali ste nesprávne rozmery vane.|
  ]
koniec

 

def rozhodni(dlzka, sirka, hlbka, prietok, cas):
    # otestovanie vstupnych hodnot nebolo povinnou sucastou riesenia
    if 50 <= dlzka and 50 <= sirka and 50 <= hlbka and prietok > 0 and cas > 0:
        # rozmery vane prevedieme na decimetre, hlbku pre prevodom zmensime o 10 cm
        dlzka = dlzka / 10
        sirka = sirka / 10
        hlbka = (hlbka - 10) / 10
        # vypocitame objem vane v litroch a zmensime ho o 80 litrov, 
        #ktore reprezentuju objem kupajucej sa korytnacky
        voda_vana = dlzka * sirka * hlbka - 80
        # vypocitame pocet litrov spotrebovanych pocas sprchovania
        # pricom prietok sprchy prevedieme z litrov za sekundu na litre za minutu
        voda_sprcha = prietok * 60 * cas
        # overime, ktora z troch moznych situacii nastala
        if voda_vana < voda_sprcha:
            return 'Zvoľte si vaňu.'
        elif voda_vana > voda_sprcha:
            return 'Zvoľte si sprchu.'
        else:
            return 'Objem spotrebovanej vody je rovnaký - rozhodnite sa sami.'
    else:
        raise ValueError('Nesprávne vstupné hodnoty.')

Vaše zaujímavé riešenia a najčastejšie chyby

Niektorí riešitelia si neuvedomili, že rozmery vane sú zadané v centimetroch a rátali s nimi aj pri ďalších výpočtoch. Častou chybou bolo aj to, že prietok sprchy neprepočítali z litrov za sekundu na litre za minútu. Každý tím odpoveď vypísal (pis, resp. print) namiesto vrátenia odpovede (vysledok, resp. return). V niektorých riešeniach riešitelia zabudli na možnosť, že obe možnosti - vaňa a sprcha - majú rovnakú spotrebu vody

Aj keď to v zadaní úlohy nebolo požadované, niektoré riešenia boli doplnené o test rozmerov vane, pričom jeden z tímov použil odchytávanie výnimiek v jazyku Python. V snahe zjednodušiť prácu s programom niektoré tímy pripravili úvodnú obrazovku s návodom na použitie.