Autorské riešenie
[stiahni imp : py]                                       

  • Počet riešiteľov: 29 / 34 = 85 %

  • Úspešnosť riešenia: 3,26 / 6 = 54,3 %                   

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.

Na kreslenie polkružnice v procedúre kresli_pyramidu (Imagine logo) použijeme príkaz obrysElipsy, ktorého prvé dva parametre sú dĺžky oboch poloosí elipsy (keďže chceme kresliť polkružnicu, tak tieto parametre zadáme tak, ako pre kružnicu, teda oba rovnaké) a ďalšie dva parametre sú stupne, odkiaľ a pokiaľ sa má kresliť oblúk, vľavo od korytnačky sú záporné hodnoty, vpravo sú kladné.

Na kreslenie polkružnice vo funkcii kresli_pyramidu (Python) použijeme príkaz circle, ktorý je veľmi podobný príkazu obrysElipsy, avšak, ako prvý parameter má polomer kružnice a druhým parametrom počet stupňov kružnicového oblúka. Aby sme kreslili polkružnicu z miesta, kde sa nachádza korytnačka, doprava, tak použijeme fintu - "záporný" polomer, inak by sme polkružnicu vykresľovali z miesta korytnačky doľava.

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.

pyramida
Obrázok pyramídy, ktorá je kreslená zľava doprava, zdola hore.

;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.
Častou chybou bolo nesprávne farebné rozlíšenie polkružníc, správne mali by farebne rozlíšené párne a nepárne polkružnice podľa poradia, v ktorom sa vykresľovali v rámci pyramídy. Ukázalo sa tiež viac zlozvykov, ako napríklad používanie globálnych premenných, keď to nie je potrebné, zmazanie kresliacej plochy v tele procedúry/funkcie pred začatím samotného kreslenia, kreslenie na pevných súradniciach a podobne. Takmer nikto po kreslení pyramídy svoju korytnačku "neupratal", teda, kresliaca korytnačka by sa po vykonaní procedúry/funkcie mala vrátiť na miesto, na ktorom bola, keď bola daná procedúra/funkcia zavolaná. Vyskytli sa aj dve takmer identické riešenia, za čo bola udelená bodová sankcia.