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 solução foi criar uma string e realizar cada ação solicitada: verificar se é letra e acrescentar 3 caso positivo; inverter a string, com uso de uma variável auxiliar "letra", trocando o caractere da posição i com o da posição n-i-1; por fim, do meio para o fim da string era só diminuir 1, pois isso representa o deslocamento à esquerda solicitado no enunciado. Ao imprimir a variável é necessário usar endl para quebrar a linha.
#include <iostream> using namespace std; int main() { int n, i = 0, j; string palavra; cin >> n; cin.ignore(); int tamanho[n]; while (i < n) { getline(cin, 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++; } cout << palavra << endl; i++; } return 0; }
Nenhum comentário:
Postar um comentário