Autorské riešenie
Pri porovnaní dvoch kníh je dôležité si uvedomiť, že celkový počet znakov v knihe vypočítame ako súčin troch hodnôt: počtu strán, počtu riadkov na strane a priemerného počtu znakov v riadku. Z tohto vzorca je ľahko vidieť, že kniha, ktorá má viac strán, nemusí mať automaticky aj viac znakov. Ak však máme vypočítané hodnoty celkového počtu znakov v dvoch knihách, sme už schopní tieto knihy rovnocenne porovnať (keďže v zadaní je spomenuté, že uvažujeme iba knihy, ktoré neobsahujú obrázky). Nemôžeme však zabudnúť ani na prípad, že oba knihy majú rovnaký počet znakov. Túto podmienku je potrebné tiež špeciálne zahrnúť do riešenia. Nasledujú možné riešenia v jazyku Imagine Logo a Python.
;Imagine logo
viem porovnaj :nazov1 :strany1 :riadky1 :znaky1 :nazov2 :strany2 :riadky2 :znaky2 urobTu "celkovoZnaky1 :strany1*:riadky1*:znaky1 urobTu "celkovoZnaky2 :strany2*:riadky2*:znaky2 ak (:celkovoZnaky1 = :celkovoZnaky2) [vysledok "|Obe knihy majú rovnaký počet znakov|] ak2 (:celkovoZnaky1 > :celkovoZnaky2) [vysledok :nazov1] [vysledok :nazov2] koniec viem start ; Načítam údaje o prvej knihe píš "|Zadajte názov prvej knihy:| urobTu "nazov1 čítajSlovo píš "|Zadajte počet strán prvej knihy:| urobTu "strany1 čítajSlovo píš "|Zadajte počet riadkov na jednej strane prvej knihy:| urobTu "riadky1 čítajSlovo píš "|Zadajte počet znakov v jednom riadku prvej knihy:| urobTu "znaky1 čítajSlovo ; Načítam údaje o druhej knihe píš "|Zadajte názov druhej knihy:| urobTu "nazov2 čítajSlovo píš "|Zadajte počet strán druhej knihy:| urobTu "strany2 čítajSlovo píš "|Zadajte počet riadkov na jednej strane druhej knihy:| urobTu "riadky2 čítajSlovo píš "|Zadajte počet znakov v jednom riadku druhej knihy:| urobTu "znaky2 čítajSlovo píš "|Názov knihy s väčším počtom znakov je:| píš porovnaj :nazov1 :strany1 :riadky1 :znaky1 :nazov2 :strany2 :riadky2 :znaky2 koniec
#Python
def porovnaj(nazov1,strany1,riadky1,znaky1,nazov2,strany2,riadky2,znaky2): ''' :param údaje o dvoch knihách :type nazvy: str, ostatne: int :return nazov knihy s väčším počtom znakov :rtype: str ''' celkovoZnaky1 = strany1*riadky1*znaky1 celkovoZnaky2 = strany2*riadky2*znaky2 if celkovoZnaky1==celkovoZnaky2: return 'Obe knihy majú rovnaký počet znakov' else: if celkovoZnaky1 > celkovoZnaky2: return nazov1 else: return nazov2 nazov1 = input('Zadajte názov prvej knihy: ') strany1 = int(input('Zadajte počet strán prvej knihy: ')) riadky1 = int(input('Zadajte počet riadkov na jednej strane prvej knihy: ')) znaky1 = int(input('Zadajte počet znakov v jednom riadku prvej knihy: ')) nazov2 = input('Zadajte názov druhej knihy: ') strany2 = int(input('Zadajte počet strán druhej knihy: ')) riadky2 = int(input('Zadajte počet riadkov na jednej strane druhej knihy: ')) znaky2 = int(input('Zadajte počet znakov v jednom riadku druhej knihy: ')) print('Názov knihy s väčším počtom znakov je: ') print(porovnaj(nazov1,strany1,riadky1,znaky1,nazov2,strany2,riadky2,znaky2)) input('stlac ENTER') Vaše zaujímavé riešenia a najčastejšie chyby Všetky tímy riešili úlohu v jazyku Imagine, väčšinou úspešne. Tím KUBISTA+MACEK vytvoril aj grafické prostredie pre porovnávanie kníh:
Medzi najčastejšie nedostatky patrilo chýbajúce ošetrenie prípadu, v ktorom sa počet znakov v oboch knihách rovná. V niektorých riešeniach sa objavili aj nedostatky pri zostavení vzorca, prípadne pri používaní príkazu ak. V jednom riešení chýbali názvy kníh, s ktorými sa síce nepracuje vo vzorci, ale používajú sa pri záverečnom výpise. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |