Autorské riešenie
[stiahni]

  • Počet riešiteľov: 4/10 = 40%

  • Úspešnosť riešenia: 3/6 = 50%

Našou úlohou je k ľubovoľnému kódu tovaru (Obr. 1, vľavo) vytvoriť rozšírený kód tovaru s kontrolným súčtom (Obr. 1, vpravo). Nový riadok (hore) a nový stĺpec (vpravo) rozšíreného kódu má obsahovať kruhy s takou farbou, aby bol počet bielych kruhov v každom stĺpci a v každom riadku párny.

data             data so suctom

Obr 1. Pôvodný kód tovaru (vľavo) a doplnený kód tovaru s kontrolným súčtom (vpravo)

Poďme najprv vyriešiť jednoduchšiu úlohu, ktorou je doplniť v rade čiernych a bielych kruhov ďalší kruh s takou farbou, aby bol súčet bielych kruhov párny. Vytvoríme procedúru nastavRad na prechádzanie radom čiernych alebo bielych kruhov kým nenarazíme na koniec radu. Počas prechádzania kruhmi spočítavame biele kruhy a tiež celkový počet kruhov v rade. Podľa súčtu bielych kruhov nastavíme farbu nového kruhu. Ak je to párne číslo, farba nového kruhu je čierna, inak biela. Nakoniec sa vrátime opäť na východzí kruh radu. Procedúra nastavRad môže vyzerať, napr. takto:

viem nastavRad :priemer
; nastavRad 20
  urobTu "pocetBielych 0
  urobTu "pocetBodov 0

  kým [farbaBodu<>"sivá10][
    ak farbaBodu="biela [
      urobTu "pocetBielych :pocetBielych+1
    ]
    dopredu :priemer
    zvys "pocetBodov
  ]

  ak2 zvyšok :pocetBielych 2=0 [
    nechFV "čierna
  ][
    nechFV "biela
  ]

  kruh :priemer
  dopredu -:pocetBodov * :priemer
  vpravo 90
  dopredu :priemer
  vpravo -90
koniec

V cykle kým je možné namiesto podmienky farbaBodu<>"sivá10 použiť podmienku alebo farbaBodu="biela farbaBodu="čierna, ktoré vyhovuje pri použití ľubovoľnej inej tretej farby rôznej od bielej a čiernej.

Procedúru nastavRad použijeme pre všetky stĺpce a riadky pôvodného kódu (Obr 2.).

stlpce          riadky

Obr 2. Schéma postupu dopĺňania kruhov v každom stĺpci a riadku pôvodného kódu

Vytvoríme procedúru nastav, ktorá najprv prechádza všetkými stĺpcami pôvodného kódu a na ich koniec doplní kruh s takou farbou, aby bol súčet bielych kruhov párny. Potom sa presunieme do ľavého horného kruhu, natočíme sa vpravo a zopakujeme rovnaký postup na doplnenie kruhu s vhodnou farbo na koniec každého riadku kódu. Napokon sa vrátime na východziu pozíciu kódu - na ľavý dolný kruh. Procedúra nastav môže vyzerať, napr. takto:

viem nastav :priemer
; nastav 20
  urobTu "pocetBodovVStlpci 0
  kým [farbaBodu<>"sivá10][
    nastavRad :priemer
    zvys "pocetBodovVStlpci
  ]
  vpravo -90
  dopredu :pocetBodovVStlpci * :priemer
  vpravo 90

  kým [farbaBodu<>"sivá10][
    dopredu :priemer
  ]
  dopredu -:priemer
  vpravo 90

  urobTu "pocetBodovVRiadku 0
  kým [farbaBodu<>"sivá10][
    nastavRad :priemer
    zvys "pocetBodovVRiadku
  ]
  vpravo -90
  dopredu :priemer
koniec

Táto súťažná úloha je zameraná na použitie stratégií riešenia problémov (rozlož problém do podproblémov, nakresli si obrázok), na jednoduché výpočty (súčet, zvyšok pri delení), použitie príkazov opakovania, vetvenia a tvorbu vnorených procedúr s parametrami.

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

Do riešenia tejto úlohy sa zapojili len 4 tímy. z toho 2 tímy (JM&JM a ikztzu) dosiahli plný počet bodov. Celkový priemer úspešnosti riešení bol 3 body z maximálneho počtu 6 bodov (50,0% úspešnosť).

V jednom riešení autori použili na prechádzanie stĺpcami a riadkami cyklus kým. V inom riešení autori najprv zistili pomocou cyklu kým počet riadkov a stĺpcov a ďalej už používali cyklus opakuj na prechádzanie všetkými stĺpcami a riadkami kódu. V riešeniach autori použili v príkaze kým obe verzie podmienok uvedené v autorskom riešení.

Odporúčania k riešeniam:

  • zbytočne nepoužívať globalne premenné,
  • na konci výpočtu návrat na pôvodné východzie miesto kódu (ľavý dolný kruh),
  • použitie parametra :priemer pri vykresľovaní kruhu namiesto konštanty 20.