Autorské riešenie
[stiahni]

Podľa zadania úlohy máme upravovať a prehrávať zoznamy čísel reprezentujúce jednoduché skladby.

V prvom kole súťaže dídžejov je potrebné zvýšiť výšku každého tónu skladby o 4 poltóny. Urobíme to tak, že budeme postupne prechádzať zoznamom uloženom v globálnej premennej "skladba a upravené hodnoty nôt ukladať do globálnej premennej "noty. Veľmi užitočným príkazom v Imagine Logo, pomocou ktorého vieme prechádzať postupne jednotlivými prvkami zoznamu je príkaz prePrvky.

Procedúra upravSkladbu1kolo na vytvorenie zoznamu tónov zvýšených o 4 poltóny môže vyzerať nasledovne:

viem upravSkladbu1kolo
; vytvorenie zoznamu z povodneho zoznamu ulozenom v globalnej premennej "skladba zvysenim hodnot o 4
  urob "noty []
  prePrvky "nota :skladba [
    urob "noty vlozPo :nota+4 :noty
  ]
koniec

V druhom kole majú dídžeji upraviť skladbu o zadaný počet poltónov. Procedúru upravSkladbu1kolo doplníme o parameter "posun a namiesto hodnoty 4 v kóde procedúry napíšeme hodnotu :posun. Výsledná procedúra upravSkladbu2kolo môže vyzerať nasledovne:

viem upravSkladbu2kolo :posun
; vytvorenie zoznamu z povodneho zoznamu ulozenom v globalnej premennej "skladba zvysenim hodnot o zadany pocet poltonov
  urob "noty []
  prePrvky "nota :skladba [
    urob "noty vlozPo :nota + :posun :noty
  ]
koniec

V treťom kole majú dídžeji prehrávať súbežne dve skladby - pôvodnú aj upravenú. V poznámke v zadaní úlohy je uvedený príkaz hrajNotu, pomocou ktorého vieme prehrať jednu notu ale aj skupinu nôt. Tieto však musíme uviesť ako zoznam. Zlúčiť dve čísla do zoznamu vieme urobiť pomocou príkazu zoznam. Procedúru upravSkladbu3kolo môžeme zapísať, napr. takto:

viem upravSkladbu3kolo :posun
; vytvorenie zoznamu z povodneho zoznamu ulozenom v globalnej premennej "skladba zvysenim hodnot o o zadany pocet poltonov
  urob "noty []
  prePrvky "nota :skladba [
    urob "noty vlozPo zoznam :nota :nota + :posun :noty
  ]
koniec

Ak namiesto hodnoty globálnej premennej "skladba chceme vo všeobecnosti upravovať ľubovoľnú skladbu, môžeme doplniť parameter "noticky. Takto upravenú procedúru upravSkladbu môžeme zapísať, napr. takto:

viem upravSkladbu :noticky :posun
; vytvorenie zoznamu z povodneho zoznamu ulozenom v globalnej premennej "skladba zvysenim hodnot o o zadany pocet poltonov
  urob "noty []
  prePrvky "nota :noticky [
    urob "noty vlozPo zoznam :nota :nota + :posun :noty
  ]
koniec

Na prehratie skladby uloženej v zozname čísel alebo v zozname dvojprvkových zoznamov čísel (predstavujúcich dvojice tónov súbežne prehrávaných), napíšeme procedúru zahrajSkladbu:

viem zahrajSkladbu :noticky :dlzka
; zahra skladbu ulozenu v zozname (1. parameter) a dlzkou tonov (2. parameter)
  urob "noty []
  prePrvky "nota :noticky [
    hrajNotu :nota :dlzka
  ]
koniec

Táto úloha je zameraná na precvičenie práce so zoznamami, ale tiež na to, aby sme si uvedomili, že nielen texty, čísla a obrázky, ale aj noty vieme kódovať v počítači a ich prehrávať. Veríme, že sme vás touto úlohou povzbudili k tvorbe programov zameraných na spracovanie a prehrávanie hudobných skladieb.

Vaše zaujímavé riešenia a najčastejšie chyby

Úlohu riešilo 16 tímov, z toho 9 tímov ju vyriešilo na 100%. Pri spracovávaní zoznamov ste namiesto príkazu prePrvky použili príkaz opakuj, alebo príkaz kým. Pre súčasné prehratie oboch skladieb naraz ste zlučovali dvojice tónov do dvojprvkového zoznamu (pomocou príkazu veta, resp. zoznam).  V nesprávnych alebo čiastočne správnych riešeniach sa vyskytli tieto nedostatky - prehrávanie dvoch skladieb za sebou, alebo striedavo po jednom tóne.