Autorské riešenie
Pri riešení úlohy je vhodné úlohu rozdeliť na podúlohy, kreslenie jedného poschodia pyramídy riešiť osobitnou procedúrou. Keďže podľa úlohy šírka a výška obdĺžníkov majú byť ľubovoľné, dá sa to nakresliť ako obdĺžník s parametrami.
;Imagine
logo
viem obdlznik :s :v opakuj 2 [ do :v vp 90 do :s vp 90 ] koniec Podľa zadania pyramída sa má nakresliť ako niekoľko na sebe položených vycentrovaných obdĺžníkov, teda počet poschodí pyramídy je ďalší parameter. Jednotlivé poschodia kreslíme v cykle pomocuou procedúry obdlznik :s :v, kde počet poschodí je daný počtom opakovaní. Šírku a výšku nasledujúceho poschodia určíme pomocou premenných, kde v každom cykle zmenšíme ich o desatinu, matematicky dá sa to vyjadriť napríklad takto v=v-0,1.v a s=s-0,1.s Potom už len vrchný chrám treba nakresliť, ktorého výška má byť trojnásobok výšky posledného poschodia. Pri kreslení dvier je pravidlo, že sú rovnomerne rozmiestnené a vzdialenosť medzi krajnýmim dverami a okrajovou stenou je rovnaká. Keďže máme 3 dvere a 4 steny, spolu je to 7 vzdialeností. Šírka dverí a šírka steny sa dá určiť, ako :s/7.
viem pyramida :p :s :v
; p-pocet poschodi, s-sirka spodneho poschodia, v-vyska spodneho poschodia opakuj :p [ obdlznik :s :v do :v vp 90 do (:s*0.05) vl 90 urobTu "v :v-(:v*0.1) urobTu "s :s-(:s*0.1) ] ; Kreslenie vrchného chrámu urobtu "v :v*3 obdlznik :s :v vp 90 opakuj 3 [ ph do :s/7 pd vl 90 obdlznik :s/7 :v/3*2 vp 90 do :s/7 ] koniec Riešenie v Pythone: Vo vzorovom riešení používame Pythonovskú korytnačiu grafiku s modulom turtle. Uprednostnili sme prístup import turtle pred prístupom from turtle import *, ktorý je síce stručnejší, ale je prehľadnejší pri práci s rôznymi objektami. Podobne ako v Imagine, aj v Pythone úlohu si môžeme rozdeliť: Funkcia obdlznik (s,v) rieši kreslenie jedného poschodia s ľubovolnými rozmermi. Funkcia pyramida (p, s, v) nakreslí celú pyramídu, s ľubovolným počtom poschodí, kde p je parameter, ktrorý určí počet poschodí. Postup na kreslenie chrámu je rovnaký, ako v Imagine. # Úloha o kreslení pyramídy import turtle def obdlznik(s, v): ''' Kreslenie základného obdĺžníka z aktuálnej pozície. :param s: šírka obdĺžnika :type s: int or float :param v: výška obdĺžnika :type v: int or float ''' for i in range(2): pero.forward(s) pero.left(90) pero.forward(v) pero.left(90) def pyramida(p, s, v): ''' Kreslenie pyramídy s chrámom na vrchu. :param p: počet poschodí :type p: int :param s: šírka spodného poschodia :type s: int or float :param v: výška spodného poschodia :type v: int or float ''' # Kreslenie pyramídy for i in range(p): obdlznik(s, v) pero.penup() pero.right(90) pero.backward(v) pero.left(90) pero.forward(0.05 * s) pero.pendown() s = s - 0.1 * s v = v - 0.1 * v # Kreslenie chrámu na vrchu pyramídy v = 3 * v obdlznik(s, v) pero.forward(s / 7) for i in range(3): obdlznik(s / 7, v / 3 * 2) pero.forward(2 * s / 7) pero = turtle.Turtle() tabula = turtle.Screen() pyramida(6, 300, 30) tabula.mainloop() Vaše zaujímavé riešenia a najčastejšie chyby Pri riešení tejto úlohy najčastejšie chyba bola, že ste nepoužívali parametre. Niektorí ste parametrom riešili zadanie rozmerov obdĺžníka, ale počet poschodí ste už určili konkrétnou hodnotou. Boli aj riešenia, kde ste nakreslili sekvenčne, bez parametrov a opakovaní až 10 poschodovú pyramídu, čo je veľmi zdlhavá a precízna práca, ale v budúcnosti radšej skúste využiť programátorské funkcie a štruktúry. 9.A Chalani poslali veľmi pekné riešenie, dokonca aj začiatok kreslenia prispôsobili obrazovke takto: setpos(0,-(pPoschodi*vyska)) Tím Šedá eminencia dodekahedrónov načítanie vstupných hodnôt riešil takto: pyramida(int(input("šírka prvého poschodia:")),int(input("výška prvého poschodia:")),int(input("počet poschodí:"))) Najkrajšie riešenia s prehľadným programátorským kódom zaslali ešte Bojovník Macek, experti, Bonifac Group, Kvarteto a MatMAr. Pozitívne hodnotíme, že ste prehľadne písali kódy programov a uviedli ste aj komentáre. |
|||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |