Autorské riešenie Riešenie tejto úlohy je pomerne jednoduché. Musíme si však veľmi dobre rozmyslieť ako budeme obrázok hôr analyzovať. Najlepším riešením bude, ak ho budeme analyzovať po stĺpcoch šírky 1 z zľava do doprava. Pozrite sa na obrázok jedného zo stĺpcov zobrazeného pod týmto textom. Pri každom stĺpiku budeme postupovať takto: prechádzam korytnačkou po jednom kroku zdola nahor cez hnedú a bielu farbu. Samozrejme nezabúdajme počítať počet krokov, aby sme vedeli o koľko krokov máme cúvnuť späť. Ak už na týchto farbách nebudeme, znamená to, že sme na modrej a to je zbytočné testovať, keďže sme už biely sneh odmerali. Odmerali sme ho testom takto: Ak stojím na bielej farbe tak premennú vyskaSnehu zvýšim(inkrementujem) o 1. Procedúra vyskaStlpca nám reprezentuje jeden stĺpik a výstupom tejto procedúry je výška snehu.
Postup riešenia procedúry vyskaStlpca je už popísaný vyššie. Tu vám len chcem dať do pozornosti dôvod prečo cyklus opakuj opakujeme 369 krát. Viete? No je to preto, že výška obrázka je 369. Vieme si to zisti?, ak v Imagine klikneme pravým tlačidlom na stránku a zistíme jej vzhľad. Čiže, ak cyklus zopakujeme 369, máme zaručené, že sme prešli celú výšku obrázka.
viem vyskaStlpca
urobTu "vyskaSnehu 0
urobTu "pocetKrokov 0
kym [alebo farbaBodu = "hneda farbaBodu = "biela] [
do 1
urobTu "pocetKrokov :pocetKrokov+1
ak farbaBodu = "biela [
urobTu "vyskaSnehu :vyskaSnehu+1
]
]
vzad :pocetKrokov
vysledok :vyskaSnehu
koniec
Pokračujeme ďalej. :) Už máme funkčnú procedúru výskaStlpca. Na úvod novej procedúry snehoveSpravy si inicializujeme dve premenne: min a max. Minimum na 400 a maximum na 0. Ďalej prechádzame celý obrázok z zľava doprava po stĺpcoch v cykle 800 krát, lebo šírka obrázka je 800. Pýtame sa: Je výška snehu zo stĺpca väčšia ako naše max? Ak áno do maxima priradím tuto hodnotu. Je výška snehu zo stĺpca menšia ako naše min? Ak áno do minima priradím tuto hodnotu. Po prejdení celého obrázka máme v min najmenšiu hodnotu a v max najväčšiu hodnotu. U? ich iba vypíšme a je to :)"
viem snehoveSpravy
urobTu "min 400 urobTu "max 0 opakuj 800 [ vp 90 do 1 vl 90 urobTu "aktualnaVyska vyskaStlpca ak :aktualnaVyska < :min [ urobTu "min :aktualnaVyska ] ak :aktualnaVyska > :max [ urobTu "max :aktualnaVyska ] ] vl 90 do 800 vp 90 pis "|Minimálna vý?ka snehu je | pis :min pis "|Minimálna vý?ka snehu je | pis :max koniec Vaše zaujímavé riešenia a najčastejšie chyby ... |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |