Ir ao conteúdo
  • Cadastre-se
Danilo Marquiori

Programa compila, depois da erro

Recommended Posts

Bom, sou meio novo em c, intão me desculpem a ignorância. É o seguinte, tenho que fazer um programa que faça criptografia de uma frase e depois mostro ela criptografada, e depois pegunto se quer descriptografar e depois a mostro também. Até ai tudo bem.

No caso eu peguei a frase, tranformei ela em caracteres da tabela ascii, conforme seus numero alt + ... e depois somei esses numero por 5, só para complicar mais um pouquinho.
o problema é o seguinte, tenho que declarar caracteres maiúsculos e minusculo, números e tambem pontuações,  pois a frase pode conter todos esse tipos de caracteres. 

LEMBRANDO, AINDA NÃO FIZ A PARTE DA DESCRIPTOGRAFIA, é simples, porém quero fazer dar certo a criptografia primeiro, depois só subtraio por 5 em uma funçao na escolah sim dentro do switch.
SEGUE O CODIGO:
 

#include <stdio.h>
#include <strings.h>
    
    char* criptografa(char* frase)
    {
        int i, j;
                //caracteres: Alfabeto minusculo, Alfabeto maiúsculo, pontuações, e numeros.
        char letras[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x','y', 'z',
                         'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
                         '.', ' ',',', ':', ';', '?','!', '@', '#', '$','-', '(',  ')',    '{', '}', '_',                
                         '1','2','3','4','5','6','7','8','9'};
      
              //numeros que representam simbolos na Tabela Ascii (101 simbolos colocados).
          int numeros[] = { 1, 2, 3, 4, 5, 6, 7, 8, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
                            45, 46, 47, 190, 191, 192, 193, 194, 195, 196,  197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
                          217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
                          247, 248, 249, 250};
        
        char* fraseCrypto;
        
        printf("%i", strlen(frase));
        
        // Passando por cada letra da palavra informada
        for(i = 0; i < strlen(frase); i++)
        {
            // Passa por cada letra para descobrir em qual posição está
            for(j = 0; j < strlen(letras); j++) 
            {
                if (frase == letras[j]) 
                {
                    fraseCrypto = numeros[j] + 5;
                }
            }
        }
        
        return fraseCrypto;
    }    
    
    
    int main ()
    {
        int i, j, sim=1, nao=2, escolha, frasedescripto, fraseCrypto;
        
        char frase[150], disc[150];
        char* fraseCryptografada;
        
        printf("Digite a frase desejada: ");
        gets(frase);
        fraseCryptografada = criptografa(frase);
        for(i = strlen(frase); i < strlen(fraseCryptografada); i++) 
        {
            fraseCryptografada = ' ';
        }
        // mostrando frase criptografada
        printf("Frase Criptografada: %s", fraseCryptografada);
    
        printf("\nDeseja descriptografar? ");    
        scanf ("%i",&escolha);    
    
    switch (escolha)
        {
            //sim
            case 1:
                    printf ("Você escolheu descriptografar");
                 //vou chamar função aqui para  descriptografar, ainda tenho que criala

                      break;
            //não
            case 2:
                    printf ("Você escolheu por não descriptografar ");
            break;
        }
        
    }

 

Editado por Danilo Marquiori
<>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Passe por aqui primeiro e depois faça sua pergunta. Se não notou ainda seu código falta partes a causa de não usar o tag <>. Todos os fóruns de programação possuem essa tal etiqueta, procure ler as normas dos fóruns antes de postar perguntas. Obterás muitas mais respostas se fizer seu código mais compreensível para os usuários do fórum.

 

Apesar de ter alguns problemas para rodar seu programa, posso ver de sobra que tem excesso de código para o pouco que você quer fazer. Por exemplo, toda a parte que você introduz letras simbolos, maiusculas, minusculas, etc em um vetor está sobrando. Igualmente esse vetor de inteiros do 1 ao 250 sobra. Se quiser realizar operações sobre determinados caracteres por quê não usar os próprios caracteres?

#include<stdio.h>

int main(){
    
    int i;
    
    for ( i=0; i<255 ; i++) {
        printf("O caractere '%c' em asc2 é: %d\n", i, i);
        
    }
    
    return 0;
}


Se quero somar 5 a uma letra é algo tão fácil como fazer int n = 'a' + 1. Vamos ver como ficaria seu exemplo de criptografia sobre código claro.

#include<stdio.h>

int main(){
    int i;
    char frase[] = "Alo Mundo!";
    printf("Frase: %s\n\n", frase);
    
    
    printf("Encriptado: ");
    //Encripta
    for ( i=0; frase[i] != '\0' ; i++) {
        frase[i] += 5;
        printf("%c", frase[i]);
    }
    
    printf("\n\nDesencriptado: ");
    
    //Desencripta
    for ( i=0; frase[i] != '\0' ; i++) {
        frase[i] -= 5;
        printf("%c", frase[i]);
    }    
    printf("\n\n");
    return 0;
}

Como falei... você pode aplicar a operação de somar 5 diretamente na sua letra e obter a letra+5, como se de inteiros se trata-se.




 

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, vangodp disse:

 

Não posso usar isso, pois não uso números inteiros de 1 a 250 sequenciados. Pois não quero alguns caracteres da tabela, uso por exemplo  1,2,3,40,42,50...

No seu caso somando letra mais numero inteiro ficaria por exemplo somando 5, ficaria 5 letras para frente.. Quero que fique 5 caracteres da tabela ascii para frente e não as letras.
Meu problema é mais o over flow. queria saber se tem como reduzir esses caracteres não pegando sequenciados. 

como eu faria para declarar eles no vetor?

 

Obrigado mesmo, pela atenção.



 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendo nada com o de "Quero que fique 5 caracteres da tabela ascii para frente e não as letras." Pode ser mais exato? Se puder por exemplos do que quer seria mais fácil. 

Outra coisa que não entendo é o "Meu problema é mais o over flow. queria saber se tem como reduzir esses caracteres não pegando sequenciados.".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por exemplo, Digitando a letra "a" esse char para mim cairia no numero 1. E ele na tabela ascii:  1=☺. minha criptografia seria somar 5. 6=♠.
e não somar a+ 5 = f, andando 5 letras para frente.

Não sei se entendi errado sua logica.
 

Como disse, minha criptografia está certa, pelo menos a ideia. Se não estivesse não estaria nen compilando, esta dando erro de execução porq? seria esse monte de char que tenho que declarar? Disse para fazer um for.. como declaro isso no vetor? Tem outro jeito de declarar esses char a não ser o que eu fiz?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Citação

Por exemplo, Digitando a letra "a" esse char para mim cairia no numero 1. E ele na tabela ascii:  1=☺. minha criptografia seria somar 5. 6=♠.
e não somar a+ 5 = f, andando 5 letras para frente.

Não sei se entendi errado sua logica.

Na tabela asc2 a tem valor de 97, se quer que tenha valor 1 é só restar 96.

char letra = 'a' - 1;
depois é só fazer:
letra+=5;

Acho que é isso o que você esta buscando não?

 

Citação

Como disse, minha criptografia está certa, pelo menos a ideia. Se não estivesse não estaria nen compilando, esta dando erro de execução porq? seria esse monte de char que tenho que declarar? Disse para fazer um for.. como declaro isso no vetor? Tem outro jeito de declarar esses char a não ser o que eu fiz?

Não sei te dizer porque não estou entendendo sua lógica ja que você não leu as regras do fórum e usou tag no seu código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×