Autorské riešenie
Prvým a zároveň kľúčovým krokom pri riešení tejto úlohy je uvedomiť si, že hoci výsledný obrazec pozostáva z trojuholníkov, základná pečiatka (opakujúci sa vzor) má tvar obdĺžnika. Preto je potrebné určiť tento opakujúci sa prvok. Takýto základný vzor je znázornený na obrázku.
Po určení základného vzoru (pečiatky) by sme mali byť schopní tento vzor vykresliť. V našom prípade na to slúži funkcia opeciatkuj_vzor(dlzka), kde parameter dlzka predstavuje dĺžku strany trojuholníka. #Python def opeciatkuj_vzor(dlzka): pero.forward(dlzka / 2) pero.right(60) pero.forward(dlzka) pero.right(60) pero.forward(dlzka) pero.right(120) pero.forward(dlzka) pero.right(120) pero.forward(dlzka) pero.forward(-dlzka) pero.left(60) pero.forward(dlzka) pero.right(60) pero.forward(dlzka / 2) Takto vytvorený vzor následne pravidelne kopírujeme do riadkov a stĺpcov podľa zadaných parametrov, čím zabezpečíme aby sa vzor opakoval tak, že pokryje celú plochu. Na tento účel využijeme dva vnorené cykly. Používame funkciu opeciatkuj(pocet_x, pocet_y, dlzka), kde parameter pocet_x určuje počet opakovaní na osi x (počet stĺpcov), parameter pocet_y počet opakovaní na osi y (počet riadkov) a parameter dlzka udáva veľkosť jednej hrany trojuholníka. Po vykreslení jedného stĺpca vzorov je potrebné vrátiť korytnačku na začiatok stĺpca a následne ju posunúť doprava, aby mohla začať vykresľovať ďalší stĺpec. Tento posun závisí od výšky rovnostranného trojuholníka, ktorú vypočítame ako sqrt(3) × dlzka . Po o dokončení celej mriežky sa korytnačka vráti na pôvodnú pozíciu. #Python def opeciatkuj(pocet_x, pocet_y, dlzka): for x in range(pocet_x): for y in range(pocet_y): opeciatkuj_vzor(dlzka) # vzor po stlpcoch # presun na ďalší stlpec pero.forward(-pocet_y * dlzka) pero.right(90) pero.penup() pero.forward(dlzka * 3 ** 0.5) # výška trojuholníka pero.left(90) pero.pendown() # návrat na pôvodnú pozíciu pero.left(90) pero.penup() pero.forward(dlzka * pocet_x * 3 ** 0.5) pero.right(90) pero.pendown() Cieľom úlohy bolo rozpoznať opakujúci sa vzor a naučiť sa rozložiť zložitejší problém na menšie podproblémy. Riešenie viedlo k využitiu menších funkcií pre prehľadnosť a efektívnosť kódu. Dôležitou súčasťou bolo aj správne pracovať s parametrami a vytvoriť vzor v dvojrozmernej mriežke (riadky × stĺpce). Vaše zaujímavé riešenia a najčastejšie chyby Úlohu riešilo celkom 16 tímov v kategórii GURU, pričom plný počet bodov sa podarilo dosiahnuť len tímu jama, ktorému srdečne gratulujeme. Najčastejšie sme neudelili body za nasledujúce skutočnosti:
|
||||||||||
|
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |
||||||||||