Autorské riešenie
Riešenie úlohy pozostáva z dvoch častí:
Najprv vyriešíme prvú podúlohu. Na obrázku sú zachytené dve situácie. Hodiny vľavo sa budú ešte presypávať 60 minút a hodiny vpravo ešte x minút.
Plochy horných trojuholníkov oboch hodín sú umerné času, za ktorý sa majú presýpať. Na základe toho platí vzťah: Px / x = P60 / 60 Pre plochy rovnostranných trojuholníkov Px a P so stranami dx a d platí: Px = dx2 · √3 / 4 P60 = d2 · √3 / 4 Po dosadení týchto vzťahov a po úprave dostaneme: dx2 / x = d2 / 60 dx2 = d2 · x / 60 Podľa zadania hodiny ukazujú čas, ktorý uplynul, nie ktorý má ešte uplynúť. Preto posledný vzťah upravíme tak, aby tam vystupovala premenná t predstavujúca už uplynutý čas. Použijeme pri tom vzťah: x + t = 60, premennú dx nahradíme premennou dt a napokon po odmocnení dostaneme vzťah medzi uplynutým časom t a dlžkou strany dt vyfarbeného rovnostranného trojuholníka v hornej časti presýpacích hodín ukazujúcich čas t: dt = d · √(1 - t / 60) Druhou podúlohou je vykreslenie presýpacích hodín pre zadaný čas. Na prvom obrázku si môžme všimnúť určitú pravidelnosť pri zobrazení presýpacích hodín. Farebnému trojuholníku v hornej časti presýpacích hodín odpovedá rovnaký biely trojuholník v dolnej časti. Rovnako bielemu lichobežníku v hornej časti odpovedá farebný lichobežník v dolnej časti. Presýpacie hodiny s uvedeným časom vykreslíme pomocou 2 trojuholníkov v hornej a 2 trojuholníkov v dolnej časti nasledovným postupom:
Procedúry trojuholník (na vykreslenie rovnostranného trojuholníka so zadanou dĺžkou strany a zadanou farbou výplne), kresli (na vykreslenie celých presýpacích hodín) a hlavný program, môžu v jazyku Imagine Logo vyzerať napríklad takto: ;Imagine Logo A riešenie úlohy v jazyku Python môže vyzerať napríklad takto: #Python import turtle from math import sqrt kor = turtle.Turtle() plocha = turtle.Screen() def trojuholnik(dlzka, farba): ''' Nakresli trojuholnik so zadanou dlzkou strany a farbou vyplne :param dlzka: velkost strany trojuholnika :type dlzka: int :param farba: farba vyplne trojuholnika :type farba: str :rtype: None ''' kor.fillcolor(farba) kor.begin_fill() for _ in range(3): kor.forward(dlzka) kor.left(120) kor.end_fill() def kresli(dlzka, farba, minuty): ''' Nakresli presypacie hodiny so zadanou dlzkou strany, farbou vyplne a zadanym casom v minutach :param dlzka: velkost strany presypacich hodin :type dlzka: int :param farba: farba vyplne presypacich hodin :type farba: str :param minuty: cas, ktory maju ukazovat presypacie hodiny :type minuty: int :rtype: None ''' dlzka2 = dlzka * sqrt(1 - minuty / 60) kor.right(30) trojuholnik(dlzka, 'white') trojuholnik(dlzka2, farba) kor.right(180) trojuholnik(dlzka, farba) trojuholnik(dlzka2, 'white') kor.right(150) if __name__ == "__main__": velkost = int(input('Zadaj veľkosť presýpacích hodín (celé číslo > 0, napr. 240): ')) while (velkost <= 0): velkost = int(input('Zadaj veľkosť presýpacích hodín (celé číslo > 0, napr. 240): ')) zafarbenie = input('Zadaj farbu presýpacích hodín (napr. red, blue, green ...): ') cas = int(input('Zadaj čas (celé číslo od 0 do 60, napr. 45): ')) while (cas < 0) or (cas > 60) : cas = int(input('Zadaj čas (celé číslo od 0 do 60, napr. 45): ')) kor.left(90) kresli(velkost, zafarbenie, cas) kor.right(90) plocha.mainloop() Riešenie úlohy v Pythone sa mierne líši od riešenia v Imagine Logo lebo v korytnačej grafike v Pythone je počiatočné natočenie korytnačky na východ a v Imagine Logo je to na sever. Táto súťažná úloha je zameraná na použitie priamej úmery pri výpočte odpovedajúcej dĺžky strany rovnostranného trojuholníka, na precvičenie použitia procedúr s výstupom, resp. funkcií s parametrami, na precvičenie práce s príkazmi priradenia, opakovania a príkazov korytnačej grafiky. Vaše zaujímavé riešenia a najčastejšie chyby Do riešenia tejto úlohy pre kategóriu EXPERT sa zapojilo 8 tímov. Žiaden tím nezískal plný počet bodov. Súťažiaci dosiahli priemerný počet bodov 2,25 z možných 5 bodov. Len jeden tím riešil úlohu v jazyku Python. V riešeniach sme zaregistrovali nasledovné chyby:
|
|||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |