Autorské riešenie
Správne riešenie vyžadovalo doplniť procedúru v Imagine, resp. funkciu v Pythone, ktorá na vstupe pracuje s počtom znakov, zoznamom obsahov jednotlivých obrázkov vo štvorcových centimetroch a s jednotkovou cenou za textovú a za grafickú normostranu. Aby sme vypočítali celkovú cenu za tlač knihy v eurách, bolo potrebné najprv zistiť, koľko normostrán nám tvorí textová informácia a koľko grafická informácia. Úlohu bolo možné riešiť viacerými spôsobmi. Mohli ste uvažovať riešenie, pri ktorom sa platí za celé normostrany, aj keď strana nie je celá zaplnená obsahom. Správne však bolo aj riešenie, ak ste na určenie počtu normostrán použili neceločíselné delenie dvoch prirodzených čísel. Pri určovaní počtu grafických normostrán bolo najprv potrebné spočítať všetky hodnoty v zozname obsahov obrázkov. Následne už len stačilo správne naformulovať podmienku, pri ktorej sa uplatní zľava. Nasledujú možné riešenia v jazyku Imagine Logo a Python.
;Imagine logo
viem pocitaj :pocetZnakov :zoznam :cenaZaTextovuNormostranu :cenaZaGrafickuNormostranu urobTu "spoluGrafika 0 prePrvky "cislo :zoznam [ urobTu "spoluGrafika :spoluGrafika + :cislo ] urobTu "pocetTextovychNormostran :pocetZnakov/:rozsahTextovejNormostrany urobTu "pocetGrafickychNormostran :spoluGrafika / :rozsahGrafickejNormostrany urobTu "podielGrafickejInformacie :pocetGrafickychNormostran / (:pocetTextovychNormostran+:pocetGrafickychNormostran) urobTu "vyslednaCena 0 ak2 :podielGrafickejInformacie >= 0.1 [urobTu "vyslednaCena :pocetTextovychNormostran * :cenaZaTextovuNormostranu + :pocetGrafickychNormostran * :cenaZaGrafickuNormostranu * 0.95] [urobTu "vyslednaCena :pocetTextovychNormostran * :cenaZaTextovuNormostranu + :pocetGrafickychNormostran * :cenaZaGrafickuNormostranu] ; zaokruhlenie a prevod na eura urobTu "vyslednaCena cpodiel :vyslednaCena 1 urobTu "vyslednaCena :vyslednaCena/100 vysledok :vyslednaCena koniec
#Python
def pocitaj(pocetZnakov,z,cenaZaTextovuNormostranu,cenaZaGrafickuNormostranu): ''' :param údaje o knihe - počet znakov, zoznam obrázkov, jednotková cena za textovú a za grafickú normostranu v centoch :type int, list, int, int :return celková cena za tlač knihy v eurách :rtype: float ''' spoluGrafika = 0 for prvok in z: spoluGrafika += prvok pocetTextovychNormostran = pocetZnakov/rozsahTextovejNormostrany pocetGrafickychNormostran = spoluGrafika / rozsahGrafickejNormostrany podielGrafickejInformacie = pocetGrafickychNormostran / (pocetTextovychNormostran+pocetGrafickychNormostran) vyslednaCena = 0 if podielGrafickejInformacie >= 0.1: vyslednaCena = pocetTextovychNormostran*cenaZaTextovuNormostranu + pocetGrafickychNormostran*cenaZaGrafickuNormostranu*0.95 else: vyslednaCena = pocetTextovychNormostran*cenaZaTextovuNormostranu + pocetGrafickychNormostran*cenaZaGrafickuNormostranu vyslednaCena = vyslednaCena // 1 vyslednaCena = vyslednaCena / 100 return vyslednaCena Vaše zaujímavé riešenia a najčastejšie chyby Oba tímy riešili úlohu v jazyku Python. Objavila sa len jedna malá chyba pri určovaní podmienky pre zľavu. Naopak, potešila nás aj dobrovoľná kontrola veľkosti obrázkov a originálne spôsoby práce so zoznamom v Pythone. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |