Parametrizácia procedúr (šachovnica)

Tak ako jednoduché stroje už v  staroveku ľuďom uľahčovali fyzickú prácu, počítače môžu uľahčiť netvorivú mechanickú duševnú prácu a čoskoro budú schopné vykonávať aj niektoré úkony tvorivej práce. Ak vám zadám úlohu: Nakreslite v Imagine štvorec so stranou 100, mechanickým postupom napíšete napríklad nasledujúcu postupnosť príkazov:

do 100
vpravo 90
do 100
vpravo 90
do 100
vpravo 90
do 100
vpravo 90 

Poznámka: do je skratka príkazu dopredu.

Tých z vás, ktorí majú „programátorské“ cítenie, možno napadne, že vyššie uvedené príkazy možno nahradiť nasledujúcimi:

opakuj 4 [dopredu 100 vpravo 90]

Osem príkazov sme nahradili tromi. Ak vás učiteľ bude chcieť „trápiť“, zmení zadanie na Nakreslite štvorec so stranou 200 na ňom štvorec so stranou 100 a na ňom štvorec so stranou 50, pričom nech sú na sebe uložené symetricky. Tak, ako je to na obrázku vľavo.

Intelektuálne pohodlní aj túto úlohu napíšu pomocou dlhej postupnosti príkazov, nepoužijú žiadnu procedúru a tak to, čo možno vyriešiť v ideálnom prípade behom troch minút, v horšom behom desiatich, budú riešiť celú vyučovaciu hodinu a viacerí z nich to do konca vyučovacej hodiny nevyriešia.

Dobrý programátor je „lenivý“ programátor,  namiesto toho, aby začal úlohu riešiť mechanicky, porozmýšľa, ako ju možno vyriešiť čo najmenším počtom ťuknutí na  klávesy klávesnice.

Riešenia z internetu

Jedným z riešení problému je aj také, že ak učiteľ zadá zadanie napríklad šachovnica, napíšete do googlu otázku Imagine šachovnica a dostanete k dispozícii najmenej 10 rôznych riešení úlohy.  Som ochotný akceptovať aj takéto vyriešenie úlohy, ale tomu čo mechanicky opíšete z internetu by ste mali rozumieť. O malú chvíľu vám  zadám tú istú úlohu, iba jemne modifikovanú, napríklad nakreslite troch šachovnicových snehuliakov, ktorí sú postavení namiesto zo snehových gulí, z farebných snehových kociek, pričom je to snehuliačia rodina, otec je oblečený v modro-bielom a je najväčší, mama v červeno-bielom a dcéra v ružovo zelenom a  je najmenšia. Skopírované riešenie jednoduchej šachovnice, ak mu nerozumiete, vám nijako nepomôže.

Pochopiť, ako je napísaný program, ktorý napísal ktosi iný, je často omnoho náročnejšie, než si to radšej menej efektívne naprogramovať sám, ale inak to môže byť veľmi dobré cvičenie logického a detektívneho myslenia. Ja sám som pri svojom profesionálnom programovaní neraz použil už hotové riešenie, ale ak som ho nepochopil, napísal som vlastné, ak som ho pochopil, tak som ho optimalizoval pre potreby projektu na ktorom som pracoval.

Zadanie 1

Napíšte procedúru, ktorá vykreslí šachovnicu s  8 stĺpcami a 8 riadkami, pričom sa striedajú čierne a biele políčka, ako na klasickej šachovnici.

Mnohí z vás zadanie začali riešiť mechanicky, postupne ste zadávali jednotlivé príkazy. Ak sa vrátime k tomu, ako nakresliť jednoduchý štvorec, tak sa dostávame k počtu príkazov 8. Týchto štvorcov potrebujeme nakresliť 64, pričom vnútro každého štvorca je vykreslené buď bielou alebo čiernou farbou. Tieto zmeny vnútornej farby  možno realizovať najmenej štyrmi príkazmi. Mechanické riešenie úlohy  predstavuje postupnosť 64×12 príkazov, ak vám po „úspešnom“ vyriešení úlohy zadám tú istú úlohu, pozmenenú na striedanie červenej a modrej, tak budete musieť najmenej 64 krát urobiť zmenu. Musí existovať a existuje omnoho efektívnejšie riešenie úlohy.

Ako som uviedol na začiatku článku, počítače nám majú intelektuálnu prácu šetriť a nie ju znásobovať. Takže skúsme sa zamyslieť a využiť všetky príkazy, ktoré už poznáte.

  • šachovnica má osem riadkov a osem stĺpcov
  • farba políčok sa pravidelne mení tak, aby horizontálne ani vertikálne neležali vedľa seba dve políčka rovnakej farby
  • každé políčko má svoje súradnice v smere horizontálnej a vertikálnej osi. Tieto súradnice sa zvyknú označovať ako X a Y.

Nultá verzia procedúry šachovnica po tejto analýze bude:

viem šachovnica
opakuj 64  [štvorec X Y]
koniec

Potrebujeme definovať procedúru štvorec, ktorá na súradniciach X Y, nakreslí štvorec. Je vecou rozhodnutia programátora, či súradnice X Y budú súradnicami stredu štvorca, alebo to bude jeden z vrcholov štvorca. Oboje má svoje výhody a nevýhody. Rozhodnime sa pre vrchol štvorca vľavo dole.

Nultá verzia procedúry štvorec.

viem štvorec :X :Y
ph
nechpoz veta :X :Y
pd
opakuj 4 [dopredu 30 vpravo 90]
koniec

Poznámka: Funkcia veta vyrobí z dvoch zoznamov jeden zoznam. :X a :Y tu vystupujú ako dva jednoprvkové zoznamy, funkcia nechpoz očakáva  dvojprvkový zoznam. Táto verzia procedúry štvorec, nakreslí štvorec, ale nevyplní ho zvolenou farbou.

Doplňme parameter farby výplne:

viem štvorec :X :Y :farba
ph
nechpoz veta :X :Y
pd
opakuj 4 [dopredu 30 vpravo 90]
nechfv :farba
ph

vpravo 45
dopredu 3
vypln
vlavo 45 
koniec

Poznámka: Procedúra vyplň pracuje tak, že začne farbiť farbou výplne políčko, ktoré sa nachádza na pozícii korytnačky a vyfarbí všetky políčka, ktoré majú rovnakú farbu a navzájom susedia, keď narazí na inú farbu, ďalej nepokračuje. Preto  je tu príkaz perohore – ph

V nultej verzii procedúry šachovnica boli funkcie X a Y, potrebujeme vypočítať, kde sa má nakresliť prvý, kde druhý a kde 64 štvorec. Keď máme cyklus opakuj, funkcia počítadlo vracia hodnotu, ktorýkrát cyklus beží, súradnice X a Y možno vypočítať z tohto počítadla (sú jeho funkciami). Prvýkrát má byť štvorec vykreslený na východzej pozícii. X aj Y majú byť rovné nule, druhý a 8 krát, má byť X rovné (Počítadlo-1)*30 a Y sa meniť nemá, keď cyklus beží deviatykrát, X má byť znova nula a Y má byť 30. Pre 64 beh to má byť 7*30 a 7*30. Funkcie ktoré spĺňajú uvedené požiadavky sú pre X=30*zvysok pocitadlo-1 8 a pre Y=30*(pocitadlo-8-zvysok pocitadlo-1 8)/8.

Procedúra šachovnica sa zmení takto:

viem sachovnica
opakuj 64 [štvorec 30*zvysok pocitadlo-1 8 30*(pocitadlo-8-zvysok pocitadlo-1 8)/8 „cervena]
koniec

Už robí presne to čo sme chceli, ale farba políčok sa nestrieda. Striedanie farieb je vyriešené v nasledujúcej verzii procedúry šachovnica:

viem sachovnica
urob „farby [„modrá „červená]
opakuj 64 [štvorec 30*zvysok pocitadlo-1 8 30*(pocitadlo-8-zvysok pocitadlo-1 8)/8
prvok (zvysok ((zvysok pocítadlo 2)+(pocitadlo-zvysok pocitadlo-1 8)/8) 2)+1 :farby]
koniec

Praktický test
(môžete spolupracovať, pod spoluprácou nerozumiem opisovanie riešení, ale konzultácie so spolužiakmi alebo s učiteľom)

  1. Za prečítanie článku  a realizáciu procedúry šachovnica, ako je posledne uvedená (môže byť realizovaná aj iným spôsobom). Túto časť viete vyriešiť jednoduchým označením procedúr štvorec a šachovnica myšou a stlačením CTRL-C nad článkom a CTRL-V v Imagine. Pozor! Dolné úvodzovky nahraďte hornými. 5 bodov.
  2. Upravte procedúry štvorec a šachovnica tak, aby ste vedeli nakresliť menšiu i väčšiu šachovnicu a aby ste mohli zvoliť farbu políčok. Nápoveda: procedúry štvorec aj šachovnica by mali mať parametre dĺžka strany štvorca, prvá farba  a druhá farba.
    2 body
  3. Procedúry upravte tak, aby ste mohli zvoliť, kde na obrazovke sa šachovnica nakreslí. Nápoveda: procedúra šachovnica by mala mať parametre :X a :Y, kde sa má začať šachovnica kresliť.
    1 bod
  4. Nakreslite rodinu štvorcových snehuliakov, ako som o nej písal na začiatku článku. Ak ste nevyriešili body 2. a 3. môžete obrázok nakresliť aj iným spôsobom. Má to byť nasledujúci obrázok: 2 body

5. V čom sa obrázok líši od textu v úvode článku? PLUS

print

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *