Autorské riešenie
Pri riešení úlohy môžeme postupovať dvomi spôsobmi:
Pri druhom spôsobe riešenia najprv vypočítame náklady na použitie plných vozíkov. Počet plných vozíkov vypočítame ako celočíselný podiel objemu čaju číslom 30. Náklady na použitie jedného vozíka je súčet nákladov za vozík, za 10-litrovú a za 20-litrovú bandasku, čo je 5+2+1 €. Náklady na použitie plných vozíkov je súčinom uvedených vypočítaných hodnôt. Pri výpočte nákladov na použite čiastočne naloženého vozíka, rozlišujeme nasledovné situácie, ktoré ilustrujeme schémou:
Ak zvyšný objem čaju je nenulový a zároveň nanajvýš 10 litrov včítane, tak pri nákladoch započítame náklady na vozík 5 € a náklady na 10-litrovú bandasku 1 €. Ak zvyšný objem čaju je viac ako 10 litrov a zároveň nanajvýš 20 litrov včítane, tak pri nákladoch započítame náklady na vozík 5 € a náklady na 20-litrovú bandasku 2 €. Ak zvyšný objem čaju je viac ako 20 litrov, tak pri nákladoch započítame náklady na vozík 5 €, náklady na 10-litrovú bandasku 1 € a náklady na 20-litrovú bandasku 2 €. Výsledné riešenie dostaneme ako súčet nákladov na použitie plných vozíkov a nákladov na použitie čiastočne naloženého vozíka. Riešenie v programovacom jazyku Imagine Logo môže vyzerať nasledovne: ;Imagine logo viem kalkulacia :objem urobTu "pocet_plnych_vozikov cPodiel :objem 30 urobTu "naklady_na_plne_voziky (5 + 2 + 1) * :pocet_plnych_vozikov urobTu "zvysny_objem :objem - 30 * :pocet_plnych_vozikov ak2 :zvysny_objem > 20 [ urobTu "naklady_na_posledny_vozik 5 + 2 + 1 ][ ak2 :zvysny_objem > 10 [ urobTu "naklady_na_posledny_vozik 5 + 2 ][ ak2 :zvysny_objem > 0 [ urobTu "naklady_na_posledny_vozik 5 + 1 ][ urobTu "naklady_na_posledny_vozik 0 ] ] ] výsledok :naklady_na_plne_voziky + :naklady_na_posledny_vozik koniec #Python def kalkulacia(objem): pocet_plnych_vozikov = objem // 30 naklady_na_plne_voziky = (5 + 2 + 1) * pocet_plnych_vozikov zvysny_objem = objem - 30 * pocet_plnych_vozikov if zvysny_objem > 20: naklady_na_posledny_vozik = 5 + 2 + 1 elif zvysny_objem > 10: naklady_na_posledny_vozik = 5 + 2 elif zvysny_objem > 0: naklady_na_posledny_vozik = 5 + 1 else: naklady_na_posledny_vozik = 0 return naklady_na_plne_voziky + naklady_na_posledny_vozik Táto úloha je zameraná na dôslednú analýzu matematického problému, na použitie dekompozície ako strsatégie riešenia problému, na precvičenie aritmetických operácii, príkazu vetvenia a funkcie s parametrom a výstupom. Vaše zaujímavé riešenia a najčastejšie chyby Do riešenia tejto úlohy sa zapojilo 19 tímov z kategórie EXPERT. Oproti predchádzajúcim kolám je zreteľný posun k programovaciemu jazyku Python, v ktorom programovalo až 14 tímov. Zvyšných 5 tímov použilo programovacie prostredie Imagine Logo. Až 8 tímov dosiahlo plný počet bodov. Veľmi stručné riešenie uviedol tím File-Open, ktorý použil prvý spôsob riešenia úlohy, v ktorom šikovne využili funkciu ceil (najbližšia vyššia celá časť čísla) z modulu math:
#Python V riešeniach sme zaregistrovali nasledovné nedostatky, vychádzajúce najčastejšie z nedôslednej analýzy problému či z pretrvajúcich programátorských zlozvykov:
|
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |