Autorské riešenie
Podľa zadania úlohy máme vytvoriť náhodnú pretekársku dráhu v tvare lomenej čiary s pravými uhlami. V podmienkach úlohy je uvedené, že všetky náhodne vybrané kvety ležia v obdlžníku určenom prvým kvetom a posledným kvetom so zadanými súradnicami. Navyše sa požaduje, aby každú vybranú x-ovú a y-ovú súradnicu mali najviac 2 kvety dráhy. Ilustračné príklady dráh uvedených na obrázkoch v zadaní úlohy spĺňajú všetky spomínané podmienky.
Veľmi užitočnou stratégiou riešenia tohto problému je urobenie rozboru možných prípadov a ich vykreslenie. Pretekárska dráha môže mať párny alebo nepárny počet kvetov a prvý úsek dráhy môže byť vo zvislom alebo vodorovnom smere. Pre tieto možnosti nakreslíme obrázky, v ktorých si označíme x-ové a y-ové súradnice bodov náhodnej lomenej čiary.
Pri riešení tejto úlohy najprv vygenerujeme náhodný zoznam s x-ovými a náhodný zoznam s y-ovými súradnicami kvetov. Potom z týchto dvoch zoznamov zostavíme zoznam so súradnicami kvetov predstavujúcich lomenú čiaru, ktorú napokon vykreslíme. Najprv poďme vygenerovať náhodný zoznam s x-ovými a náhodný zoznam s y-ovými súradnicami kvetov. Z uvedených 4 obrázkov vidíme, že pre nepárny počet kvetov majú zoznamy x-ových a y-ových súradníc rovnakú veľkosť. V prípade párneho počtu kvetov a prvého úseku dráhy v zvislom smere bude mať zoznam x-ových súradníc o 1 prvok viac ako zoznam y-ových súradníc. V prípade párneho počtu kvetov a prvého úseku dráhy vo vodorovnom smere bude mať zoznam x-ových súradníc o 1 prvok menej ako zoznam y-ových súradníc. Nižšie uvádzame časť programu, v ktorej sa podľa zadaného smeru :smer a počtu kvetov :počet vypočítava hodnota :početX predstavujúca veľkosť zoznamu x-ových súradníc a hodnota :početY predstavujúca veľkosť zoznamu y-ových súradníc.
Zoznam x-ových súradníc vytvoríme v závislosti od hodnôt x-ovej súradnice prvého kvetu (:x0), x-ovej súradnice koncového kvetu (:xn) a počtu rôznych x-ových súradníc (:početX). Jednotlivé hodnoty x-ových súradníc môžeme vytvoriť tak, že ich rovnomerné usporiadanie (s rovnakými vzdialenosťami susedných bodov) upravíme pripočítaním náhodného čísla, ktoré je nanavýš rovné štvrtine vzdialenosti pôvodného rovnomerného rozdelenia x-ových súradníc. Týmto by sme mali zabezpečiť neprekrývanie kvetov, ktorých veľkosť je nanajvýš rovná polovici zdialenosti pôvodného rovnomerného rozdelenia x-ových súradníc. Takto vytvoríme zoznam s :početX-2 prvkami, ktorý potom premiešame a doplníme na jeho začiatok súradnice prvého kvetu :x0 a na jeho koniec súradnice koncového kvetu dráhy :xn.
Podobným spôsobom vytvoríme náhodný zoznam y-ových súradníc:
Z vytvorených zoznamov s náhodnými x-ovými a y-ovými súradnicami môžeme zostaviť zoznam súradníc kvetov - uzlov pravouhlej lomenej čiary, a to pridávaní dvojíc nasledovných bodov. Pri zvislom smere prvý z dvojice pridávaných bodov má rovnakú x-ovú súradnicu ako predchádzajúci bod a inú y-ovú súradnicu ako predchádzajúci bod. Druhý bod z dvojice bude mať inú x-ovú súradnicu ako prvý bod dvojice a rovnakú y-ovú súradnicu ako prvý bod dvojice. Časť programu na zostavenie zoznamu súradníc kvetov (uložených v globálnej premennej "draha) môže vyzerať nasledovne: V prípade vodorovného smeru doplníme program o nasledovnú časť: V procedúre na vykreslenie pretekárskej dráhy (lomenej čiary) sa postupne prechádza zoznamom súradníc dráhy (uložených v premennej "draha), mení poloha korytnačky na tieto súradnice, kde sa následne odtlačí tvar korytnačky (kvet): viem kresliDráhu
peroHore nechPoz prvý :draha peroDolu prePrvky "bod :draha [ nechPoz prvok počítadlo :draha odtlač ] koniec Napokon do programu doplníme podmienky riešiteľnosti úlohy - ošetríme hodnoty vstupných parametrov (súradníce prvého a koncového bodu musia byť rôzne a musia sa zmestiť na obrazovku, počet kvetov musí byť aspoň 3, počet generovaných x-ových a y-ových súradníc musí byť taký, aby sa do danej obdlžníkovej oblasti zmestili všetky kvety bez dotyku, hodnota smeru je 0 - zvislý alebo 1 - vodorovný):
Po doplnení ošetrenia hodnôt vstupných parametrov dostaneme výslednú podobu procedúry vytvorDrahu: viem vytvorDráhu :x0 :y0 :xn :yn :počet :smer ; ošetrenie vstupných parametrov ; vygenerovanie x-ových hodnôt uzlov dráhy ; vykreslenie dráhy Náročnejšou podobou tejto úlohy by bolo, keby sa zadával aj parameter veľkosti kvetu, ktorý by sa odtláčal alebo vykresľoval. Táto súťažná úloha je zameraná na použitie stratégií riešenia problémov - rozloženie problému do podproblémov, nakreslenie si obrázkov, dôsledný rozbor možných prípadov riešenia úlohy, a tiež na výpočty s karteziánskymi súradnicami, použitie príkazov opakovania, vetvenia, zložených podmienok (so spojkami zároveň, alebo), údajového typu jednoduchý aj vnorený zoznam, algoritmus generovania náhodných čísel podľa zadaných pravidiel. Vaše zaujímavé riešenia a najčastejšie chyby Do riešenia tejto úlohy sa zapojili 6 z 9 tímov finalového kola. Len jeden tím JM'&JM získal plný počet bodov. Celkové priemerné skóre tejto úlohy bolo 6 bodov, čo je cca 67%. Nedostatky, ktoré sme našli v riešeniach súťažiacich:
|
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |