Autorské riešenie
Na začiatku je potrebné uvedomiť si, ako sa hýbu ručičky. Hodinová ručička je dlhá 50 bodov a pohne sa každých 15 minút, takže zakaždým sa pohne o 7.5 stupňa (=360 / (12 * 4)). Minútová ručička je dlhá 100 bodov a pohne sa každú minútu, vždy sa teda pohne o 6 stupňov (=360 / 60). Prvoplánové riešenie by mohlo byť asi také, že osobitne zistíme, kde sa nachádza každá ručička. Toto riešenie môže zlyhať v prípade, že sa ručičky prekrývajú (pozri obrázok a čas 01:05). V tomo prípade vidíme len minútovú ručičku. Najprv sa pokúsime zistiť natočenie minútovej ručičky. Postupne sa budeme otáčať o uhol 6 stupňov a zisťovať, či aj minútová ručička má rovnaké natočenie. Posunieme sa o 100 bodov od stredu a zistíme, či sa tam nachádza ručička (čierna farba bodu). Ak áno, potom si zapamätáme aktuálnu hodnotu počítadla o 1 menšiu, keďže počítadlo začína na 1. Tiež si zapamätáme hodnotu uhla tejto ručičky od začiatočnej polohy. Použijeme to v prípade, ak sa ručičky prekrývajú. Ak sa ručička na danom mieste nenachádzala, tak sa vrátime o 100 bodov nazad, otočíme sa o uhol 6 stupňov a zisťujeme ďalej. Neskôr zistíme, koľko je na ciferníku hodín. Postupujeme podobne, posúvame sa o 50 bodov. Avšak, ak natrafíme na čierny bod (nejakú ručičku), nemusí to nutne byť hodinová ručička. Preto sa posunieme ešte o 10 bodov a overíme si, či je to ozaj hodinová ručička (farba bodu biela). Ak áno, zapamätáme si jej uhol. Ak týmto spôsobom hodinovú ručičku neobjavíme, znamená to, že sa ručičky prekrývajú. To sme však už zabezpečili pamätaním si uhla minútovej ručičky. Ostáva nám už len prepočítať uhol hodinovej ručičky na hodiny. Na každú hodinu pripadá uhol 30 stupňov, takže to celočíselne vydelíme číslom 30. Na konci vrátime zoznam, ktorého prvkami budú hodiny a minúty.
Ručičky sa môžu prekrývať (napr.: v čase 01:05) alebo nemusia prekrývať (napr. v čase 10:06) ;Imagine logo
viem zisti_cas ph opakuj 60 [ do 100 ak farbaBodu = "cierna [ urobTu "minuta pocitadlo - 1 urobTu "hodinaUhol (pocitadlo - 1) * 6 ] vz 100 vp 6 ] opakuj 48 [ do 50 ak farbaBodu = "cierna [ do 10 ak farbaBodu = "biela [ urobTu "hodinaUhol (pocitadlo - 1) * 7.5 ] vz 10 ] vz 50 vp 7.5 ] urobTu "hodina cela :hodinaUhol / 30 vysledok (zoznam :hodina :minuta) pd koniec Vaše zaujímavé riešenia a najčastejšie chyby Túto úlohu riešili 2 tímy. Jeden tím sa rozhodol túto úlohu riešiť špekulantsky - pozmenil procedúru generujúcu čas, uložil si tam do globálnych premenných uhly ručičiek, a potom už v svojej procedúre tieto hodnoty prepočítal na hodiny a minúty a výsledok vypísal. Takéto riešenie bolo ohodnotené nulovým počtom bodov, keďže predpripravené procecdúry nemali byť pozmenené. Druhý tím túto úlohu riešil rekurzívne, síce v niekoľkých prípadoch toto riešenie nevracalo správne výsledky, no bol to veľmi zaujímavý prístup. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |