Autorské riešenie Riešenie úlohy vyžadovalo prácu s 2 korytnačkami - prvá korytnačka prehľadáva plochu s letokruhmi a druhá korytnačka prehľadáva plochu s vyrezanými značkami. Pri letokruhoch je smer prehľadávania pre prvú korytnačku ľubovoľný. Avšak značky sú vyrezávané vertikálnym smerom, preto druhej korytnačke je výhodnejšie pohybovať sa vertikálnym smerom. Najprv sa teda pozrime na priečny rez kmeňa, v ktorom máme spočítať počet letokruhov. Korytnačka sa zo stredu môže vybrať ľubovoľným smerom, až kým nenarazí na čiernu kôru stromu. Počas tohto pohybu si bude pamätať, koľkokrát natrafila na hnedú farbu, čo bude zodpovedať výslednému počtu letokruhov. Je potrebné si ešte uvedomiť, že aj keď môžu mať letokruhy rôznu hrúbku, tak je potrebné ich počet započítať len raz a to tak, že ak sme prvýkrát narazili na hnedú farbu, pripočítame jednotku a postupujeme bez ďalšieho pripočítania ďalej, až kým hnedú farbu neopustíme. Výsledná časť procedúry pre spočítanie počtu letokruhov môže vyzerať nasledovne:
k1'domov Zisťovanie počtu vyrezaných značiek je trochu náročnejšie ako zisťovanie počtu letokruhov. Prehľadávať budeme vertikálnym smerom (po stĺpcoch), keďže všetky vyrezané značky sú takto orientované. Na začiatku je korytnačka na hnedej čiare, a preto ju pomocou nasledujúcich príkazov presunieme na bielu plochu (prvý prehľadávaný stĺpec):
k2'ph Vieme, že výška plochy na obrazovke je 500 korytnačích krokov, šírku prehľadávanej plochy zadávať nemusíme, keďže opäť môžeme využiť testovanie farby bodu (až kým nenarazíme na hnedú farbu). V premennej pocetKrokov si budeme stále pamätať, či sme už prešli celý stĺpec. Príkazy môžu mať nasledovný tvar:
urobTu "pocetZarezov 0 Keď už máme vypočítané počty letokruhov a počty značiek, získané hodnoty porovnáme. Porovnanie môže vyzerať nasledovne:
ak2 (:pocetLetokruhov=:pocetZarezov) Na záver už len bolo potrebné zdôvodniť, že tieto počty by sa mali stále rovnať. Jedinou výnimkou môže byť prípad, že lesník v niektorom roku značku vyrezať zabudol, prípadne, že nastala chyba hneď v prvom, prípadne v poslednom roku. Príčinou nerovnakého počtu letokruhov a značiek by mohla byť aj zaujímavá situácia, v ktorej lesník omylom vyreže značku tak, že sa bude prekrývať s nejakou ďalšou (už vyrezanou) značkou. Vaše zaujímavé riešenia: S úlohou ste si väčšinou veľmi úspešne poradili. Namiesto tradičného riešenia sa vyskytlo aj niekoľko zaujímavých postupov. Spočítanie letokruhov ste riešili aj tak, že postupne ste tieto letokruhy vymazávali pomocou vyplnenia bielou farbou. Postupné vymazávanie ste riešili takýmto spôsobom:
k1'nechfv "biela
ak k1'farbabodu = "hneda [k1'vypln urob "letokruhy (:letokruhy + 1)] Tento postup ste používali rovnako aj pre spočítanie značiek (hneď ako natrafíme na značku, vyplníme značku bielou farbou). Takýmto spôsobom fungovalo prehľadanie celej plochy stromu aj horizontálnymi pohybmi, ako to je znázornené na nasledujúcom obrázku. Pri prehľadávaní ste radšej používali počet opakovaní s konkrétnym číslom ako testovanie na farbu bodu okraja. V tejto úlohe to však nespôsobovalo chybné riešenie. Taktiež ste veľmi vhodne využívali príkaz odteraz "k1 a odteraz "k2, aby ste určili korytnačku, pre ktorú budú najbližšie príkazy určené. Najčastejšie chyby:
| ||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |