Jump to content
GustavoPeotta

Problema em Código(Criptografia)

Recommended Posts

GustavoPeotta

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 by thoga31
GeSHi

Share this post


Link to post
Share on other sites
pmg

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!

Share this post


Link to post
Share on other sites
GustavoPeotta

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..

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.