Autorské riešenie
Pri kreslení domčeka môžeme používať len pripravené procedúry:
Zo zadania úlohy vyplýva, že:
Domčeky sa od seba líšia svojou veľkosťou - teda počtom okien. Túto hodnotu si vyžiadame od budúceho majiteľa domu a tejto hodnote (označme ju p) prispôsobíme naše riešenie. Vykreslenie domčeka rozdelíme do dvoch krokov - vykreslenie prízemia a vykreslenie strechy. Prízemie je tvorené p panelmi s okami a jedným panelom s dverami. V našom riešení budú dvere umiestnené vždy úplne vľavo. Po vykreslení prízemia umiestnime korytnačku na jej štartovaciu pozíciu. ;Imagine
logo
viem prizemie :p ;vykreslime p panelov s oknami, po vykresleni kazdeho sa posunieme na poziciu pre vykreslenie dalsieho panela opakuj :p[panel_okno vp 90 do 50 vl 90] ;vykreslime panel s dverami panel_dvere ;vratime sa do zaciatocnej pozicie vp 90 vz :p * 50 vl 90 koniec
Pokračujeme strechou. V našom riešení použijeme strechu, ktorá je zarovno s okrajmi prízemia. Ľavú šikmú strechu vykreslíme pomocou procedúry sikma_strecha, za ňou nasleduje p-1 rovných striech. Počet rovných striech získame pomocou jednoduchého výpočtu:
Ako vykresliť pravú rovnú strechu bez definovania novej procedúry? Je potrebné porozumieť procedúre sikma_strecha: kreslí rovnoramenný pravouhlý trojuholník, pričom korytnačka začína s kreslením vo vrchole oproti prepone a kreslí proti smeru hodinových ručičiek. Ak teda otočíme korytnačku o 90 stupňov doprava, môžeme použiť tú istú procedúru aj pre vykreslenie pravej šikmej strechy: ;Imagine
logo
viem strecha :p ;posunieme sa do pozicie pre vykreslenie sikmej strechy, zaciname v bode oproti prepone trojuholnika smerom nahor vp 90 do 50 vl 90 ;vykreslime lavu sikmu strechu sikma_strecha ;za lavou sikmou strechou nasleduje p-1 rovnych striech, po kazdej sa posunieme opakuj :p - 1[rovna_strecha vp 90 do 50 vl 90] ;otocime sa tak, aby sme pomocou procedury sikma_strecha mohli vykreslit aj pravu sikmu strechu vp 90 ;vykreslime pravu sikmu strechu sikma_strecha ;vratime sa na zaciatocnu poziciu vz :p * 50 vl 90 koniec
Obidve procedúry spojíme do výslednej procedúry dom: ;Imagine
logo
viem dom :p ;overime, ci vstupna hodnota splna podmienku, ze kazdy dom ma aspon jedno okno ak2 :p >= 1 ;vykreslime prizemie [prizemie :p ;po vykresleni prizemia sa posunieme k zakladom buducej strechy do 80 ;vykreslime strechu strecha :p ;vratime korytnacku spat na prizemie vz 80] ;ak bolo na vstupe cislo mensie ako 1, vypise chybovu spravu [pis "|Pre zadaný počet panelov s oknami nie je možné postaviť montovaný dom.|] koniec
Vaše zaujímavé riešenia a najčastejšie chyby Niektorí riešitelia vykreslili jeden konkrétny domček s jedným oknom a jednými dverami. Tiež mnoho tímov vo svojom riešení neotestovalo zadávaný počet okien - aj pre hodnoty menšie ako 1 kreslili "zvláštny" dom, namiesto vypísať chybovej správy. Chybou bolo aj definovanie novej procedúry pre vykreslenie pravej šikmej strechy. Medzi zaujímavé riešenia patrili tie, ktoré si okrem počtu okien vyžiadali ako vstupnú hodnotu aj poradie panelu s dverami, prípadne kreslili dvere uprostred prízemia.
Zaujímavým riešením bolo vykreslenie poschodového domu - aj keď toto riešenie bolo penalizované stratou bodového hodnotenia, keďže v zadaní sa píše o prízemných domčekoch.
|
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |