Autorské riešenie
[stiahni imp : py]

  • Počet riešiteľov: 7 / 18 =  39%

  • Úspešnosť riešenia: 3,7 / 5 = 74%

Pri riešení úlohy vychádzame z rovností: 1 stupeň = 60 minút a 1 minúta = 60 sekúnd.

V procedúre, resp. funkcii st_mi_se2st vypočítame celkovú hodnotu stupňov tak, že zadané počty stupňov, minút a sekúnd prevedieme na stupne a spočítame ich.

V procedúre, resp. funkcii st2st_mi_se postupne vypočítame stupne, minúty a sekundy. Najprv z hodnoty stupňov vyjadrenej desatinným číslom určíme stupne ako jeho celú časť. Z desatinnej časti stupňov vynásobením číslom 60 dostaneme hodnotu minút vyjadrených ako desatinné číslo. Minúty určíme ako celú časť tohto desatinného čísla a sekundy určíme ako 60-násobok desatinnej časti počtu minút.

Riešenie úlohy v jazykoch Imagine Logo a Python by mohlo vyzerať napríklad takto:

;Imagine Logo

viem st_mi_se2st :stupne :minuty :sekundy
  výsledok :stupne + :minuty / 60 + :sekundy / 3600
koniec

viem st2st_mi_se :stupne1
  urobTu "stupne celá :stupne1
  urobTu "minuty1 (:stupne1 - :stupne) * 60
  urobTu "minuty celá :minuty1
  urobTu "sekundy (:minuty1 - :minuty) * 60
  výsledok (zoznam :stupne :minuty :sekundy)
koniec

#Python

def st_mi_se2st(stupne, minuty, sekundy):
    '''
    Vypocita stupne zo zadanych stupnov, minut a sekund

    :param stupne:  stupne
    :type  stupne:  int
    :param minuty:  minuty
    :type  minuty:  int
    :param sekundy: sekundy
    :type  sekundy: float
    :rtype: float
    '''
    return stupne + minuty / 60 + sekundy / 3600

def st2st_mi_se(stupne1):
    '''
    Vypocita stupne, minuty a sekundy zo zadanych stupnov

    :param stupne:  stupne
    :type  stupne:  float
    :rtype: int, int, float
    '''
    stupne  = int(stupne1)
    minuty1 = (stupne1 - stupne) * 60
    minuty  = int(minuty1)
    sekundy = (minuty1 - minuty) * 60
    # ine kompaktnejsie riesenie
    # minuty, sekundy = divmod(stupne1*3600, 60)
    # stupne, minuty = divmod(minuty, 60)
    return stupne, minuty, sekundy

print('Naša škola Prírodovedecká fakulta UPJŠ v Košiciach, Jesenná 5, '
      'Košice má GPS súradnice:',
      st_mi_se2st(48, 43, 44.00),',',
      st_mi_se2st(21, 14, 53.64))
print('Naša škola Prírodovedecká fakulta UPJŠ v Košiciach, Jesenná 5, '
      'Košice má GPS súradnice:',
      st2st_mi_se(48.728888),',',
      st2st_mi_se(21.248232))

vyber = 1
while vyber != 0:
    vyber = int(input("Pre prevod st_mi_se2st zadaj 1. "
                      "Pre prevod st2st_mi_se zadaj 2. "
                      "Pre ukončenie zadaj 0: "))
    print(vyber)
    if vyber == 1:
        stupne  = int(input("Zadaj stupne :"))
        minuty  = int(input("Zadaj minúty :"))
        sekundy = float(input("Zadaj sekundy :"))
        print(st_mi_se2st(stupne, minuty, sekundy))
    if vyber == 2:
        stupne1 = float(input("Zadaj stupne :"))
        s, m, y = st2st_mi_se(stupne1)
        print("{}° {}' {}''".format(s, m, y))
 

Táto súťažná úloha je zameraná na použitie algoritmu prevodu medzi stupňami, minútami a sekundami, na prácu s procedúrami s výstupom, resp. funkciami s parametrami, príkazmi priradenia, štandardnej funkcie celá, resp. int.

Vaše zaujímavé riešenia a najčastejšie chyby

Do riešenia tejto úlohy pre kategóriu EXPERT sa zapojilo 7 z 22 prihlásených tímov. Z toho 5 tímov riešilo úlohu v jazyku Imagine Logo a 2 tímy v jazyku Python. Celkový priemer úspešnosti odovzdaných riešení bol 3,7 bodu z maximálneho počtu 5 bodov (74,3% úspešnosť).

V riešeniach súťažiacich sme zaregistrovali nasledovné záležitosti:

  • namiesto štandardnej funkcie CELÁ (v jazyku Imagine Logo) dvaja súťažiaci použili na výpočet celej časti čísla cyklus s postupne sa zvyšujúcou hodnotou celočíselnej premennej,
  • v riešeniach v jazyku Python súťažiaci použili na výpočet reťazcové funkcie, pričom stačilo použiť štandardné aritmetické operátory (-, *) a funkciu INT,
  • niektorí súťažiaci neodovzdali (z nepozornosti či nevedomosti) tretiu časť zadania - adresu školy a jej GPS súradnice

Pri výpočtoch v jazyku Imagine Logo odporúčame použiť lokálne premenné, nie globálne, t.j. použiť na priradenie príkaz UROBTU, nie príkaz UROB.