Autorské riešenie
Kreslenie pyramídy si rozdeľme na menšie časti. Pyramídu budeme kresliť z radu polkružnúc a samotný rad vykreslíme z niekoľkých polkružníc.
Na kreslenie pyramídy použijeme pomocnú procedúru/funkciu rad,
ktorá vykreslí rad správne farebne odlíšených polkružníc.
Procedúrou/funkciou rad teda vieme vykresliť rad správne farebne odlíšených polkružníc - poschodie pyramídy. Ako parametre dostávame polomer polkružnice, počet polkružníc v rade a poradie. Parameter poradie nám bude určovať farbu polkružnice. Procedúrou/funkciou kresli_pyramidu vieme vykresliť pyramídu s určeným počtom poschodí s požadovanými vlastnosťami. Pyramída sa vykresľuje postupne po poschodiach od najspodnejšieho po najvrchnejšie, zľava doprava. Vykreslí sa rad - poshodie, korytnačka sa presunie na správne miesto, kde začína kresliť ďalšie poschodie. Toto sa opakuje, kým sa nevykreslia všetky poschodia. Po vykreslení všetkých poschodí sa korytnačka vráti na svoje pôvodné miesto - miesto, kde sa nachádzala predtým, ako bola zavolaná procedúra/funkcia kresli_pyramidu.
;Imagine logo
viem kresli_pyramidu :poschodi :r urobTu "poradie 1 urobTu "pocet :poschodi ph kým [:pocet >0] [ rad :r :pocet :poradie vp 90 do :r vl 90 do :r urobTu "poradie :poradie+:pocet urobTu "pocet :pocet-1 ] vz :r*:poschodi vl 90 do :r*:poschodi vp 90 pd koniec viem rad :r :pocet :poradie vp 90 do :r vl 90 urobTu "poradie :poradie opakuj :pocet[ ak2 zvyšok :poradie 2 = 0 [ nechFP "modrá ] [ nechFP "červená ] obrysElipsy[(2*:r) (2*:r) -90 90] vp 90 do (2*:r) vl 90 urobTu "poradie :poradie+1 ] vl 90 do :r*(:pocet*2+1) vp 90 koniec
# Python import turtle pero = turtle.Turtle() tabula = turtle.Screen() def rad(r, pocet, poradie): p = poradie for i in range(pocet): if p % 2 == 0: pero.pencolor("blue") else: pero.pencolor("red") pero.circle(-r, 180) pero.right(180) p = p - 1 pero.left(90) pero.penup() pero.forward(r * pocet * 2) pero.pendown() pero.right(90) def kresli_pyramidu(poschodi, r): poradie = 1 pocet = poschodi while (pocet > 0): rad(r, pocet, poradie) pero.penup() pero.right(90) pero.forward(r) pero.left(90) pero.forward(r) poradie = poradie + pocet pocet = pocet - 1 pero.pendown() pero.penup() pero.backward(r * poschodi) pero.left(90) pero.forward(r * poschodi) pero.right(90) pero.pendown() Vaše zaujímavé riešenia a najčastejšie chyby
Zaujímavým riešením bolo riešenie, kde sa pyramída vykresľovala rekurzívne vykresľovaním poschodia. |
|||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |