GustavoPeotta Posted April 26, 2013 at 07:10 PM Report #504964 Posted April 26, 2013 at 07:10 PM (edited) Bom pessoal, olá. Antes que me mostrem os outros tópicos quero avisar-lhes que eu já procurei por aqui e no Google. Peço ajuda para me mostrarem qual é o erro do meu código Meu código consiste em utilizar a Cifra de Cesar, para quem não conhece a cifra de Cesar consiste em obter uma 'chave' onde deve ser um valor inteiro e esta chave é somada à mensagem que queremos criptografar. Exemplo: Queremos criptografar a palavra 'MENSAGEM' com um chave 4, portando adicionamos mais 4 letras para cada letra da palavra, ficando assim: QIRWEKIQ ============================================================= Agora vem o meu problema. No meu código não posso adicionar caracteres especiais, ou seja, somente letras que vão de 'A' até 'Z'. E na parte de DESCRIPTOGRAFIA não está dando certo. Eu quero fazer com que uma palavra 'ANHYTW' fique 'VICTOR'. Peço a ajuda de todos.. obrigado: #include <stdio.h> #include <string.h> #include <conio.h> #define ENCRIPTOGRAFAR 1 #define DESENCRIPTOGRAFAR 2 #define SAIR 3 char *criptografa(char s[80], int cifra); char *descriptografa(char s[80], int cifra); int option; int main() { char s[80], sc[80], sd[80]; int cifra; printf("MENU\n------------\n[1]\tENCRIPTOGRAFAR\n[2]\tDESENCRIPTOGRAFAR\n[3]\tSAIR\n\n"); scanf("%d",&option); if (option == 1){ fflush(stdin); printf("Informe o texto:\n"); gets(s); printf("\nInforme o valor da cifra:\n"); scanf("%d", &cifra); strcpy(sc, criptografa(s, cifra)); printf("\nTexto criptografado:\n"); printf("%s", sc); getch(); } if (option == 2){ fflush(stdin); printf("Informe o texto:\n"); gets(s); printf("\nInforme o valor da cifra:\n"); scanf("%d", &cifra); strcpy(sd, descriptografa(sc, cifra)); printf("\n\nTexto descriptografado:\n"); printf("%s", sd); getch(); } else return 0; } char *criptografa(char s[80], int cifra) { int i, n = strlen(s); char saux[80]; strcpy(saux, s); for (i=0; i<n; i++) { if (saux[i]== 'z' || saux[i] == 'Z') saux[i] = 'a' + (cifra - 1); else saux[i] = saux[i] + cifra; } return(saux); } char *descriptografa(char s[80], int cifra) { int i, n = strlen(s); char saux[80]; strcpy(saux, s); for (i=0; i<n; i++) { saux[i] = saux[i] - cifra; } return(saux); } Edited April 26, 2013 at 07:44 PM by thoga31 GeSHi
pmg Posted April 26, 2013 at 09:12 PM Report #504967 Posted April 26, 2013 at 09:12 PM O array saux existe apenas dentro de cada função. Quando a função termina, o array deixa de existir. No entanto devolves o endereço do array. Quando a função original quer usar o endereço recebido, esse endereço não aponta para lado nenhum válido (o array deixou de existir). Sugestão: usa o próprio array com os dados (através do seu endereço) para meter os resultados. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
GustavoPeotta Posted April 30, 2013 at 12:53 AM Author Report #505266 Posted April 30, 2013 at 12:53 AM Muito obrigado pela dica Pmg, no entanto quero pedir desculpas pois não entendi muito bem.. Poderia me mostrar o código da parte que está errada. Não estou querendo o código pronto, mas é que já fiz muitas modificações e ainda não consegui nada.. me desculpem..
HappyHippyHippo Posted April 30, 2013 at 09:40 AM Report #505290 Posted April 30, 2013 at 09:40 AM eu tenho sérias dúvidas que compile correctamente sequer ... int main() { // ... if (option == 1) { // ... } if (option == 2) { // ... } else return 0; // o return final ?? } (os professores devem continuar a achar que ensinar indentação é para code monkeys ...) o teu problema é que implementas mal a cifra nos valores que levam a que o caracter codificado/descodificado fique fora dos limitas do contradomínio. por outras palavras, o problema está aqui : char * criptografa(char s[80], int cifra) { int i, n = strlen(s); char saux[80]; strcpy(saux, s); for (i=0; i<n; i++) { // A PARTIR DAQUI ----------------------------------------------- if (saux[i]== 'z' || saux[i] == 'Z') saux[i] = 'a' + (cifra - 1); else saux[i] = saux[i] + cifra; // ATÉ AQUI ----------------------------------------------------- } return saux; } char * descriptografa(char s[80], int cifra) { int i, n = strlen(s); char saux[80]; strcpy(saux, s); for (i=0; i<n; i++) { // A PARTIR DAQUI ----------------------------------------------- saux[i] = saux[i] - cifra; // ATÉ AQUI ----------------------------------------------------- } return saux; } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now