Ir ao conteúdo

Posts recomendados

Postado

Estou iniciando no curso de Ciência da Computação e estou sofrendo para elaborar um pensamento algoritmo para solucionar esse exercício:

• O programa lê a sequência de encriptação (SE), que é uma cadeia de 26 letras.

• Depois de ler a SE, o programa lê um texto e o reescreve, substituindo cada letra do texto pela letra correspondente na SE, desconsiderando a diferença entre letras
maiúsculas e minúsculas. Por exemplo, se a SE for  “QWERTYUIOPASDFGHJKLZXCVBNM” a palavra “Denilson” seria codificada como “RTFOSLGF”.

 

O seu grupo deve agora escrever um programa que, dada a SE e um texto codificado, decodifique-o. O programa deve funcionar de maneira similar ao do exercício anterior, mas faz a tarefa inversa.

Postado

@oJunior1384    creio que você possa usar dois vetores de char , sendo um com as letras do nosso alfabeto ,português , e outro com a SE , onde cada letra da posição de um vetor seja o equivalente o da mesma posição no outro vetor , assim ao pegar uma frase codificada , pegue cada letra e compara co o vetor onde se colocou a SE , e se for iguaL pegue a letra que está no outro vetor onde estão as letras do nosso  alfabeto , e vá concatenando essas Letras em uma variável também do tipo char string , que contenha muitas posições , e assim ao terminar a decodificação coloque o finalizador de string da linguagem c , que é esse barra zero '\0' .   e então faça um código sobre esse exercício e pode postar ele aqui , para vermos como está e em que podemos ajudar  ,., ,.,, ,

  • Curtir 1
Postado

Bom, eu tentei, ele ficou mais ou menos assim, o JUNIOR e a SE é só um exemplo:

#include <stdio.h> 
#include <stdlib.h>//JUNIOR=PUFOGK---SE=QWERTYUIOPASDFGHJKLZXCVBNM
int main ()

    char alfabeto[26], SE[26], vet[26];
    int i, j;
    i=0;
    j=65;
    while(i<26)
    {
        alfabeto[i]=j;
        j++;
        i++;
    }
    printf("Lendo SE\n");
    scanf("%s",SE);
    printf("Lendo COD\n");
    scanf("%s",vet);
    i=0;
    while(i<'\0')
    {
        j=0;
        while(j<26)
        {
            if(vet[i]==SE[j])
            {
                vet[i]=alfabeto[j];
                j=26;
            }
            j++;
        }
        i++;
    }
    printf("Palavra decodificada: %s",vet);
return 0;
}

  • Amei 1
Postado

@devair1010

Bom, eu tentei, ele ficou mais ou menos assim, o JUNIOR e a SE é só um exemplo:

#include <stdio.h> 
#include <stdlib.h>//JUNIOR=PUFOGK---SE=QWERTYUIOPASDFGHJKLZXCVBNM
int main ()

    char alfabeto[26], SE[26], vet[26];
    int i, j;
    i=0;
    j=65;
    while(i<26)
    {
        alfabeto[i]=j;
        j++;
        i++;
    }
    printf("Lendo SE\n");
    scanf("%s",SE);
    printf("Lendo COD\n");
    scanf("%s",vet);
    i=0;
    while(i<'\0')
    {
        j=0;
        while(j<26)
        {
            if(vet[i]==SE[j])
            {
                vet[i]=alfabeto[j];
                j=26;
            }
            j++;
        }
        i++;
    }
    printf("Palavra decodificada: %s",vet);
return 0;
}

  • Obrigado 1
Postado

@oJunior1384 Para codificar subtraia a letra por A (no caso de maiúscula) e use como índice do vetor se. Com a palavra de exemplo do enunciado fica assim,

 

#include <stdio.h>

int main(){
    char se[] = "QWERTYUIOPASDFGHJKLZXCVBNM";
    char palavra[20] = "DENILSON";

    for(int i = 0; palavra[i]; i += 1){
        putchar(se[palavra[i] - 'A']);
    }
    return 0;
}

 

  • Curtir 2
  • Obrigado 1
Postado

@oJunior1384    ola,  vejamos aqui , nessas linhas , 

//  JUNIOR=PUFOGK---SE=QWERTYUIOPASDFGHJKLZXCVBNM
int main ()

    char alfabeto[26], SE[26], vet[26];
    int i, j;
    i=0;
    j=65;

while(i<26)
    {
        alfabeto[i]= (char) i + 65; // caract da frase sao char
       //  j++;
        i++;
    }
    printf("Lendo SE\n");
    scanf("%s",SE);
    printf("Lendo COD\n");
    scanf("%s",vet);
    i=0;
    while( vet[ i ] != '\0') // vai ate o fim da string 
    {
        j=0;
        while(j<26)
        {
            if(vet[i] == SE[j] )
            {
                vet[i] = alfabeto[j];
                // j=26;

                break;
            }
            j++;
        }
        i++;
    }

    vet[ i ] = '\0';  // marca o final da string

    printf("resultou eM = %s\n",vet);  escreve o resultado da decodificacao

  • Curtir 3
Postado

Para decodificar também pode mostrar/atribuir o contador do vetor se + letra A (com palavras maiúsculas), p.ex,

 

if(palavra[i] == se[j]){
    putchar(j + 'A');
    break;
}

 

 

  • Curtir 3
Postado
Estou iniciando no curso de Ciência da Computação e estou sofrendo para elaborar um pensamento
algoritmo para solucionar esse exercício:

• O programa lê a sequência de encriptação (SE), que é uma cadeia de 26 letras.

• Depois de ler a SE, o programa lê um texto e o reescreve, substituindo cada letra do texto
pela letra correspondente na SE, desconsiderando a diferença entre letras
maiúsculas e minúsculas. Por exemplo, se a SE for  “QWERTYUIOPASDFGHJKLZXCVBNM” a palavra
“Denilson” seria codificada como “RTFOSLGF”.

 

Ok, você descreveu o algoritmo já ;) 

 

Não faz sentido ignorar a diferença entre maiúsculas e minúsculas, já que assim não tem como restaurar o original usando a mesma chave, que é o mínimo que se espera de um algoritmo de criptografia.

Não faria diferença usar 26+26 letras por exemplo e assim poderia restaurar igualzinho, deixando igual tudo que não estivesse na tabela.

 

De todo modo, o simples é entrar com a chave e o nome de um arquivo texto de entrada e eventualmente um terceiro parâmetro que seria claro o arquivo de saída.

 

Use os parâmetros, o simples, e considere:

  • 1 parâmetro: tem que ser a chave, claro. Lê a chave e depois fica em loop lendo uma linha do teclado e mostrando a seguir a linha codificada. Ideal para testar o programa...
  • 2 parâmetros: a chave e o arquivo de entrada: mostra o resultado na tela
  • 3 parâmetros: a chave, o arquivo de entrada e o de saída. Faz o óbvio: lê a chave, abre o arquivo e cria o outro codificado

Isso para não deixar a chave em disco, afinal é criptografia... Claro que o primeiro parâmetro pode ser o nome do arquivo que contem a tal chave.

 

 

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...