Autorské riešenie
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 #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:
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. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |