Autorské riešenie
[stiahni]

Úlohou je vykresliť nahrdelník s korálikmi so zadanou veľkosťou, tvarmi a farbami. Najprv pre každý tvar korálika vytvoríme procedúru na jeho vykreslenie. Napokon vytvoríme procedúru, ktorá vykresli náhrdelník so zadanou veľkosťou korálika a podľa zadaného zoznamu. Náhrdelník s veľkosťou 50 a tvarom korálikov zakódovaným zoznamom [[d červená][s žltá][k modrá][s zelená][k sivá][d fialová][k žltá][s modrá]] vyzerá takto:

koraliky

Na vykreslenie kosoštvorca so zadanou dĺžkou strany "dĺžka a farbou "farba vytvoríme procedúru diamant, ktorá môže vyzerať nasledovne:

viem diamant :dĺžka :farba
  nechFp :farba
  vl 60
  polygón [
    opakuj 2 [
      do :dĺžka
      vp 120
      do :dĺžka
      vp 60
    ]
  ]
  vp 60
koniec

Na vykreslenie kruhu so zadaným priemerom "dĺžka a farbou "farba vytvoríme procedúru krúžok, ktorá môže vyzerať nasledovne:

viem krúžok :dĺžka :farba
  nechFp :farba
  ph
  do :dĺžka/2
  bod :dĺžka
  ph
  vz :dĺžka/2
koniec

Na vykreslenie štvorca so zadanou dĺžkou strany "dĺžka a farbou "farba vytvoríme procedúru štvorec, ktorá môže vyzerať nasledovne:

viem štvorec :dĺžka :farba
  nechFp :farba
  vl 90
  polygón [
    opakuj 4 [
      do (:dĺžka/2)
      vp 90
      do (:dĺžka/2)
    ]
  ]
  vp 90
koniec

Pri tomto riešení si môžeme všimnúť, že štvorec vykreslíme nie pomocou 4 úsečiek s veľkosťou dĺžky :dĺžka, ale pomocou 4 dvojíc úsečiek (v tvare písmena L) s veľkosťou dĺžky :dĺžka/2. Pri príkaze polygón sme výraz :dĺžka/2 museli uzavrieť do okrúhlych zátvoriek (:dĺžka/2).

Napokon vytvoríme hlavnú procedúru, ktorá vykreslí koráliky so zadanou veľkosťou podľa zadaného zoznamu tvarov a farieb. V procedúre použijeme cyklus prePrvky, pomocou ktorého prejdeme všetkým iprvkami zoznamu a vetvenie akJe, pomocou ktorého vyberieme správnu procedúru na vykreslenie daného tvaru koráliku. Táto procedúra môže vyzerať nasledovne:

viem vykresli :dĺžka :zoznam
  prePrvky "x :zoznam [
    akJe prvý :x [
      d [diamant :dĺžka posledný :x]
      s [štvorec :dĺžka posledný :x]
      k [krúžok :dĺžka posledný :x]
    ]
    ph
    do :dĺžka
    pd
  ]
koniec

Na vykreslenie obrázku uvedeného na začiatku tejto strany zavoláme procedúru vykresli s parametrami
vykresli 50 [[d červená][s žltá][k modrá][s zelená][k sivá][d fialová][k žltá][s modrá]]

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

Úlohu riešili 4 tímy. Len jeden tím využil pri svojom riešení zoznamy, ostatní súťažiaci naprogramovali len čiastkové procedúry na vykreslenie rôznych tvarov korálikov.