Autorské riešenie Pri zavlažovaní poľa tryskami (označení zavlažených políčok) môžeme postupovať dvoma spôsobmi:
V tomto autorskom riešení sme si vybrali druhý spôsob riešenia. Pri prechode poľom po zvislých a vodorovných radoch bude užitočné naprogramovať procedúru zalievajRad. Pomocou nej prejdeme najprv radom políčok, pričom budeme zisťovať, či v danom rade sa nachádza tryska. Potom pri ceste radom naspäť na začiatok radu budeme navyše zalievať (farbiť namodro) všetky suché (žlté) políčka, ak v danom rade bola zistená tryska. Pri jednom spôsobe riešenia môžeme v procedúre zalievajRad využiť skôr zistené informácie o počte políčok celého poľa na šírku a na výšku. V našom riešení nebudeme potrebovať zisťovať počet políčok, ale budeme prechádzať radom políčok pokiaľ nenarazíme na bielu farbu, ktorou je ohraničené celé pole. Ak počas prechodu radom políčok zistíme, že sa tam vyskytla tryska (políčko s hnedou farbou), tak pri spiatočej ceste zafarbíme všetky suché políčka modrou farbou. Ak tam tryska nebola, tak pri ceste naspäť na začiatok radu nebudeme zafarbovať žiadne políčka. Pred programovaním procedúry zalievajRad je užitočné vytvoriť procedúru navratNaZaciatokRadu na presunutie sa na zažiatok radu, ktorá môže vyzerať takto: viem navratNaZaciatokRadu Procedúra zalievajRad na zaliatie jedného radu môže vyzerať nasledovne: viem zalievajRad S využitím procedúry zalievajRad môžme pomerne ľahko vytvoriť procedúru zalievajRady, pomocou ktorej prejdeme celým poľom v jednom smere a zalejeme suché políčka v radoch, kde sa vyskytuje tryska. Procedúra zalievajRady môže vyzerať napr. takto: viem zalievajRady Ak bola korytnačka natočená nahor, tak pomocou procedúry zalievajRad sme zaliali (označili modrou farbou) všetky políčka celého poľa zalievané vo zvislom smere všetkými tryskami. Ostáva nám zaliať (označiť modrou farbou) políčka celého poľa zalievané vo vodorovnom smere všetkými tryskami. Toto vodorovné zaliatie môžme urobiť rovnakým spôsobom ako zvislé zaliatie pomocou procedúry zalievajRady, len sa musíme nastaviť do pravého dolného rohu poľa a natočiť sa v smere doľava. Potom už môžme napísať procedúru zalievajPlochu, pomocou ktorej označíme políčka celého poľa zaliate tryskami vo zvislom aj vodorovnom smere. Procedúra zalievajPlochu môže vyzerať takto: viem zalievajPlochu Ak sa chceme nastaviť na pôvodné miesto poľa v ľavom dolnom rohu, tak vytvoríme procedúru navratNaZaciatokPola, ktorá môže vzyerať takto: viem navratNaZaciatokPola Procedúra zalievajPlochu s návratom na prvé políčko môže vyzerať nasledovne: viem zalievajPlochu Vaše zaujímavé riešenia a najčastejšie chyby Úlohu riešilo 14 tímov, z toho 6 mali plný počet bodov. Väčšina správnych riešení použilo prvý spôsob riešenia, t. j. prechádzanie celým poľom a pri narazaní na trysku vyfarbenie riadku a stĺpca modrou farbou. Pri niektorých riešeniach ste vypočítali šírku a výšku poľa, čo vám trochu uľahčilo prechádzanie celým poľom. Pri dvoch riešeniach ste použili rekurziu, čo nebolo nutné, ale ste aspoň ukázali, resp. neukázali, že viete napísať rekurzívny program. Veľmi pekné riešenie uviedol súťažiaci Michal Bali a tiež lupa, ktorý navyše veľmi dôzledne použil komentáre vo svojom riešení. Niektorí ste vo svojich riešeniaćh nepoužívali procedúry, čo v niektorých prípadoch zneprehľadnilo kód, prípadne niektoré časti kódu sa opakovali. Pri zopár riešeniach ste prechádzali 20 riadkami a 20 stĺpcami nezávisle od aktuálneho rozmeru poľa. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |