Back to School II.

štruktúrované údajové typy

Motivácia

Na dnešnom cvičení budete pokračovať v lúštení šifrovaného textu. Prácu si však zjednodušíte vytvorením vlastného štruktúrovaného typu.

Ciele

  1. Naučiť sa vytvárať vlastné štruktúrované typy.

Postup

Krok #1: Getting Structured

V tomto kroku upravíme pôvodný kód z minulého cvičenia. Hlavná úprava bude spočívať v tom, že vytvoríte nový údajový typ. Pomocou neho vytvoríte novú prekladovú tabuľku, ktorá bude obsahovať ako originálne, tak aj preložené písmeno.

Úloha 1.1

Vytvorte nový štruktúrovaný typ s názvom Letter, ktorý bude reprezentovať položku prekladovej tabuľky.
Tento údajový typ bude mať dve položky typu char:
  • original - pôvodné písmeno z ASCII tabuľky
  • translated - preložené písmeno (pomocou frekvenčnej tabuľky)

Úloha 1.2

Aktualizujte funkciu build_ttable() tak, aby dokázala vytvoriť prekladovú tabuľku ako pole typu struct Letter.

Úloha 1.3

Implementujte pomocnú funkciu get_translated_letter(), ktorá pre písmeno odovzdané ako parameter tejto funkcii vráti jeho preklad vzhľadom na prekladovú tabuľku.
Deklarácia tejto funkcie je nasledovná:
char get_translated_letter(const struct Letter ttable[], char letter)
kde:
  • struct Letter ttable[] - prekladová tabuľka, ktorá bola zhotovená pomocou funkcie build_ttable(),
  • char letter - písmeno, ktorého preklad potrebujeme získať.

Funkcia vracia znak, ktorý je prekladom znaku zadaného pomocou vstupného parametru letter.

Úloha 1.4

Implementujte pomocnú funkciu get_original_letter(), ktorá pre písmeno odovzdané ako parameter tejto funkcii vráti jeho nepreloženú podobu vzhľadom na prekladovú tabuľku.
Deklarácia tejto funkcie je nasledovná:
char get_original_letter(const struct Letter ttable[], char letter)
kde:
  • struct Letter ttable[] - prekladová tabuľka, ktorá bola zhotovená pomocou funkcie build_ttable(),
  • char letter - preložené písmeno, pre ktoré potrebujeme zistiť jeho pôvodnú (nepreloženú) podobu.

Funkcia vracia znak, ktorý je originálom preloženého znaku zadaného pomocou vstupného parametru letter.

Úloha 1.5

Aktualizujte funkciu encrypt() tak, aby vedela pracovať s novou podobou prekladovej tabuľky.
Deklarácie funkcie bude v tomto prípade nasledovná:
void encrypt(const struct Letter ttable[], char text[])
pričom význam jednotlivých parametrov zostáva nezmenený.

Úloha 1.6

Aktualizujte funkciu decrypt() tak, aby vedela pracovať s novou podobou prekladovej tabuľky.
Deklarácie funkcie bude v tomto prípade nasledovná:
void decrypt(const struct Letter ttable[], char text[])
pričom význam jednotlivých parametrov zostáva nezmenený.

Úloha 1.7

Overte správnosť svojej implementácie.
Pokiaľ ste postupovali správne, tak ak zašifrujete niektorý text pomocou funkcie encrypt() a následne ho rozšifrujete pomocou funkcie decrypt(), získate pôvodný text.

Doplnkové úlohy

  1. Ak sa pokúsite zmerať čas zašifrovania textu a jeho opätovného rozšifrovania, zistíte, že čas pre zašifrovanie je kratší ako v prípade jeho rozšifrovania. Pokúste sa identifikovať problém, prečo je to tak a následne aktualizujte svoje riešenie tak, aby boli tieto časy porovnateľné.

Diskusia

Upozornenie: Do svojich príspevkov nevkladajte správne riešenia úloh a ani ich od ostatných nežiadajte! Nepoužívajte sprosté slová! Takéto príspevky budú zmazané! Riaďte sa podľa pravidiel etického kódexu.