Programátorský víceboj 2. díl - Morseovka
Napsal: 07 črc 2017 09:03
Ahoj kolegové,
minulý matematický díl velmi lehký. Dnes trochu přitvrdíme, ale ne moc. Úkolem bude opět doplnit definice dvou funkcí.
Zadání
První funkce bude převádět vstupní text (parametr * text) na morseovku (a bude rovnou výsledek převodu vypisovat na standardní výstup).
Pro jednoduchost převádějte pouze malá písmena, ostatní znaky (včetně číslic) ignorujte.
Druhá funkce převadí vstup v morseovce (parametr * morse) na písmena malé abecedy a ihned je vypisuje na standardní výstup. V případě načtení nevalidního kódu (jiné znaky než .-/ a prázdný vstup nebo morseovka představující jiné než alfabetické znaky) okamžitě ukončete funkci s návratovou hodnotou 1, jinak (tedy v případě úspěchu) bude návratová hodnota po dočtení vstupu 0.
V morseovce uvažujte znaky '.', '-' a '/'. Význam '.' a '/' je zcela jasný. Znak '/' odděluje od sebe písmena, respektive ukazuje, kde kód pro dané písmeno končí. Pokud před znakem '/' nejsou ani '.' ani '-', má význam mezery.
Příklady převodu
text_2_morse
morse_2_text
https://cs.wikipedia.org/wiki/Morseova_abeceda
Proč se převádí jen malá abeceda?
Cílem není vytvořit aplikaci, která by měla sloužit v reálném světě pro převody. Cílem je přijít na ten správný princip. Když dokážete, že zvládnete převádět znaky malé abecedy, znamená to, že byste bez problému zvládli i ostatní znaky, ale nemusíte se s tím zdržovat (pok sami nechcete).
Řešení
Doporučeno je C, ale jazyk si můžete vybrat dle libosti. Kód by měl být nejen funkční, ale také dobře strukturovaný a dobře optimalizovaný (preferováná je co nejnižší časová náročnost). V případě, že zvolíte jazyk C, můžete se zapojit do minisoutěže o nejrychlejší převod.
Pokud budete potřebovat pomocné funkce nebo konstanty, můžete je použít.
Pro odevzdání platí stejná pravidla jako minule.
minulý matematický díl velmi lehký. Dnes trochu přitvrdíme, ale ne moc. Úkolem bude opět doplnit definice dvou funkcí.
Zadání
Kód: Vybrat vše
void text_2_morse(char * text);
int morse_2_text(char * morse);
První funkce bude převádět vstupní text (parametr * text) na morseovku (a bude rovnou výsledek převodu vypisovat na standardní výstup).
Pro jednoduchost převádějte pouze malá písmena, ostatní znaky (včetně číslic) ignorujte.
Druhá funkce převadí vstup v morseovce (parametr * morse) na písmena malé abecedy a ihned je vypisuje na standardní výstup. V případě načtení nevalidního kódu (jiné znaky než .-/ a prázdný vstup nebo morseovka představující jiné než alfabetické znaky) okamžitě ukončete funkci s návratovou hodnotou 1, jinak (tedy v případě úspěchu) bude návratová hodnota po dočtení vstupu 0.
V morseovce uvažujte znaky '.', '-' a '/'. Význam '.' a '/' je zcela jasný. Znak '/' odděluje od sebe písmena, respektive ukazuje, kde kód pro dané písmeno končí. Pokud před znakem '/' nejsou ani '.' ani '-', má význam mezery.
Příklady převodu
text_2_morse
Kód: Vybrat vše
a >> .-/
bcd >> -.../-.-./-../
x y >> -..-/-.--/
z (mezera před z a za ním) >> /--..//
t;u >> -/..-/
ij1234k >> ../.---/.-../
(mezera >> /)
(prázdný vstup) >> (nic nevypisuj)
morse_2_text
Kód: Vybrat vše
.-/ >> a
.- >> (chyba)
// >> (dvě mezery za sebou)
....-/ (číslo 4) >> (chyba)
fgh >> (chyba)
https://cs.wikipedia.org/wiki/Morseova_abeceda
Proč se převádí jen malá abeceda?
Cílem není vytvořit aplikaci, která by měla sloužit v reálném světě pro převody. Cílem je přijít na ten správný princip. Když dokážete, že zvládnete převádět znaky malé abecedy, znamená to, že byste bez problému zvládli i ostatní znaky, ale nemusíte se s tím zdržovat (pok sami nechcete).
Řešení
Doporučeno je C, ale jazyk si můžete vybrat dle libosti. Kód by měl být nejen funkční, ale také dobře strukturovaný a dobře optimalizovaný (preferováná je co nejnižší časová náročnost). V případě, že zvolíte jazyk C, můžete se zapojit do minisoutěže o nejrychlejší převod.
Pokud budete potřebovat pomocné funkce nebo konstanty, můžete je použít.
Pro odevzdání platí stejná pravidla jako minule.