Departamento de Ciência da Computação - IME-USP
INSTITUTO DE GEOCIêNCIAS - SEGUNDO SEMESTRE DE 1998
Terceiro Exercício-Programa
Data de entrega: até 13 de novembro de 1998
Prof. Ronaldo Fumio Hashimoto
O objetivo deste exercí cio-programa é a construção de um algoritmo de criptografia. A palavra criptografia vem do grego kryptós (escondido) e grápho (escrita), e é a arte ou ciência de tornar incompreensí vel uma mensagem originalmente escrita com clareza. Esta é uma ciência muito antiga, e vem sendo usada principalmente para fins militares e diplomáticos.
Um esquema de codificação de textos usado há mais de 2000 anos é a chamada Cifra de César. Esse esquema de codificação era utilizado pelo imperador romano para se comunicar com seus generais. O esquema de codificação funciona da seguinte forma.
Numa primeira etapa, substitua as ocorrências de brancos e sinais de pontuação por uma seqüência de caracteres seguindo a seguinte tabela:
(branco) | WBRW |
, | WVRW |
. | WPTW |
; | WPVW |
: | WDPW |
! | WEXW |
? | WINW |
- | WHFW |
Depois de feita essa substituição o texto terá apenas letras do alfabeto. Então, dado um natural k substitua cada letra i pela (i+k)-ésima letra do alfabeto (após a última letra letra segue-se a primeira novamente). Observe o exemplo a seguir:
Texto original:
ESSE EXERCICIO-PROGRAMA VAI SER MUITO LEGAL.
Após substituir-se os brancos e sinais de pontuação:
ESSEWBRWEXERCICIOWHFWPROGRAMAWBRWVAIWBRWSERWBRWMUITOWBRWLEGALWPTW
Então, usando-se k = 2, obtemos o seguinte texto codificado:
GUUGYDTYGZGTEKEKQYJHYRTQITCOCYDTYXCKYDTYUGTYDTYOWKVQYDTYNGICNYRVY
Você irá programar um sistema completo de criptografia, ou seja, você deverá fazer um programa em linguagem C que:
Para fazer seu programa, você deverá implementar as seguintes funções:
Percorre a frase guardada em frase_ent, trocando toda ocorrência do sinal de pontuação guardado em sinal pela palavra guardada em pal. A frase obtida é armazenada em frase_sai.
Por exemplo, a chamada
coloca no vetor frase o string "AHWEXW AHWEXW AHWEXW".
Troca todos os sinais da Tabela 1 que ocorrem na frase guardada em frase_ent pelos respectivos strings e coloca a frase obtida em frase_sai.
Por exemplo, a chamada
coloca no vetor frase o string "FACILWINWWBRWWHFWWBRWSIMPLESWEXW".
OBS.: Esta função deve obrigatoriamente usar a função do item 1.
Esta função troca cada letra i da frase guardada em frase_ent pela (i+k)-ésima letra do alfabeto (após a última letra, segue-se a primeira novamente). A nova frase obtida é armazenada em frase_sai.
Por exemplo, a chamada
coloca no vetor frase o string "GUUGYDTYGZGTEKEKQYDTYGYDTYNGICNYGZY".
Esta função procura no vetor frase, a partir da posição i, a palavra guardada em pal. Esta função retorna -1, se a palavra pal não está no vetor frase a partir da posição i, ou o índice da primeira ocorrência da palavra.
Exemplos:
c = procura_pal ("FACILWINWWBRWWHFWWBRWSIMPLESWEXW", 0, "WINW"); c recebe valor 5.
c = procura_pal ("FACILWINWWBRWWHFWWBRWSIMPLESWEXW", 9, "WINW"); c recebe valor -1.
c = procura_pal ("FACILWINWWBRWWHFWWBRWSIMPLESWEXW", 13, "WBRW"); c recebe valor 17.
Percorre a frase guardada em frase_ent, trocando toda ocorrência do string guardado em pal pelo sinal de pontuação guardado em sinal. A frase obtida é armazenada em frase_sai.
Por exemplo, a chamada
coloca no vetor frase o string "AH! AH! AH!".
OBS.: Esta função deve obrigatoriamente usar a função do item 4.
Troca todos os strings da Tabela 1 que ocorrem na frase guardada em frase_ent pelos respectivos sinais e coloca a frase obtida em frase_sai.
Por exemplo, a chamada
coloca no vetor frase o string "FACIL? - SIMPLES!".
OBS.: Esta função deve obrigatoriamente usar a função do item 5.
O seu programa (void main (void)) deve utilizar obrigatoriamente as funções dos itens 2, 3 e 6.
Você seria capaz de decifrar o texto abaixo?
VJNSINZJKNSINVZENSINKVOKNSINZENSINUVLKJTYNGKNNSINVJNSINNRVIVNSINQLNSINVZEWRTYNMIN
NSINNVEENSINUVINSINKVOKNSINZENSINGFIKLXZVJZJTYNSINXVJTYIZVSVENSINNFIUVENSINNRVIVN
GKNNSINZTYNSINNVZJJNGKNNSINZTYNSINNVZJJNMINNSINVJNSINZJKNSINEZTYKNSINWRZINGKNNSIN
YVIQCZTYVENSINXCLVTBNLVEJTYVENSINQLDNSINXVNZEEVINVONNVONNVON
IMPORTANTE: Todo exercício-programa deve seguir as observações contidas no EP-1. Nestas observações estão descritas as diretrizes para forma de entrega do exercício, aspectos importantes na avaliação, etc.