Autorské riešenie
[stiahni]

Najprv vypočítame celkovú cenu nákupu. Cenu kúpených hrušiek vypočítame ako súčin počtu hrušiek a ceny jednej hrušky. Podobne cenu kúpených jabĺk vypočítame ako súčin počtu jablk a ceny jedného jablka. Celkovú cenu nákupu vypočítame ako súčet cien kúpených hrušiek a jablk, t. j.

spolu = počet_hrušiek × cena_hrušky + počet_jablk × cena_jablka

Aby sme zaplatili za nákup čo najmenej mincí, budeme sa snažiť vyberať najdrahšie mince, t.j. trojcentové mince a zvyšok doplníme dvojcentovými mincami. Ak je celková cena nákupu menšia ako najmenšia hodnota mince, t. j. 2€, tak vypíšeme, že nevieme pomocou týchto mincí zaplatiť daný nákup. Ak celková cena nákupu je deliteľná tromi, tak na zaplatenie nákupu použijeme len trojcentové mince. Ak je zvyšok pri delení celkovej ceny číslom 3 rovný 2, tak zaplatíme jednu dvojcentovú mincu a zvyšok trojcentovými mincami. Ak je zvyšok pri delení celkovej ceny číslom 3 rovný 1, tak zaplatíme dve dvojcentové mince a zvyšok trojcentovými mincami.

zvysok 0 pri deleni 3     zvysok 1 pri deleni 3     zvysok 2 pri deleni 3

Pri programovaní na určenie zvyšku premennej :spolu po delení číslom 3 použijeme operáciu zvyšok t. j. zvyšok :spolu 3. Na celočíselné delenie použijeme operáciu cPodiel. Na vetvenie výpočtu na tri rôzne prípady podľa zvyšku pri delení číslom 3 použijeme príkaz vetvenia akJe.

Riešenie úlohy môže vyzerať nasledovne:

viem vypočítaj :pocetH :cenaH :pocetJ :cenaJ
  urobTu "spolu :pocetH*:cenaH+:pocetJ*:cenaJ
  urobTu "zv3 zvyšok :spolu 3

  ak2 :spolu<2
    [píš "|Pre danú sumu sa nedá určiť počet dvoj a trojcentov|]
    [akJe :zv3 [
      0 [urobTu "pocet3 cPodiel :spolu 3
         urobTu "pocet2 0
        ]
      1 [urobTu "pocet3 (cPodiel :spolu 3) - 1
         urobTu "pocet2 2
        ]
      2 [urobTu "pocet3 cPodiel :spolu 3 
         urobTu "pocet2 1
        ]
     ]
     (píš "|Potrebujeme| :pocet3 "|trojcentov a| :pocet2    "|dvojcentov.|)
    ]
koniec

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

Úlohu riešilo 23 tímov. Len jeden tím "vyssia inteligencia" získal plný počet bodov, lebo nezabudli ošetriť prípad, kedy sa úloha nedá vyriešiť (celková suma nákupu je menšia ako hodnota najmenšej mince, v našom prípade pod 2 centy). Vaše riešenia boli veľmi pestré, niektorí ste uviedli aj grafické prostredie pre pohodlnejšie zadávanie jednotlivých parametrov.

S prvou časťou úlohy - spočítať celkovú hodnotu nákupu - nebol žiaden problém. V druhej časti úlohy bolo potrebné ošetriť všetky tri možností - ked zvyšok pri delení celkovej hodnoty nákupu číslom 3 bol postupne 0, 1, 2. Niektorí riešitelia nepoznali funkciu (operáciu) celočíselného delenia cPodiel, resp. div, iní zase funkciu zvyšku pri delení daným číslom zvyšok resp. mod.

Potešili nás stručné (aj keď nie celkom správne) riešenia tejto úlohy:

Temni rytieri

viem vypocitaj :ph :pj :ch :cj
  urobtu "cena :ph*:ch+:pj*:cj
  urobtu "trojc cpodiel :cena 3
  urobtu "ostalo zvysok :cena 3
  ak :ostalo=0 [pis :trojc pis "0]
  ak :ostalo=2 [pis :trojc pis "1]
  ak :ostalo=1 [pis :trojc-1 pis "2]
koniec

Richard

viem vypocitaj :j :h :cj :ch
  urobtu "celkovojablka :cj*:j
  urobtu "celkovohrusky :ch*:h
  urobtu "celkovo :celkovojablka+:celkovohrusky
  urobtu "trojcent cPodiel :celkovo 3
  urobtu "zv zvysok :celkovo 3
  ak :zv=1 [urobtu "trojcent :trojcent-1 urobtu "zv :zv+3]
  urobtu "dvojcent :zv/2
  (pis "|Trojcentovky:| :trojcent)
  (pis "|Dvojcent| :dvojcent)
koniec

Nezabúdajte pri riešení úloh pekne odsadzovať programový kód, používať vhodné názvy premenných a tiež komentáre.

Pozor, hlavne začinajúci súťažiaci, aby ste neukladali do priestoru pre 3. úlohu riešenia iných úloh napr. 4. úlohy, čo sa stalo 3 riešiteľom.