Resolvendo aqui o problema "Criptografia" Quando este exercício foi solucionado, ele era o segundo exercício mais resolvido da categoria Strings, o que pode sugerir que ele seja um dos mais fáceis :)
Vamos ver a solução proposta?
Problema: 1024
Enunciado:
Solicitaram para que você construisse um programa simples de criptografia. Este programa deve possibilitar enviar mensagens codificadas sem que alguém consiga lê-las. O processo é muito simples. São feitas três passadas em todo o texto.
Na primeira passada, somente caracteres que sejam letras minúsculas e maiúsculas devem ser deslocadas 3 posições para a direita, segundo a tabela ASCII: letra 'a' deve virar letra 'd', letra 'y' deve virar caractere '|' e assim sucessivamente. Na segunda passada, a linha deverá ser invertida. Na terceira e última passada, todo e qualquer caractere a partir da metade em diante (truncada) devem ser deslocados uma posição para a esquerda na tabela ASCII. Neste caso, 'b' vira 'a' e 'a' vira '`'.
Por exemplo, se a entrada for “Texto #3”, o primeiro processamento sobre esta entrada deverá produzir “Wh{wr #3”. O resultado do segundo processamento inverte os caracteres e produz “3# rw{hW”. Por último, com o deslocamento dos caracteres da metade em diante, o resultado final deve ser “3# rvzgV”.
Linguagem: C
Solução:
A proposta dessa solução envolve criar um array de caracteres, chamado palavra, com tamanho máximo mil, e realizar as ações solicitadas no enunciado do problema: primeiro verificou-se se o caractere era letra, em caso positivo somava-se 3. Depois, inverteu-se a linha com ajuda de uma variável auxiliar "letra", trocando de lugar o i-ésimo caractere com o caractere da posição n-i-1. No fim, bastava percorrer o array de caracteres do meio para o fim e diminuir 1 do elemento, pois deslocar para a esquerda significa retornar uma posição. Ao imprimir a palavra resultante é necessário usar "\n" para quebrar a linha.
#include <stdio.h> int main() { int n, i = 0, j; char *palavra = (char *) malloc(sizeof(char) * 1000);; scanf("%d ", &n); int tamanho[n]; while (i < n) { gets(palavra); tamanho[i] = 0; while (palavra[tamanho[i]] ^ '\0') tamanho[i]++; j = 0; while (j < tamanho[i]) { if ((palavra[j] >= 97 && palavra[j] <= 122) || ((palavra[j] >= 65 && palavra[j] <= 90))) palavra[j] = (char) (palavra[j] + 3); j++; } j = 0; while (j < tamanho[i] >> 1) { char letra = palavra[j]; palavra[j] = palavra[tamanho[i]-j-1]; palavra[tamanho[i]-j-1] = letra; j++; } j = tamanho[i] >> 1; while (j < tamanho[i]) { palavra[j] = (char) (palavra[j] - 1); j++; } printf("%s\n", palavra); i++; } return 0; }
Nenhum comentário:
Postar um comentário