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") } }