Autorské riešenie
[stiahni imp : py]

  • Počet riešiteľov: 12 / 23 = 52%

  • Úspešnosť riešenia:  4,3 / 5 = 87%

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:

žiacke riešenie

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.