NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Ceasarova šifra

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Josef Vondra
Člen
Avatar
Josef Vondra:28.11.2016 13:22

Naším úkolem je rozluštit zprávu zakódovanou Caesarovou šifrou, která funguje na principu záměny písmene z abecedy za písmeno posunuté o pevně určený počet míst. V našem případě máme k dispozici nejen zašifrovaný text, ale také nespolehlivě odposlechnuté originální znění zprávy, tj. některé znaky originální zprávy jsou chybně zapsány. Řešení tak můžeme založit na testování všech možností kódování Caesarovou šifrou a porovnání s odposlechnutým textem. Posun s největší shodou dekódovaného textu s odposlechnutou zprávu budeme považovat za správný a takto dekódovaný text je náš požadovaný výstup. Obecně nemusí tento postup vést na unikátní správné řešení, nicméně v testovaných případech vždy existuje unikátní řešení.

Jedním z cílů tohoto domácího úkolu je procvičení dynamické alokace paměti na základě velikosti vstupu. Proto délka vstupního textu není dopředu známa a je nutné v případě vyčerpání počáteční velikost (např. 10-100 znaků) dynamicky alokovat prostor větší, např. funkcí realloc() pro dvojnásobnou délku. V programu používejte pouze množství paměti, které řádově 1) odpovídá zadanému vstupu. Odevzdávací systém kontroluje velikost dynamicky alokované paměti.

Vstup

Na standardním vstupu očekávejte dvě posloupnosti znaků (texty) na samostatných řádcích. První text je zakódovaná zpráva a druhý text je nespolehlivě odposlechnutý text.

Pokud vstupní text neodpovídá abecedě [a-zA-Z] vypíše program na standardní chybový výstup ”Error: Chybny vstup!” a skončí s návratovou hodnotou 100.
V případě povinné části jsou oba vstupní texty stejné délky a pokud mají délku různou, program vypíše na stderr ”Error: Chybna delka vstupu!” a skončí s návratovou hodnotou 101.
Pokud nastanou obě chyby 100 a 101 současně, program vypíše chybovou hlášku ”Error: Chybny vstup!” a skončí s návratovou hodnotou 100.
V případě řešení volitelné části, kdy je program spuštěn s parametrem ”-prp-optional”, mohou být délky vstupních textů různé a program tak chybou nekončí.

Zdravím, toto jsme dostali jako dobrovolný úkol, mně by se celkem hodilo ho udělat, jenže mám problém úplně, ale úplně se vším, absolutně netuším, jak mám načítat více znaků najednou, netuším, jak pracovat s tím, aby to dokázalo rozluštit to slovo, netuším vůbec nic a byl bych rád a zakoukoliv radu :)

Předem děkuji, jestli se někdo najde :)

 
Odpovědět
28.11.2016 13:22
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Josef Vondra
Martin Dráb:28.11.2016 14:53

Zkus prosím vysvětlit, proč "absolutně netušíš" (tzn. na jaké straně je chyba). Co se týče načítání více znaků, můžeš například načítat znak po znaku (getchar) a postupně je ukládat do alokovaného bufferu. Pokud ti místo v bufferu dojde, realokuješ jej na větší velikost (třeba přes ten realloc). Tak pokračuješ, dokud nenarazíš na konec řádky.

Také mi v zadání chybí, jak se zachovat v případě, že dva texty mají různou délku (jak je porovnávat, protože tady existuje více cest).

Nahoru Odpovědět
28.11.2016 14:53
2 + 2 = 5 for extremely large values of 2
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.