Autorské riešenie
Využijeme pomocné procedúry trojuholník, riadok a pyramída. Riadok je procedúra, ktorá vykreslí riadok trojuholníkov, ako parameter má farbu, dĺžku strany a počet trojuholníkov. Na obrázku je výstup procedúry/funkcie riadok so 4 modrými pyramídami.
;Imagine logo
viem trojuholnik :strana :farba polygon[ vl 30 nechfv :farba opakuj 3[ do :strana vp 120 ] ] koniec viem riadok :pocet :strana :farba opakuj :pocet[ trojuholnik :strana :farba ph vl 90 do :strana vp 90 pd ] ph vp 90 do :pocet*:strana vl 90 koniec viem pyramida :pocetRiadkov :strana :prvaFarba :druhaFarba :tretiaFarba opakuj :pocetRiadkov [ ak2 zvysok pocitadlo 3=1 [ riadok pocitadlo :strana :prvaFarba ][ ak2 zvysok pocitadlo 3=2 [ riadok pocitadlo :strana :druhaFarba ][ riadok pocitadlo :strana :tretiaFarba ] ] vp 30 do :strana vl 30 ] vp 30 vz :pocetRiadkov*:strana vl 30 koniec
#python def trojuholnik(strana, farba): ''' Nakresli trojuholnik, so zadanou dlzkou strany a farbou vyplne :param strana: dlzka strany trojuholnika :type strana: int :param farba: farba vyplne trojuholnika :type farba: Color ''' kor.left(30) kor.pen(fillcolor=farba) kor.begin_fill() for i in range(3): kor.forward(strana) kor.right(120) kor.right(30) kor.end_fill() def riadok(pocet, strana, farba): ''' Nakresli riadok so zadanym poctom trojuholnikov, so zadanou dlzkou strany a farbou vyplne :param pocet: pocet trojuholnikov :type pocet: int :param strana: dlzka strany trojuholnika :type strana: int :param farba: farba vyplne trojuholnika :type farba: Color ''' for i in range (pocet): trojuholnik(strana, farba) kor.penup() kor.left(90) kor.forward(strana) kor.right(90) kor.pendown() kor.penup() kor.right(90) kor.forward(pocet*strana) kor.left(90) kor.pendown() def pyramida(pocetRiadkov, strana,prvaFarba, druhaFarba, tretiaFarba): ''' Nakresli obrazec so zadanym poctom riadkov,stranou trojuholnika a pravidelne striedajucimi sa 3 farbami vyplne trojuholnika :param pocetRiadkov: pocet riadkov :type pocetRiadkov: int :param strana: dlzka strany trojuholnika :type strana: int :param prvaFarba: prva farba vyplne trojuholnikov :type prvaFarba: Color :param druhaFarba: druha farba vyplne trojuholnikov :type druhaFarba: Color :param tretiaFarba: tretia farba vyplne trojuholnikov :type tretiaFarba: Color ''' for i in range (1, pocetRiadkov+1): if((i%3)==1): riadok(i, strana, prvaFarba) else: if((i%3)==2): riadok(i, strana, druhaFarba) else: if((i%3)==0): riadok(i, strana, tretiaFarba) kor.right(30) kor.forward(strana) kor.left(30) kor.right(30) kor.backward(pocetRiadkov*strana) kor.left(30) V procedúre pyramída voláme zadaný počet krát procedúru riadok. V každom riadku nakreslíme o jeden trojuholník viac ako v predchádzajúcom - zväčšíme parameter počet. Farby, ktoré prídu ako parameter striedame podla poradia. Využíjeme pritom funkciu zvyšok - modulo. Podľa toho, či je zvyšok 1, 2 alebo 0 striedame farby v pyramíde = nastavujeme parameter farby procedury riadok. Pri každej z procedúr/funkcií musíme dbať na to, aby sa korytnačka vrátila na pôvodné miesto. Uľahčíme si tak ďalšie programovanie. Na obrázku sa nachádza pyramída výšky 5.
Následne nakreslíme celú pyramídu otáčaním korytnačky o 60 stupňov (360/6 - máme šesťuholník).
;Imagine logo
viem trojobrazec :pocetRiadkov :strana :farba1 :farba2 :farba3 opakuj 6[ pyramida :pocetRiadkov :strana :farba1 :farba2 :farba3 vp 60 ] koniec
#python def trojObrazec(dlzka, pocetRiadkov, farba1, farba2, farba3): ''' Nakresli obazec so 6 rovnakych pyramid, so zadanym poctom riadkov, stranou trojuholnika a pravidelne striedajucimi sa 3 farbami vyplne trojuholnika :param pocetRiadkov: pocet riadkov :type pocetRiadkov: int :param strana: dlzka strany trojuholnika :type strana: int :param prvaFarba: prva farba vyplne trojuholnikov :type prvaFarba: Color :param druhaFarba: druha farba vyplne trojuholnikov :type druhaFarba: Color :param tretiaFarba: tretia farba vyplne trojuholnikov :type tretiaFarba: Color ''' for i in range (6): pyramida(pocetRiadkov, dlzka,farba1, farba2, farba3 ) kor.right(60) Vaše zaujímavé riešenia a najčastejšie chyby/strong> V jedinom odovzdanom riešení bol veľmi pekne okomentovaný zdrojový kód a trojuholníky boli kreslené po jednodlitvých riadkoch - postupne sa tak zväčšuje celý šesťuholník, čo je úplne iný koncept ako vzorové riešenie, avšak chybou bolo že farby neboli ako parameter. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |