Autorské riešenie
Našou úlohou je zo zadaného textového reťazca vytvoriť nový reťazec, ktorý bude obsahovať všetky znaky pôvodného reťazca, len spoluhlásky budú uvedené v opačnom poradí. Úlohu môžme riešiť aspoň dvoma spôsobmi:
Pri obidvoch uvedených spôsoboch je užitočné uložiť všetky spoluhlásky do jednej premennej, ktorú budeme používať pri zisťovaní, či práve prečítaný znak je spoluhláskou: viem start V dvojprechodovom riešení v prvom prechode zadaným reťazcom (napr. "maledivy) vytvoríme zoznam obsahujúci pozície spoluhlások (napr. [1 3 5 7]) a zoznam spoluhlások na daných pozíciách, ale v opačnom poradí (napr. [v d l m]). Programový kód tejto časti, so zadaným reťazcom v premennej "povodny a výslednými zoznamami v premenných "spoluhlaskyZtextu a "pozicieSpoluhlasok, môže vyzerať, napr. takto: ... V druhom prechode najprv do premennej "zasifrovany uložíme obsah premennej "povodny, následne postupne zameníme na spoluhláskových pozíciach zozbierané spoluhlásky, s tým, že budeme skracovať zoznam spoluhlások aj zoznam ich pozícii. Programový kód tejto časti môže vyzerať, napr. takto: ... Kompletná procedúra zasifruj1 využívajúca v grafickom rozhraní textové polia textPôvodný a textZašifrovaný môže vyzerať, napr. takto: viem zasifruj1 Druhý prechod môžeme urobiť aj tak, že najprv nastavíme premennú "zasifrovany na prázdny reťazec a prejdeme celým zadaným reťazcom od prvej po poslednú pozíciu. Na pozíciách spoluhlások postupne pripájame k výslednému reťazcu "zasifrovany spoluhlásku z otočeného zoznamu a na ostatných pozíciach pôvodný znak. Kompletná procedúra zasifruj2 využívajúca v grafickom rozhraní textové polia textPôvodný a textZašifrovaný môže vyzerať, napr. takto: viem zasifruj2 Jednoprechodové riešenie úlohy využíva premenné "dolna a "horna na označenie aktuálnych pozícii spoluhlások v textovom reťazci a premenné "znakD? a "znakH? na zaregistrovanie, že práve čítaný znak zľava, resp. sprava je spoluhláskou. Výsledná jednoprechodová procedúra zasifruj3 môže vyzerať, napr. takto: viem zasifruj3 Na výmenu dvoch znakov na vybraných pozíciách v zadanom reťazci použijeme vlastnú funkciu (operáciu) vymena, ktorej kód je uvedený nižšie: viem vymena :textik :poz1 :poz2 Táto súťažná úloha je zameraná na použitie stratégie riešenia rozlož problém do podproblémov, vytvorenie vlastného šifrovacieho algoritmu, prácu so zoznamami, použitie príkazov opakovania a vetvenia. Vaše zaujímavé riešenia a najčastejšie chyby Do riešenia tejto úlohy pre kategóriu PROFÍK sa zapojilo 5 zo 7 tímov, ale len tím Bubáci v. 3 ju vyriešil správne a navyše uviedol cez 50 palindrómov. Celkový priemer úspešnosti odovzdaných riešení bol 1,4 bodu z maximálneho počtu 5 bodov (28,0% úspešnosť). V úspešnom riešení autori netestovali veľké spoluhlásky, čo by v iných programovacích prostrediach bolo nekompletné riešenie. Zauímavosťou je, že program Imagine Logo síce rozlišuje kódy znakov, ale nerozlišuje "príbuzné" znaky, napr. znaky l, ĺ, ľ, L, Ĺ, Ľ. Jedinou výhodou tohto nerozlišovania je používanie príkazov s diakritkou aj bez nej, napr. vľavo a vlavo. V jednom započatom a nekompletnom riešení sme ocenili slovný popis postupu riešenia úlohy. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |