Autorské riešenie
[stiahni imp : py]

  • Počet riešiteľov: 19 / 20 = 95 %

  • Úspešnosť riešenia:  2,21 / 4 = 55 %

Kým začneme vytvárať program na kreslenie kľúčika, pozrime sa na to, aké vlastnosti by kľúčik mal mať. Podľa zadania platí, že "Každý kľúč ma svoju veľkosť a nejakú štvor-kombináciu zúbkov a medzier." O farbe kľúčika nemusíme uvažovať alebo ju necháme náhodnú.

Zaujímať nás bude len veľkosť a štvor-kombinácia zúbkov a medzier. Veľkosťou určíme napr. veľkosť zúbka/medzery a tým aj veľkosť celého kľúča. Štvor-kombináciu zúbkov a medzier je výhodné zadať ako štvorprvkový zoznam 0 (=medzera) a 1 (=zúbok).

Riešenie úlohy je výhodné rozdeliť na menšia časti. Vytvorme si procedúry/funkcie na kreslenie zúbkov a medzier. Môžu vyzerať napr. takto:

;Imagine logo
viem zub :dlzka
  polygon [
    do :dlzka
    vp 30
    do :dlzka
    vp 120
    do :dlzka
    vp 30
    do :dlzka
    vp 90
    do :dlzka
    vp 90
  ]
koniec

viem medzera :dlzka
  polygon [
    opakuj 4 [
      do :dlzka
      vp 90
    ]
  ]
koniec

#Python
def
medzera(dlzka):
    '''
    Nakresli medzeru so zadanou velkostou v strukture klucika

    :param dlzka: velkost medzery
    :type dlzka: float
    :rtype: None
    '''

    kor.begin_fill()
    for i in range(4):
        kor.forward(dlzka)
        kor.right(90)
    kor.end_fill()

def zub(dlzka):
    '''
    Nakresli zub so zadanou velkostou v strukture klucika

    :param dlzka: velkost zubu
    :type dlzka: float
    :rtype: None
    '''

    kor.begin_fill()
    kor. forward(dlzka)
    kor.right(30)
    kor.forward(dlzka)
    kor.right(120)
    kor.forward(dlzka)
    kor.right(30)
    kor.forward(dlzka)
    kor.right(90)
    kor.forward(dlzka)
    kor.right(90)
    kor.end_fill()

Teraz môžeme vytvoriť procedúru/funkciu na kreslenie celého kľúčika.

;Imagine logo
viem klucik :dlzka :zuby
  urobTu "zuby vlozPr 0 :zuby
  urobTu "zuby vlozPr 0 :zuby

  nechFP ?
  vz :dlzka / 2
  opakuj pocet :zuby [
    ak2 prvok pocitadlo :zuby = 1 [
      zub :dlzka
    ][
      medzera :dlzka
    ]
    vp 90
    do :dlzka
    vl 90
  ]
  vl 90
  do :dlzka * pocet :zuby
  vp 90
  do :dlzka / 2
  bod 4 * :dlzka
  nechFP "biela
  bod :dlzka
koniec

#Python
def
klucik(dlzka, zuby):
    '''
    Nakresli klucik so zadanou velkostou a so zadanou strukturou zubov

    :param dlzka: velkost klucika zadana ako velkost zubu
    :type dlzka: float
    :param zuby: struktura zubov, 1 = zub, 0 = medzera
    :type zuby: list
    :rtype: None
    '''

    zuby = [0, 0] + zuby

    farba = (rnd(), rnd(), rnd())
    kor.fillcolor(farba)
    kor.color(farba)

    kor.back(dlzka / 2)

    for i in zuby:
        if i == 1:
            zub(dlzka)
        else:
            medzera(dlzka)
        kor.right(90)
        kor.forward(dlzka)
        kor.left(90)
    kor.left(90)
    kor.forward(dlzka * len(zuby))
    kor.right(90)
    kor.forward(dlzka / 2)
    kor.dot(4 * dlzka)
    kor.dot(dlzka, "white")

Všimnime si, že v oboch prípadoch sme do zoznamu zúbkov a medzier na začiatok vložili dve nuly (= dve medzery). Má to dve výhody. Zúbky a medzery môžeme začať vykresľovať od budúcej dierky kľúčika a zúbkovaná časť bude spojená s hlavičkou kľúčika.

Vaše zaujímavé riešenia a najčastejšie chyby

Najčastejšou chybou bolo, že kombináciu zúbkov a medzier ste nezadali ako parameter procedúry/funkcie kľúčik. Buď ste ich vykresľovali napevno alebo náhodne. Niektorí z vás neuvažovali ani o možnosti zadať veľkosť kľúčika.