Autorské riešenie
[stiahni py]

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

  • Úspešnosť riešenia: 4,625 / 5 = 92,5 %

Podľa zadania úlohy máme vytvoriť funkciu na vykreslenie polepu vznášadla šesťuholníkového tvaru, pričom každú vrstvu polepu tvoria kruhy s rovnakou farbou výplne. Táto funkcia by mala mať tri vstupné parametre: počet šesťuholníkových vrstiev, veľkosť kruhov (ich priemer) a zoznam striedajúcich sa farieb jednotlivých vrstiev.

Celý polep

Analýzou ilustračného obrázka vidíme, že prvá vrstva obsahuje 1 kruh, druhá 1*6, tretia 2*6 ... n-tá vrstva (n-1)*6 kruhov.

Pozrime sa na jednu vrstvu. Na obrázku dole je zobrazená štvrtá vrstva. Na jej vykreslenie potrebujeme šesťkrát vykresliť tri kruhy v rade za sebou a otočiť sa vľavo o 60 stupňov.

Vrstva polepu

Vo všeobecnosti na vykreslenie n-tej vrstvy potrebujeme šesťkrát vykresliť n - 1 kruhov v rade za sebou a otočiť sa vľavo o 60 stupňov. Funkcia kresli_vrstvu na vykreslenie jednej vrstvy môže vyzerať napr. nasledovne:

def kresli_vrstvu(poradie_vrstvy, velkost, farba):
    for _ in range(6):
        for _ in range(poradie_vrstvy):
            turtle.forward(velkost)
            turtle.dot(velkost, farba)
        turtle.left(60)

Výsledná funkcia kresli_navrh s tromi parametrami (počet vrstviev, priemer kruhu, zoznam farieb) spolu s pomocnými funkciami kresli_vrstvu a posun môže vyzerať napr. nasledovne:

import turtle


def kresli_vrstvu(poradie_vrstvy, velkost, farba):
    for _ in range(6):
        for _ in range(poradie_vrstvy):
            turtle.forward(velkost)
            turtle.dot(velkost, farba)
        turtle.left(60)


def posun(velkost):
    turtle.left(60)
    turtle.forward(-velkost)
    turtle.right(60)


def kresli_navrh(pocet_vrstiev, velkost, farby):
    turtle.dot(velkost, farby[0])
    posun(velkost)
    for vrstva in range(1, pocet_vrstiev):
        farba = farby[vrstva % len(farby)]
        kresli_vrstvu(vrstva, velkost, farba)
        posun(velkost)


turtle.penup()
kresli_navrh(7, 50, ['pink', 'orchid', 'mediumpurple','cornflowerblue'])
turtle.mainloop()

Táto úloha je zameraná na:

  • použitie stratégie riešenia problémov - dekompozíciu problému na podproblémy a hľadanie vzorov.

  • precvičenie príkazov volania funkcií s parametrami, vnorených cyklov for, príkazov korytnačej grafiky.

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

Do riešenia úlohy sa zapojili 4 tímy z kategórie EXPERT. Plný počet bodov za svoje riešenie získali tímy kartetura, procrastinoters a raketak, ktorým srdečne gratulujeme. Chválime zmysluplné komentáre v riešeniach tímov procrastinoters a raketak.

V riešeniach sme zaregistrovali nasledovné nedostatky, vychádzajúce najčastejšie z nedôslednej analýzy problému:

  • nesprávne zredukovanie riešenia problému len na dva parametre - počet vrstiev a veľkosť kruhu, parameter so zoznamom farieb chýbal a farby sa generovali náhodne bez ošetrenia ich pravidelného striedania sa,

  • vykreslenie nesprávneho počtu vrstiev (o jednu navyše).