Autorské riešenie
Táto úloha mala v podstate tri časti:
Ak si porovnáme kód a obrázok podľa neho vykreslený zistíme, že jednotlivé časti kódu môžeme chápať nasledovne.
Ak už vieme, čo jednotlivé údaje znamenajú, môžeme sa pustiť do procedúry kresliObrázok. Keďže ju chceme použiť na vykresľovanie rôznych obrázkov je vhodné text z tabuľky použiť ako parameter procedúry. Budeme postupne týmto zoznamom dát prechádzať . Ak v ňom narazíme na jeden z troch názvov útvarov, môžeme príslušný útvar vykresliť. Pre každý útvar vieme, koľko parametrov ho definuje, kolo 4 paramatre, obsirnik 5 parametrov a sikmyObsirnik 6 parametrov. Procedúra kresliObrázok môže vyzerať nasledovne: viem kresliObrázok :data Pre každý útvar sme si vytvorili samostatnú procedúru. Takto bude náš kód prehľadnejší. Všimnime si aj to, ako sa "posúvame" v zozname dát. Ak sme použili nejaké hodnoty ako parametre vykreslovaného útvaru, v zozname pokračujeme až za posledným z nich. Toto je zabezpečené zmenou hodnoty premennej "i. Teraz sa môže pozrieť na jednotlivé procedúry pre kreslenie útvarov: viem kolo :posunX :posunY :polomer :farba viem obsirnik :posunX :posunY :strana1 :strana2 :farba viem sikmyObsirnik :posunX :posunY :strana1 :strana2
:zmenaNatocenia :farba Keďže obsirník a sikmyObsirnik sa líšia len počiatočným natočením, môžeme pri kreslení obsirnika využiť procedúru sikmyObsirnik. Jeho natočenie bude 0. Ušetríme si tak nie len písanie kódu ale znížime aj množstvo prípadných chýb. Poslednou úlohou je nájsť kód pre vykreslenie čierno-bielej šachovnice s rozmermi 3´3. Takýchto kódov je niekoľko, záleží, ako sa na obrázok šachovnice pozrieme. Napr.: [obsirnik 0 0 150 150 biela obsirnik 0 50 50 50 "cierna obsirnik 50 50 50 50 "cierna obsirnik 0 -100 50 50 "cierna obsirnik 50 50 50 50 "cierna] alebo aj [obsirnik 0 0 150 150 "cierna obsirnik 0 50 50 50 "biela obsirnik 50 50 50 50 "biela obsirnik 0 -100 50 50 "biela obsirnik 50 50 50 50 "biela] Všimnime si, že aj keď má šachovnica 9 políčok, nám stačí vykresliť len 5 obsirnikov. Možno by niekoho napadlo, že biely obsirnik nemusime kresliť vôbec. To by sa však dalo len za predpokladu, že vždy kreslíme na biele pozadie. Vaše zaujímavé riešenia a najčastejšie chyby Pri riešení tejto úlohy ste boli pomerne úspešný. Často ste však nevyužili fakt, že pri kreslení obsirnika môžem využiť kreslenie sikmého obsirnik. Použili st eteda zbytočne veľa a navyše rovnakého kódu. Ďalšou chybou bolo, že n´vod na kreslenie ste nezadali ako parameter procedúry kresliObrázok, ale priamo ste volali príslušné procedúry. Takto však vaša procedúra kresliObrázok kreslí vždy jeden a ten istý obrázok. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |