Autorské riešenie
Hraciu dosky hry Mlyn tvoria štvorce, úsečky a kruhy. Rozložme si teda úlohu na opakujúce sa časti. Začnime troma štvorcami rôznej veľkosti. Dĺžka strany prostredného štvorca je dvakrát väčšia ako dĺžka strany najmenšieho štvorca. Dĺžka strany najväčšieho štvorca je trikrát väčšia ako dĺžka strany najmenšieho štvorca. Vo vrcholoch štvorca sa nachádzajú malé kruhy. Ostáva nám vykresliť úsečky, ktoré spájajú stredy strán jednotlivých štvorcov. Na miestach, v ktorých sa tieto úsečky pretínajú so štvorcami, budú tiež vykreslené malé kruhy. Naše riešenie môžeme doplniť parametrom, pomocou ktorého určíme dĺžku strany najväčšieho štvorca. Nasledujú možné riešenia v jazyku Imagine Logo a Python.
;Imagine logo
viem stvorec :strana :velkostBodky ph vz :strana/2 vl 90 do :strana/2 vp 90 pd opakuj 4[ do :strana bod :velkostBodky vp 90 ] ph vp 90 do :strana/2 vl 90 do :strana/2 koniec viem doska :dlzka znova urobTu "velkostBodky :dlzka/25 stvorec :dlzka :velkostBodky stvorec :dlzka/6*4 :velkostBodky stvorec :dlzka/6*2 :velkostBodky opakuj 4 [ ph do :dlzka/6 pd bod :velkostBodky do :dlzka/6 bod :velkostBodky do :dlzka/6 bod :velkostBodky ph vz :dlzka/2 pd vp 90 ] koniec koniec
#python
import turtle kor = turtle.Turtle(); plocha = turtle.Screen(); # vykresli stvorec, ktory vo svojich vrcholoch vykresli bodku velkosti velkostBodky def stvorec(strana,velkostBodky): ''' :param strana - strana stvorca, velkostBodky - velkost bodky :type float :return :rtype: ''' kor.penup() kor.back(strana/2) kor.left(90) kor.forward(strana/2) kor.right(90) kor.pendown() for i in range(4): kor.forward(strana) kor.dot(velkostBodky) kor.right(90) kor.penup() kor.right(90) kor.forward(strana/2) kor.left(90) kor.forward(strana/2) # vykresli celu dosku def doska(dlzka): ''' :param dlzka - velkost hracej plochy :type float :return :rtype: ''' # vykreslim tri sustredne stvorce, velkost bodky je 1/25 zo strany najvacsieho stvorca velkostBodky = dlzka/25 stvorec(dlzka,velkostBodky) stvorec(dlzka/6*4,velkostBodky) stvorec(dlzka/6*2,velkostBodky) # vykreslim ciary spajajuce stredy stran stvorcov, v priesecnikoch nakreslim bodky for i in range(4): kor.penup() kor.forward(dlzka/6) kor.pendown() kor.dot(velkostBodky) kor.forward(dlzka/6) kor.dot(velkostBodky) kor.forward(dlzka/6) kor.dot(velkostBodky) kor.penup() kor.back(dlzka/2) kor.pendown() kor.right(90) kor.ht() doska(200) plocha.mainloop(); Vaše zaujímavé riešenia a najčastejšie chyby Úlohu riešilo 19 tímov, všetky v jazyku Imagine. Väčšina tímov úlohu vyriešila správne. Objavilo sa niekoľko nepresností vykreslením čiar, ktoré vyčnievali z dosky. Jeden tím naprogramoval riešenie, ktoré namiesto štvorcov vykreslilo 4 rovnako opakujúce sa časti dosky: viem doska opakuj 4 [ ph vz 25 pd bod 5 vp 90 do 25 bod 5 vz 25 vl 180 do 25 bod 5 vz 25 vp 90 vz 25 vp 90 do 50 bod 5 vz 100 bod 5 do 50 bod 5 vl 90 vz 25 bod 5 vp 90 do 75 bod 5 vz 150 bod 5 do 75 vl 90 ph do 75 vp 90 ] koniec |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |