Autorské riešenie Pri výpočte výslednej sumy musíme zohľadniť cenu za dopravu a ceny včítane zliav za jednotlivé druhy tovaru. Postup výpočtu výslednej ceny pre jednotlivé druhy tovaru je v podstate pre každý druh tovaru rovnaký. Líši sa len počtom kusov a cenou za kus. Na výpočet ceny jedného druhu tovaru je teda výhodné si vytvoriť procedúru, napr. cenaZaTovar. Procedúra cenaZaTovar má dva parametre :kusy a :cenaZaKus. Najskôr si vypočítame cenu za všetky kusy bez akejkoľvek zľavy (:kusy * :cenaZaKus). Ak sme nakúpili viac kusov ako je hranica1, tak od tejto ceny potom odpočítame 10 % zľavu, ktorú sme dostali na kusy nad hranicou 1 ((:kusy-:hranica1) * :cenaZaKus * 0.1). Akpočet kusov je väčší ak ohranica 2, tak od tejto ceny ešte odpočítame 10 % zľavu, ktorú sme dostali na kusy nad hranicou 2 ((:kusy-:hranica2) * :cenaZaKus * 0.1). Je síce pravda, že na tieto kusy je zľava 20 %, ale uvedomme si, že na tieto kusy sme si už raz 10 % zľavu uplatnili. Viac zrejme napovie obrázok: Výsledná procedúra vyzerá nasledovne:
viem cenaZaTovar :kusy :cenaZaKus
urobTu "cena :kusy * :cenaZaKus ak :kusy > :hranica1 [ urobTu "cena :cena - (:kusy-:hranica1) * :cenaZaKus * 0.1 ak :kusy > :hranica2 [ urobTu "cena :cena - (:kusy-:hranica2) * :cenaZaKus * 0.1 ] ] koniec Ďalšia možnosť ako vypočítať cenu za daný druh tovaru je nasledovná. Vypočítame cenu za tie kusy tovaru, na ktoré nie je žiadna zľava (:kusy * :cenaZaKus). K nej pripočítame cenu za tie kusy, na ktorú máme zľavu 10 % a cenu za tie kusy, na ktoré máme zľavu 20 %.
Procedúra cenaZaTovar môže vyzerať teda aj takto:
viem cenaZaTovar :kusy :cenaZaKus
ak2 :kusy <= :hranica1 [ urobTu "cena :kusy * :cenaZaKus ][ urobTu "cena :hranica1 * :cenaZaKus ak2 :kusy <= :hranica2 [ urobTu "cena :cena + (:kusy - :hranica1) * :cenaZaKus * 0.9 ][ urobTu "cena :cena + (:hranica2 - :hranica1) * :cenaZaKus * 0.9 ak :kusy > :hranica2 [ urobTu "cena :cena + (:kusy - :hranica2) * :cenaZaKus * 0.8 ] ] ] vysledok :cena koniec Musíme si však dať pozor na to, či počet kusov prekročil zadané hranice alebo nie. Počítať môžeme len s tým počtom kusov, ktoré si zákazník objednal. Nakoniec sa pozrime na procedúru vypocitajCenu. Jej naprogramovanie je už v podstate jednoduché. Spočíta cenu dopravy a ceny sa jednotlivé druhy tovaru.
viem vypocitajCenu :doprava
cenaCelkom'nechHodnota :doprava + (cenaZaTovar kusy1'hodnota cena1'hodnota) + (cenaZaTovar kusy2'hodnota cena2'hodnota) + (cenaZaTovar kusy3'hodnota cena3'hodnota) koniec Vaše zaujímavé riešenia a najčastejšie chyby Úlohu riešilo 10 tímov, dva tímy túto úlohu vyriešili správne.
|
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |