Ir ao conteúdo

Posts recomendados

Postado

1 - Criptografia

Elabore um programa em C++ que possua dois vetores: letras e numeros. O vetor

letras deverá armazenar os seguintes caracteres.

letras[] = { 'a' , 'b' , 'c' , 'd' , 'e' , 'f', 'g' , 'h' , 'i' , 'j' , 'l' , 'm' , 'n' , 'o' , 'p' };

O vetor numeros os seguintes valores:

numeros[] = {10, 16, 19, 1, 7, 28, 5, 90, 8, 12, 3 , 6, 8, 77, 9};

Cada valor do vetor numeros corresponde a um caracter do vetor letras, ou seja, o

valor 10 corresponde ao caracter ‘a’, o valor 16 corresponde ao caracter ‘b’, o valor 19

corresponde ao caracter ‘c’, e assim por diante. Elabore um programa em que o

usuário leia uma sequência de caracteres e escreva o seu valor correspondente.

Exemplo: Se o usuário escrever ade, então deverá se impresso: 10 1 7

Se o usuário escrever eabijlmn, então deverá ser impresso: 7 10 16 8 12 3 6 8

Alguem pode me ajudar .. quando eu troco a letra 'a' pelo valor numero '10' só aparece o 0 porque ?

Postado

#include <iostream>

#include <iomanip>

#include <stdio.h>

#include <stdlib.h>

using namespace std;

int main()

{

char palavra1 []={'a','b','c','d','e','f','g','h','i','j','l','m','n','o','p','\0'};

int numero []={'10','16','19','1','7','28','5','90','8','12','3','6','8','77','9'};

string palavra ;

cout << "Digite uma palavra \n";

cin >> palavra;

int tam=palavra.length();

for (int i=0; i < tam; i++)

{

if (palavra==palavra1[0])

{

palavra=numero[0];

}

if (palavra==palavra1[1])

{

palavra=numero[1];

}

cout << palavra ;

}

}

seu novato em c+++ .... rsrs

Postado

1- Tire esses apóstrofos...

  Citação
int numero []={'10','16','19','1','7','28','5','90','8','12','3 ','6','8','77','9'};

2- Não faça isso (ou faça mesmo, explico no final oaheoaheoae) :

  Citação
palavra=numero[0];

Não existe caractere "10", nem "16"... Ambos são compostos por DOIS caracteres '1' e '0' e '1' e '6', respectivamente, ou seja, não faz nenhum sentido atribuir o número 16 a um caractere e achar que vai imprimir 16... (não, não vai, a menos que você imprima o valor inteiro do caractere, mas não seria uma "impressão de caractere")

'1' é um caractere e mesmo assim seu valor decimal não é 1 (é 49). Caractere e valor ascii são duas coisas diferentes...

Uma variável char é apenas um inteiro de 1 Byte (normalmente), por isso é possível atribuir um inteiro a ela.

Enfim, ou você vai imprimindo o inteiro correspondente conforme vai lendo a entrada ou cria um vetor de inteiros só para armazenar essa saída ou usa a própria string de leitura mesmo, mas imprimindo caractere por caractere como inteiro...

Dê uma olhada na tabela ascii: ASCII Table

-

Postado

1º erro:

inicia um vetor de inteiro assim:


int numero[] = {1,2,3,4}; // sem aspas simples, aspa é só para char

2ºerro

seu erro está nos dois ifs depois do for, retire-os

faça mais um for dentro do for assim:


for(...) { //primeiro for está certo
for(int j= 0; palavra1[j]; j++)
{
// Colque um unico if com a condição
if(palavra[i] == palavra1[j])
{
...
}
}
}

3º erro

na seguinte declaração " palavra = numero[0]" não se atribui um int a uma variavel string.


//Dentro do if coloque assim:
if(palavra[i]==palvra1[j])
{
cout<< numero[j]; // não atribuiu o numero para a string mas exibiu o caractere correspondente
}

O programa faz o seguinte ele lê a entrada do usuario e por um laço pecorre a string digitada e compara com a matriz da chars se o caractere correspondente é achado exibisse o numero correspondente.

Dica: Com esse programa você só pode criptografar palavras com esses caracteres de a até p, você oderia fazê-lo assim.



#include <iostream>
#include <string>

using namespace std;
int main()
{
string palavra ;

cout << "Digite uma palavra \n";
cin >> palavra;
int tam = palavra.length();
for(int i = 0; i<tam; i++)
{
cout << (int) palavra[i];
}
getchar();
getchar();
return 0;
}

Postado

Se o vetor de criptografia é, por exemplo citado:

criptografa = {10,16,19,1,7,28,5,90,8,12,3,6,8,77,9};

e ele criptografa de 'a' até 'o', por exemplo, então a ordem dos elementos dele segue à das letras.

0 para 'a', 1 para 'b', 2 para 'c' etc...

Não precisa escrever as letras. Basta calcular os índices. Como?

Existe uma coisa chamada Tabela ASCII, que possui um valor para cada caracter.

Letras, ponto, vírgula, interrogação, #, !, $, @, & etc...

Para maiúsculas e minúsculas os valores são crescentes e na ordem.

'a' = 97.

A Linguagem C permite você escrever "subtração" de caracteres.

Se uma variável char possui valor 'g' e você subtrai uma variável com o valor 'a', ou o próprio 'a', você obterá a distâncias entre estas letras.

Quantas posições são de 'a' até 'g', se a posição 'a' for a posição zero?

Exatamente a que corresponde a posição da criptografia de 'g' no vetor.

Calcule o valor da distância e use ele no vetor de criptografia:

distancia = letra - 'a';

cout << (int) criptografa[distancia];

*** ADD ***

Mais uma coisa: Não se precisa saber o valor de 'a' na tabela.

Nem o de 'g'. Funciona e é a melhor parte.

  • 2 anos depois...
Postado

Como fica o código com duas variáveis do tipo char? onde a primeira é o alfabeto e a segunda é um vetor com caracteres aleatórios. tenho que criar mais dois vetores, onde um está meu nome e é para criptografar.

 

exemplo: se f->i, e->h, l->b, i->o, p-> y, e -> h meu nome ficaria ihboye 

  • 3 anos depois...
Postado

#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>

using namespace std;

char criptografia(char linha[]);   //Prototipo de Função

//Programa Principal
int main(){

int i;
char linha[20], linha_cripto[20];

cout << "Digite uma string: ";
gets(linha);

criptografia(linha);//chamada da função para criptografia
}

//Função
char criptografia(char linha[]){
FILE *arq;
int i;
int result, tamanho;
char linha_cripto[20];

arq = fopen("arq1.txt", "wt");   //ta criando um arquivo
if (arq == NULL) {
cout <<"Problemas na criacao do arquivo\n";
}
//aqui ta acontecendo a criptografia
tamanho = strlen(linha);
for (i=0; i < tamanho; i++){
    linha_cripto = linha + 1;
}
linha_cripto[tamanho]= '\0';

result = fputs(linha_cripto, arq);//aqui ta gravando no arqrivo txt, a palavra criptografada

fclose(arq); //aqui ta fechando o arquivo txt
}
ALGUEM ME AJUDA TERMINAR POR FAVOR!!!! ESSE PROGRAMA TO TENTANDO FAZER MODO ARQUIVO E TEM QUE CRIPTOGRAFAR E DESCRIPTOGRAFAR. PRECISO PRA AMANHA DIA 06/03/18

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!