Autorské riešenie
[stiahni imp : py]

  • Počet riešiteľov: 1 / 1 = 100 %

  • Úspešnosť riešenia: 5 / 6 = 83 %

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.

Riadok so 4 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.

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.