Ir ao conteúdo
  • Cadastre-se

Algoritmos e programação II - Criptografia


Felipeduarte13
Ir à solução Resolvido por Edmorte,

Posts recomendados

1. Defina um vetor_alfabeto char com tamanho 27 contém os caracteres alfabéticos de A a Z, declaradas (minúsculas);
2. Sugerimos que lide com letras minúsculas - tanto para gravar como para receber pelo teclado.
3. Defina vetor_matriz char com tamanho 27 que possui os caracteres para os quais voce deseja permutar, à sua escolha;
4. Defina os vetores de entrada vetor_analise e o de saidavetor_resultado, ambos do mesmo tamanho.
5. Ou seja, por exemplo: a posição vetor_alfabeto[0] possui o branco e a posição vetor_matriz[0] possui o %, a posição vetor_alfabeto[1]possui o 'a' e a posição vetor_matriz[1] possui um 'h' por exemplo, isso quer dizer que o programa de criptografia, quando encontrar um branco, converte-o automaticamente para %, e quando encontrar um 'a' converte-o automaticamente para 'h' e assim para todos os caracteres devetor_analise.
6. Faça um algoritmo para ler seu nome numa variável char de 30 caracteres, que será nossovetor_analise.
7. Depois apresente o vetor_resultado.


Alguém pode me dizer como conserto o código abaixo para ficar de acordo com a questão?
 

 

o código é esse, só que eu não sei como prosseguir...

 

#include <stdio.h> 
#include <stdlib.h>
 
int main() { 
   char vetor_alfabeto[27]="abcdefghijklmnopqrstuvwxyz";
   char vetor_matriz  [27]="jdjnvjnjfgkfmldmknkbnkmvkk"; 
   char vetor_analise[30]="meu nome completo";
   char vetor_resultado[30]; 
   int i, k,;
    
   for (k=0; k<27; k++){
    for (i=0; i<27; i++) {       
  if(vetor_analise == vetor_alfabeto[k]){
vetor_resultado = vetor_matriz[k];
 
break;
}
    
}
}
 printf("Resultado: %s\n", vetor_resultado[j]);
    
}
Link para o comentário
Compartilhar em outros sites

Eu estou sem entender direito essa parte dos dois (for). Pra mim, é como se no if verificasse apenas se o vetor_analise[0]==vetor_alfabeto[0], vetor_analise[1]==vetor_alfabeto[1] e assim por diante.


char vetor_analise[30]="meu nome completo";char vetor_resultado[30]; 

Se o nome tem 30, você precisa de 31, sempre tem o fim de string.

printf("Resultado: %s\n", vetor_resultado[j]);

Deve ser

printf("Resultado: %s\n", vetor_resultado);

Me explica essa parte do for. Eu não estou conseguindo entender.

Link para o comentário
Compartilhar em outros sites

  • Solução

Estava quase certo, então eu dei uma corrigida.

 

Faça um teste de mesa que você vai entender.

 

Você esqueceu de colocar o fim de string na nova string que você estava montando e esqueceu de tratar o espaço em branco.

 

No mais foi um erro no loop, o primeiro loop anda 1 posição da palavra original, e para cada iteração dessa ele testa todas as outras do array alfabeto.

 

O break otimiza o laço, terminando o laço interno, para prosseguir mais rápido. Afinal já encontramos o item, não há porque continuar procurando.

#include <stdio.h>#include <stdlib.h>#include <string.h>int main() {    char vetor_alfabeto[27]="abcdefghijklmnopqrstuvwxyz";    char vetor_matriz  [27]="jdjnvjnjfgkfmldmknkbnkmvkk";    char vetor_analise[31]="meu nome completo";    char vetor_resultado[31];    int i, k;    int tamanho = strlen(vetor_analise);        for (k = 0; k < tamanho; k++)    {        for (i = 0; i < 27; i++)        {            if(vetor_analise[k] == vetor_alfabeto[i])            {                vetor_resultado[k] = vetor_matriz[i];                break;            }            else if (vetor_analise[k] == ' ')            {                vetor_resultado[k] = ' ';                break;            }        }    }        vetor_resultado[tamanho] = '\0';        printf("Resultado: %s\n", vetor_resultado);    }
Link para o comentário
Compartilhar em outros sites

 

Estava quase certo, então eu dei uma corrigida.

 

Faça um teste de mesa que você vai entender.

 

Você esqueceu de colocar o fim de string na nova string que você estava montando e esqueceu de tratar o espaço em branco.

 

No mais foi um erro no loop, o primeiro loop anda 1 posição da palavra original, e para cada iteração dessa ele testa todas as outras do array alfabeto.

 

O break otimiza o laço, terminando o laço interno, para prosseguir mais rápido. Afinal já encontramos o item, não há porque continuar procurando.

#include <stdio.h>#include <stdlib.h>#include <string.h>int main() {    char vetor_alfabeto[27]="abcdefghijklmnopqrstuvwxyz";    char vetor_matriz  [27]="jdjnvjnjfgkfmldmknkbnkmvkk";    char vetor_analise[31]="meu nome completo";    char vetor_resultado[31];    int i, k;    int tamanho = strlen(vetor_analise);        for (k = 0; k < tamanho; k++)    {        for (i = 0; i < 27; i++)        {            if(vetor_analise[k] == vetor_alfabeto[i])            {                vetor_resultado[k] = vetor_matriz[i];                break;            }            else if (vetor_analise[k] == ' ')            {                vetor_resultado[k] = ' ';                break;            }        }    }        vetor_resultado[tamanho] = '\0';        printf("Resultado: %s\n", vetor_resultado);    }

Valeu!! Vou começar a usar mais o for e ir fazendo testes pra ver como funciona..

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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