Autorské riešenie
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:
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:
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. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |