Autorské riešenie
V úlohe ste mali vytvoriť procedúru nakup, ktorá vypočíta a vypíše koľko majú kúpiť korytnačky z potrebných surovín. Najprv je potrebné upraviť počet hostí. Podľa receptu pre 4 osoby potrebujeme 2 vajíčka, potom pre 2 osoby potrebujeme 1 vajíčko, a vieme, že vajíčka nevieme deliť. Teda najmenšie množstvo, ktoré vieme pripraviť je polovičná dávka pre 2 osoby. Preto ak je neprány počet hostí, upravime to na párny tak, že pripočítame k zadanému počtu +1. To, či je zadaný počet párny, je vhodné zistiť celočíselným delením pomocou funkcie zvysok. Ak už vieme pre koľko ľudí máme pripraviť šišky, najprv vypočítame potrebnú hmotnosť z jednotlivých potravín pre všetky suroviny. Vieme, že jednotlivé potraviny sa predávajú v baleniach s danou hmotnosťou. Počet balení jednotlivých potravín určíme tak, že vydelíme celkovú potrebnú hmotnosť s hmotnosťou jedného balenia. Pre určenie počtu kusového balenia použijeme funkciu celočíselného podielu. Ak zvyšok pri celočíselnom delení je 0, teda celková potrebná hmotnosť je presným násobkom hmotnosti jedného balenia, potom počet potrebných balení je daný podielom cPodiel. Ak pri delení zvyšok nie je 0, potom musíme kúpiť +1 balenie aj pre zvyšné dávky. Keďže potraviny majú rôzne hmotnostné balenia, pre všetky ingrediencie musíme určiť potrebné množstvo balenia zvlášť. Výsledná procedúra nakup s parametrom (počtom prihlásených účastníkov), môže v jazyku Imagine Logo vyzerať napríklad takto:
;Imagine
logo
viem nakup :p ; p-pocet hosti ak (zvysok :p 2) = 1 [urobTu "p :p+1] (pis "|Sisky pripravime pre pocet hosti| :p) urobTu "drozdie :p*20/4 ak2 (zvysok :drozdie 40 ) = 0 [urobTu "drozdieKus (cPodiel :drozdie 40)] [urobTu "drozdieKus (cPodiel :drozdie 40)+1] (pis "|Pocet balení drozdia| :drozdieKus ) urobTu "mlieko :p*3/4 ak2 (zvysok :mlieko 10 ) = 0 [urobTu "mliekoKus (cPodiel :mlieko 10)] [urobTu "mliekoKus (cPodiel :mlieko 10)+1] (pis "|Pocet litrov mlieka| :mliekoKus) urobTu "maslo :p*30/4 ak2 (zvysok :maslo 125 ) = 0 [urobTu "masloKus (cPodiel :maslo 125)] [urobTu "masloKus (cPodiel :maslo 125)+1] (pis "|Pocet kusov masla| :masloKus) urobtu "vajicko :p*2/4 ak2 (zvysok :vajicko 1) = 0 [urobTu "vajickoKus (cPodiel :vajicko 1)] [urobTu "vajickoKus (cPodiel :vajicko 1)+1] (pis "|Pocet kusov vajicka| :vajickoKus) koniec Vaše zaujímavé riešenia a najčastejšie chyby Mnohí ste neuvažovali s tým, že pol vajíčka sa nedá kúpiť, a pri nepárnom počte účastníkov ste určili počet vajíčok ako nie celé číslo, čo však nie je možné. Niektorí ste vypočítali celkové množstvo potrebných surovín, ale neurčili ste počet balení. Túto úlohu vyriešili iba 2 tímy správne, tím HAW-HAW a tím Programatori2017, blahoželáme im. Tím Elektronik tiež vyriešil úlohu správne, ale podľa pravidiel úloha sa mala riešiť v kategórii Profík v Imagine, preto za program v Pythone sme im nemohli prideliť body. Možno sa vám viac páčia úlohy na kreslenie, preto sme dostali na túto výpočtovú úlohu menej riešení, ale zaslané riešenia svedčia o tom, že pekne viete matematicky uvažovať.
|
|||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |