Autorské riešenie
[stiahni [imp]]

  • Počet riešiteľov:  14 / 17 = 82 %

  • Úspešnosť riešenia:  3 / 5 = 60 %

Pri zostavovaní náhodných viet si môžeme všimnúť, že aj keď sú slová vo vetách náhodné, každá veta má rovnakú štruktúru, pozostavajúcu z týchto 4 častí:
<miesto> <činnosť> <počet> <povolanie>.

Ak by sme nehľadeli  na gramatickú správnosť zostavených viet, tak by sme tie vety zostavovali tak, akoby sme vyťahovali lístočky zo 4 rôznych vrecúšok označených ako:
<miesto>, <činnosť>, <počet>, <povolanie>.

V našom prípade však namiesto jedného vrecúška <činnosť> budeme používať až dve vrecúška: <činnosť1> pre sloveso v jednotnom čísle a <činnosťX> pre sloveso v množnom čísle. A rovnako namiesto jedného vrecúška <povolanie> budeme používať až dve vrecúška: <povolanie1> pre podstatné meno v jednotnom čísle a <povolanieX> pre podstatné meno v množnom čísle.

Pri riešení úlohy budeme postupovať tak, že si najprv hodíme kockou. Ak padne číslo 1, tak vetu zostavíme z postupnosti vrecúšok a číslovky 1: <miesto>, <činnosť1>, 1 ,<povolanie1>.

Ak padne číslo 0, tak vetu zostavíme z postupnosti vrecúšok: <miesto> <činnosťX> <počet> <povolanieX>, kde namiesto hodnoty vrecúška <počet> vygenerujeme náhodné prirodzené číslo väčšie ako 1.

Okrem nami uvedenej konštrukcie vety typu "Na lúke sa hrali 5 chlapci." sa v prípade životných podstatných mien mužského rodu pripúšťa aj použitie konštrukcie vety typu: "Na lúke sa hralo 5 chlapcov".

Riešenie úlohy zapísané v jazyku Imagine Logo môže vyzerať nasledovne:  

;Imagine Logo
viem vytvor_vety
  urobTu "miesto [|Na lúke| |V škole| |Pred domom| |Na ihrisku| |V divadle|]
  urobTu "cinnost1 [spieva |sa pripravuje| tancuje číta |sa smeje| |sa hraje|]
  urobTu "cinnostX [spievajú |sa pripravujú| tancujú čítajú |sa smejú| |sa hrajú|]
  urobTu "povolanie1 [chlapec futbalista kúzelník reper kamarát hokejista]
  urobTu "povolanieX [chlapci futbalisti kúzelníci reperi kamaráti hokejisti]

  opakuj 10 [
    ak2 náhodne 2 = 1 [
      urobTu "veta (slovo ?prvok :miesto
                          "| |
                          ?prvok :cinnost1
                          "| 1 |
                          ?prvok :povolanie1
                          ".)
    ][
      urobTu "pocet 2 + náhodne 10
      urobTu "veta (slovo ?prvok :miesto
                          "| |
                          ?prvok :cinnostX
                          "| |
                          :pocet
                          "| |
                          ?prvok :povolanieX
                          ".)
    ]
    pis :veta
  ]
koniec

Táto súťažná úloha je zameraná na: 

  • použitie dekompozície ako stratégie riešenia problému,

  • dôslednú analýzu problému s použitím logiky,

  • precvičenie práce s:

    • dátovou štruktúrou zoznam,

    • generátorom náhodných čísel,

  • použitie príkazov:

    • opakovania,

    • vetvenia.

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

Do riešenia tejto úlohy sa zapojilo 14 tímov kategórie PROFÍK. Plný počet 5 bodov získali 2 tímy Pcmasters a LuckaIsTheBestRybyca, k čomu im gratulujeme. Tím Pcmasters ako použil komentáre na sprehľadnenie programového kódu

Tím Masters_of_Imagine v svojom riešení zostavoval náhodné vety pre tri prípady - pre číslovku 1, pre číslovky 2 až 4 a pre číslovky 5 a viac.

Len 4 tímy zo 14 použili na vygenerovanie náhodného čísla funkciu náhodne, ostatní použili funkciu ?prvok na výber náhodného prvku zo zoznamu s uvedenými konkrétnymi číslami.

V riešeniach sme zaregistrovali nasledovné chyby:

  • Nesprávna analýza riešenia problému, výsledkom ktorej boli riešenia zjednodušenej úlohy generovania vety bez ohľadu na rôzne vygenerované číslovky, či dokonca výber len z celých hotových viet.
  • Vypisovanie podčiarovníkov vo vetách namiesto medzier.
  • Namiesto jedného príkazu AK2 boli použité za sebou dva príkazy AK.
  • Niektoré príkazy v Imagine Logu môžu mať aj väčší počet parametrov, napr. namiesto dvoch príkazov VETA za sebou možno na spojenie troch slov do vetypoužiť jeden príkaz VETA s 3 parametrami, a to  (VETA :slovo1 :slovo2 :slovo3).
  • V troch riešeniach sme zaregistrovali jednopísmenové premenné. Namiesto nich odporúčame použiť zmysluplné názvy premenných, ktoré zlepšujú čitateľnosť programu a prípadne hľadanie a opravenie chyby.
  • Neporiadne odsadený programový kód, ktorý zhoršuje čitateľnosť programu a tým komplikuje autorovi programu nájsť prípadnú chybu v programe.
  • Pri riešení súťažných úloh PALMA junior nie je potrebné sa zdržiavať s vytváraním grafického rozhrania riešenia. Stačí, ked v danom obmedzenom súťažnom čase vytvoríte program, ktorý bude vracať správne výsledky, prípadne ich vypisovať do konzoly.