Autorské riešenie
[stiahni]

Riešenie tejto úlohy pozostáva z dvoch častí:

  1. vykreslenia grafu s hodnotami senzora zrýchlenia (akcelerácie),
  2. výpočtu krokov z nameraných hodnôt.

Hodnoty senzora zrýchlenia sú uložené v premennej "akceleracia typu zoznam. Pri vykresľovaní grafu potrebujeme prejsť všetkými prvkami zoznamu a zobraziť tieto hodnoty vo forme grafu. Na prístup ku každému prvku zoznamu môžeme použiť niektorý z cyklov:

  • opakuj počet :akceleracia [...]
  • prePrvky "prvok :akceleracia [...]

Pri vykresľovaní hodnôt grafu potrebujeme zadať počiatočné súradnice vykresľovania grafu "x0 "y0 a zväčenie v smere osi y "koef, aby bol zreteľnejší priebeh hodnôt senzora zrýchlenia. Procedúra vykresli môže vyzerať, napr. takto:

viem vykresli :koeficient :x0 :y0
;vykresli 20 -200 -200
  peroHore
  nechYSúr ((prvy :akceleracia)*:koeficient)+:y0
  nechXSúr :x0
  peroDolu
  prePrvky "y :akceleracia [
    nechYSúr (:y*:koeficient)+:y0
    nechXsúr xSúr+1
  ]
koniec

Po spustení procedúry dostaneme graf s priebehom hodnôt senzora zrýchlenia (Obr. 1).

data

Obr 1. Graf s hodnotami senzora zrýchlenia

Pre zistenie počtu prejdených krokov nám napomôže zobrazený graf priebehu senzora zrýchlenia. Podľa zadania úlohy zaznamenané hodnoty senzora zrýchlenia boli namerané počas 12 krokov chôdze. V grafe vidíme, že počas chôdze sa striedavo menila hodnota senzora akcelerácie, je tam 12 výrazných stúpaní a 12 klesaní hôdnôt senzora zrýchlenia. Pri vybranej hodnote senzora zrýchlenia (z hornej časti grafu), napr. 11, ak zvýraznime hodnoty nad touto hranicou napr. žltou farbou, registrujeme 12 zreteľných väčších "kopcov" (Obr 2.). Tieto predstavujú hodnoty senzora zrýchlenia pri dvíhaní nohy nahor. Počet krokov môžme vypočítať tak, že spočítame prechody z oblasti pod zadanou hranicou (označené zelenou farbou) a nad zadanou hranicou (označené červenou farbou).

stlpce   

Obr 2. Graf s hodnotami senzora zrýchlenia so zvýraznením hranice (modrá farba), hodnôt nad hranicou (žltá farba), prechodov z oblasti pod hranicou do oblasti nad hranicou (zelená a červená farba)

Pri výpočte prejdených krokov budeme prechádzať všetkými nameranými hodnotami v premennej "akceleracia a budeme registrovať dve za sebou idúce hodnoty senzora akcelerácie v premenných "yStara a "y. Krok započítame len vtedy, ak je predcádzajúca hodnota pod zadanou hranicou a zároveň aktuálna hodnota rovná alebo nad zadanou hranicou. Procedúra vypocitaj môže vyzerať, napr. takto:

viem vypocitaj :hranica
; vypocitaj 11
  urobTu "yStara prvý :akceleracia
  urobTu "krokov 0
  prePrvky "y :akceleracia [
    ak zároveň :y>=:hranica :yStara<:hranica [
      zvýš "krokov
    ]
    urobTu "yStara :y
  ]
  vysledok :krokov
koniec

Uvedené riešenie úlohy je závislé od výberu hranice. Ak by sme ju vybrali bližšie k hodnote senzora zrýchlenia v kľude (cca 9.81 m/s2), tak by sme zaznamenali aj drobné pohupovanie na začiatku a na konci chôdze. Pri vyšších hodnotách by sme zasa mohli zaznamenať viac prechodov, lebo "na väčších kopcoch" v hornej časti grafu sú aj "menšie kopce". Pri vysokých hodnotách by sme niektoré "kopce" už ani nezachytili.

Ak by sme mali viacero záznamov chôdze s hodnotami senzora akcelerometra, mohli by sme hranicu určiť ako určitú pomernú hodnotu medzi maximálnou (resp. minimálnou) a pokojovou (resp. priemernou) hodnotou senzora zrýchlenia. Iným prístupom je namiesto nameraných hodnôt použiť vyhladené hodnoty, ktoré budú priemerom troch za sebou idúcich hodnôt. Ďalším prístupom je spočítať všetky "vrcholy kopcov" a odčítať od nich "vrcholy bližších nižších kopcov". Riešenie tejto úlohy spadá do oblasti analýzy dát, ktorá je veľmi širokou a náročnou oblasťou, využiteľnou v rôznych oblastiach prírodných aj spoločenských vied.

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), vytvorenie vlastného algoritmu (pre výpočet kroku na základe počtu prechodov medzi dvoma susednými hodnotami), prácu so zoznamom, použitie príkazov opakovania a vetvenia.

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

Do riešenia tejto úlohy sa zapojili 4 tímy. z toho len tím JM&JM získal plný počet bodov. Celkový priemer úspešnosti riešení bol 6 bodu z maximálneho počtu 7 bodov (86,0% úspešnosť).

V dvoch riešeniach súťažiaci pracovali priamo s hodnotami záznamu a počet krokov rátali pomocou počtu prechodov z oblasti pod hranicou do oblasti nad hranicou (podobne ako v autorskom riešení). V jednom riešení bola hranica vypočítaná z priemernej hodnoty všetkých hodnôt s pričítaním hodnoty 0.5, v druhom riešení bola hodnota hranice stanovená empiricky.

V ďalších dvoch riešeniach súťažiaci vypočítavali prechody skenovaním vykresleného grafu, čo je veľmi zaujímavý prístup, ale pracovali s inými ako pôvodnými hodnotami. V jednom riešení sa dve rôzne susedné hodnoty zobrazili do dvoch susedných bodov s rovnakou súradnicou y, čo spôsobilo nesprávnu korekciu výpočtu. Pri vykresľovaní, resp. pri skenovaní grafu v niektorých riešeniach bpol posun 0.5 bodu namiesto 1 bodu.