Respondendo mais uma dúvida aqui em nosso Curso de Algoritmos e Lógica de Programação, vamos hoje aprender como criptografar / descriptografar uma frase com Portugol.
O problema a ser resolvido na aula de hoje é:
Desenvolva um algoritmo que, ao ser executado, ofereça as opções de criptografar e descriptografar. Após escolher a opção desejada o usuário irá fornecer uma frase através do teclado. A criptografia consiste em trocar cada caractere da frase pela segunda próxima letra do alfabeto (“a” substitui por “c” e assim por diante) ou no caso de número pelo primeiro próximo da sequência de 0 (zero) a 9. Exemplo: “dia 10” ficaria “fkc 21”. A descriptografia será o processo inverso.
Observe que cada caracter deve ser trocado, substituído por outro caracter, tanto no processo para criptografar quanto para descriptografar. Isso nos leva a imaginar duas funções, uma para criptografar e outra para descriptografar. Cada função recebe apenas um caracter e retorna apenas um caracter, bem simples.
A função a seguir será utilizada para codificar uma frase, trocando cada caracter por outro correspondente.
funcao caracter codificar(caracter l){
escolha(l){
caso 'a':
retorne 'c'
caso 'b':
retorne 'd'
caso 'c':
retorne 'e'
caso 'd':
retorne 'f'
caso 'e':
retorne 'g'
caso 'f':
retorne 'h'
caso 'g':
retorne 'i'
caso 'h':
retorne 'j'
caso 'i':
retorne 'k'
caso 'j':
retorne 'l'
caso 'k':
retorne 'm'
caso 'l':
retorne 'n'
caso 'm':
retorne 'o'
caso 'n':
retorne 'p'
caso 'o':
retorne 'q'
caso 'p':
retorne 'r'
caso 'q':
retorne 's'
caso 'r':
retorne 't'
caso 's':
retorne 'u'
caso 't':
retorne 'v'
caso 'u':
retorne 'w'
caso 'v':
retorne 'x'
caso 'w':
retorne 'y'
caso 'x':
retorne 'z'
caso 'y':
retorne 'a'
caso 'z':
retorne 'b'
caso '0':
retorne '1'
caso '1':
retorne '2'
caso '2':
retorne '3'
caso '3':
retorne '4'
caso '4':
retorne '5'
caso '5':
retorne '6'
caso '6':
retorne '7'
caso '7':
retorne '8'
caso '8':
retorne '9'
caso '9':
retorne '0'
caso contrario:
retorne l
}
}
A função a seguir será utilizada para decodificar um texto, retornando o real caracter para cada caracter recebido.
funcao caracter decodificar(caracter l){
escolha(l){
caso 'a':
retorne 'y'
caso 'b':
retorne 'z'
caso 'c':
retorne 'a'
caso 'd':
retorne 'b'
caso 'e':
retorne 'c'
caso 'f':
retorne 'd'
caso 'g':
retorne 'e'
caso 'h':
retorne 'f'
caso 'i':
retorne 'g'
caso 'j':
retorne 'h'
caso 'k':
retorne 'i'
caso 'l':
retorne 'j'
caso 'm':
retorne 'k'
caso 'n':
retorne 'l'
caso 'o':
retorne 'm'
caso 'p':
retorne 'n'
caso 'q':
retorne 'o'
caso 'r':
retorne 'p'
caso 's':
retorne 'q'
caso 't':
retorne 'r'
caso 'u':
retorne 's'
caso 'v':
retorne 't'
caso 'w':
retorne 'u'
caso 'x':
retorne 'v'
caso 'y':
retorne 'w'
caso 'z':
retorne 'x'
caso '0':
retorne '9'
caso '1':
retorne '0'
caso '2':
retorne '1'
caso '3':
retorne '2'
caso '4':
retorne '3'
caso '5':
retorne '4'
caso '6':
retorne '5'
caso '7':
retorne '6'
caso '8':
retorne '7'
caso '9':
retorne '8'
caso contrario:
retorne l
}
}
Agora que já temos as funções responsáveis por realizar a troca dos caracteres, podemos trabalhar nas funções para codificar e decodificar todo o texto.
A função a seguir obtêm cada caracter de uma frase lida do teclado e, usando a função codificar já desenvolvida, gera uma nova frase codificada. Seu retorno é uma cadeia contendo a frase codificada.
funcao cadeia criptografar(cadeia texto){
cadeia nova = ""
caracter letra
inteiro i, tam = Texto.numero_caracteres(texto)
para(i = 0; i < tam; i++){
letra = codificar(Texto.obter_caracter(texto, i))
nova = nova + letra
}
retorne nova
}
A função a seguir obtêm cada caracter de uma frase codificada e, usando a função decodificar já desenvolvida, gera uma nova frase decodificada igual à frase original lida do teclado. Seu retorno é uma cadeia contendo a frase decodificada.
funcao cadeia descriptografar(cadeia texto){
cadeia nova = ""
caracter letra
inteiro i, tam = Texto.numero_caracteres(texto)
para(i = 0; i < tam; i++){
letra = decodificar(Texto.obter_caracter(texto, i))
nova = nova + letra
}
retorne nova
}
Código completo em Portugol para Criptografar e Descriptografar uma frase
programa{
inclua biblioteca Texto
/*
* CRIPTOGRAFIA
*
* Código escrito por Wagner Gaspar
* Maior de 2021
*/
funcao caracter codificar(caracter l){
escolha(l){
caso 'a':
retorne 'c'
caso 'b':
retorne 'd'
caso 'c':
retorne 'e'
caso 'd':
retorne 'f'
caso 'e':
retorne 'g'
caso 'f':
retorne 'h'
caso 'g':
retorne 'i'
caso 'h':
retorne 'j'
caso 'i':
retorne 'k'
caso 'j':
retorne 'l'
caso 'k':
retorne 'm'
caso 'l':
retorne 'n'
caso 'm':
retorne 'o'
caso 'n':
retorne 'p'
caso 'o':
retorne 'q'
caso 'p':
retorne 'r'
caso 'q':
retorne 's'
caso 'r':
retorne 't'
caso 's':
retorne 'u'
caso 't':
retorne 'v'
caso 'u':
retorne 'w'
caso 'v':
retorne 'x'
caso 'w':
retorne 'y'
caso 'x':
retorne 'z'
caso 'y':
retorne 'a'
caso 'z':
retorne 'b'
caso '0':
retorne '1'
caso '1':
retorne '2'
caso '2':
retorne '3'
caso '3':
retorne '4'
caso '4':
retorne '5'
caso '5':
retorne '6'
caso '6':
retorne '7'
caso '7':
retorne '8'
caso '8':
retorne '9'
caso '9':
retorne '0'
caso contrario:
retorne l
}
}
funcao caracter decodificar(caracter l){
escolha(l){
caso 'a':
retorne 'y'
caso 'b':
retorne 'z'
caso 'c':
retorne 'a'
caso 'd':
retorne 'b'
caso 'e':
retorne 'c'
caso 'f':
retorne 'd'
caso 'g':
retorne 'e'
caso 'h':
retorne 'f'
caso 'i':
retorne 'g'
caso 'j':
retorne 'h'
caso 'k':
retorne 'i'
caso 'l':
retorne 'j'
caso 'm':
retorne 'k'
caso 'n':
retorne 'l'
caso 'o':
retorne 'm'
caso 'p':
retorne 'n'
caso 'q':
retorne 'o'
caso 'r':
retorne 'p'
caso 's':
retorne 'q'
caso 't':
retorne 'r'
caso 'u':
retorne 's'
caso 'v':
retorne 't'
caso 'w':
retorne 'u'
caso 'x':
retorne 'v'
caso 'y':
retorne 'w'
caso 'z':
retorne 'x'
caso '0':
retorne '9'
caso '1':
retorne '0'
caso '2':
retorne '1'
caso '3':
retorne '2'
caso '4':
retorne '3'
caso '5':
retorne '4'
caso '6':
retorne '5'
caso '7':
retorne '6'
caso '8':
retorne '7'
caso '9':
retorne '8'
caso contrario:
retorne l
}
}
funcao cadeia criptografar(cadeia texto){
cadeia nova = ""
caracter letra
inteiro i, tam = Texto.numero_caracteres(texto)
para(i = 0; i < tam; i++){
letra = codificar(Texto.obter_caracter(texto, i))
nova = nova + letra
}
retorne nova
}
funcao cadeia descriptografar(cadeia texto){
cadeia nova = ""
caracter letra
inteiro i, tam = Texto.numero_caracteres(texto)
para(i = 0; i < tam; i++){
letra = decodificar(Texto.obter_caracter(texto, i))
nova = nova + letra
}
retorne nova
}
funcao inicio(){
cadeia texto = "abre a porta mariquinha. 123...9"
escreva("Frase:\t\t\t", texto)
escreva("\n")
texto = criptografar(texto)
escreva("Criptografada:\t\t", texto)
escreva("\n")
texto = descriptografar(texto)
escreva("Descriptografada:\t", texto)
escreva("\n")
}
}
