PROGRAMA PARA DECODIFICAR [RESOLVIDO]

1. PROGRAMA PARA DECODIFICAR [RESOLVIDO]

Jucemar Vieira Junior
Jucemar

(usa Ubuntu)

Enviado em 20/08/2016 - 11:05h

Fala pessoal, tudo bem?
Sou novo aqui no fórum e estou com uma tremenda dúvida.
Quero fazer um programa que decodifique uma palavra, a codificação e o programa ocorrem da seguinte forma:
- Para cada letra eu irei atribuir um valor, estes valores estão no seguinte intervalo, e devem ser atribuídos da seguinte forma: 01, 02, 03, 04...26. Ou seja, digamos que eu atribui 02 a letra 'e', 05 a letra 't' e 25 a letra 's'. Numa tabela, para mais facilmente visualizar, temos:

'e' = 02
't' = 05
's' = 25

Portanto, para escrevermos a palavra 'teste' codificada, ficamos com: 0502250502

As entradas devem ser da seguinte forma:

1 - O usuário entrará com uma variável T do tipo inteiro, a qual determina a quantidade de palavras que serão decodificadas.
2 - Em uma string de 26 caracteres, o usuário irá digitar a ordem de atribuição de números as letras (como foi feito no exemplo acima). A atribuição será sequencial, ou seja, se nesta string o usuário digitar: abcdefghijklmnopqrstuvwxyz. a letra 'a' será 01, a letra 'b' será 02, a letra 'c' será 03 e assim por diante.
3 - Em uma string contendo apenas números, o usuário iria digitar a palavra codificada, como feito no exemplo acima, para a palavra 'teste'. Ou seja, se, como feito na entrada (2), o usuário digitar: abcdefghijklmnopqrstuvwxyz, para escrevermos 'teste', neste caso, o usuário deverá digitar na entrada (3), os seguintes valores: 2005192005.

Saídas:

As palavras decodificadas.


Espero ter ficado claro o que eu gostaria de fazer. Fico no aguardo.

OBS.: A minha maior dúvida é esta etapa de associar números as letras, ou seja, fazer 'a' = "01", 'b' = "02" e assim por diante.
OBS.2: Pensei em fazer esta associação entre letras e números com diversos "if", porém, pensei haver outra forma, pois, ficará enorme.

QUERO AJUDA EM RELAÇÃO AS OBSERVAÇÕES DEIXADAS ACIMA, NÃO UM CÓDIGO PRONTO. Obrigado.


  


2. Re: PROGRAMA PARA DECODIFICAR

Paulo
paulo1205

(usa Ubuntu)

Enviado em 20/08/2016 - 14:43h

Jucemar escreveu:

Espero ter ficado claro o que eu gostaria de fazer. Fico no aguardo.


Ficou claro sim, especialmente a parte em que você diz que você quer fazer.

Por isso mesmo, esse “fico no aguardo”, que faz parecer que você no fundo gostaria que alguém fizesse o trabalho por você, não costuma ser muito bem recebido aqui nesta comunidade.

Se você quiser ajuda específica, diga qual ajuda específica é essa de que você precisa. Se você for vago, a chance de receber ajuda é pequena. Se for específico, a chance aumenta muito.


3. Re: PROGRAMA PARA DECODIFICAR

Jucemar Vieira Junior
Jucemar

(usa Ubuntu)

Enviado em 20/08/2016 - 14:59h

paulo1205 escreveu:

Jucemar escreveu:

Espero ter ficado claro o que eu gostaria de fazer. Fico no aguardo.


Ficou claro sim, especialmente a parte em que você diz que você quer fazer.

Por isso mesmo, esse “fico no aguardo”, que faz parecer que você no fundo gostaria que alguém fizesse o trabalho por você, não costuma ser muito bem recebido aqui nesta comunidade.

Se você quiser ajuda específica, diga qual ajuda específica é essa de que você precisa. Se você for vago, a chance de receber ajuda é pequena. Se for específico, a chance aumenta muito.


A ajuda que eu queria são as observações que eu deixei logo abaixo da postagem. Não esperava que fizessem pra mim.




4. Re: PROGRAMA PARA DECODIFICAR [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 20/08/2016 - 15:04h

Você editou a mensagem e colocou uma dúvida mais específica. Ótimo.

Diversos ifs não seria mesmo uma boa ideia, até porque você deu a entender que a associação entre caracteres e valores numéricos não será necessariamente constante. A forma de fazer, portanto, é com duas tabelas de associação: uma no sentido caráter->código, usada para codificar, e outra no sentido código->caráter, usada na decodificação.

Você pode implementar essas tabelas usando arrays.


5. Re: PROGRAMA PARA DECODIFICAR [RESOLVIDO]

Jucemar Vieira Junior
Jucemar

(usa Ubuntu)

Enviado em 20/08/2016 - 15:35h

paulo1205 escreveu:
Você pode implementar essas tabelas usando arrays.


Seria com arrays de 2 dimensões? Estou tentando até agora e não cheguei a uma conclusão.




6. Re: PROGRAMA PARA DECODIFICAR

Perfil removido
removido

(usa Nenhuma)

Enviado em 20/08/2016 - 17:04h

Você poderia fazer algo como:

char c;
int valor;

scanf ("%c",c);

valor = (int) (c-'a'+1);


Você precisa ter certeza de que c recebeu letra minúscula.
Essa conta c-'a'+1 retorna um número que equivale à posição da letra na sequência.

Por exemplo, se c='a', resulta que 'a'-'a' = 0 e somando 1 fica valor = 1.
E para o resto segue o mesmo.

Agora só falta um modo de expressar algarismos 0 .. 9 como 00 .. 09.


----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



7. Re: PROGRAMA PARA DECODIFICAR [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 20/08/2016 - 17:20h

listeiro_037 escreveu:

Essa conta c-'a'+1 retorna um número que equivale à posição da letra na sequência.


Hummm... Retorna a posição naquela sequência. Pelo que ele falou, pareceu-me que as letras podem vir em qualquer ordem (e quantidade), para ter um código diferente a cada execução.

Se eu tiver entendido erroneamente, esse meio de fazer pode ser suficiente -- e mais simples.

Agora só falta um modo de expressar algarismos 0 .. 9 como 00 .. 09.


Acho que o zero antes só será relevante na hora de fazer a entrada é saída de dados. Tanto printf() quanto scanf() lidam com eles com facilidade.


8. Re: PROGRAMA PARA DECODIFICAR

Jucemar Vieira Junior
Jucemar

(usa Ubuntu)

Enviado em 20/08/2016 - 17:33h

paulo1205 escreveu:

listeiro_037 escreveu:

Essa conta c-'a'+1 retorna um número que equivale à posição da letra na sequência.


Hummm... Retorna a posição naquela sequência. Pelo que ele falou, pareceu-me que as letras podem vir em qualquer ordem (e quantidade), para ter um código diferente a cada execução.


No momento em o programa solicitar as letras, uma string de 26 caracteres, a atribuição dos números será feita na ordem em que as letras forem colocadas. Ou seja, a ordem é igual para todos, as letras são diferentes.

Exemplo.: Se entrarem com as letras: qwertyuiopasdfghjklzxcvbnm , 'q' = "01", 'w' = "02" e assim por diante. Se digitado: abcdefgh...z, 'a' = "01", 'b' = "02" e assim por diante.





9. Re: PROGRAMA PARA DECODIFICAR

Jucemar Vieira Junior
Jucemar

(usa Ubuntu)

Enviado em 20/08/2016 - 17:35h

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int T, i;
char atrib_str[27], msg_cod[255], msg_decod[255], str_num[27][4]= {"01", "02", "03", "04", "05",
"06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17","18", "19", "20", "21", "22", "23", "24", "25", "26"};

printf("Numero de mensagens T: "); scanf("%d", &T);

for (i = 0; i < T; i++)
{
printf("Ordem de atribuição de letras em numeros: "); scanf("%s[^\n]", atrib_str);
printf("Mensagem codificada: "); scanf("%s", msg_cod);

char atrib_msgcod[3][3]

//Criar uma tabela que guarda de 2 em 2, os termos da mensagem codificada.
for (i = 0; i < strlen(msg_cod)/2; i = i + 2)
{
atrib_msgcod[i][0] = msg_cod[i];
atrib_msgcod[i][1] = msg_cod[i+1];
}
}
return 0;
}


Isso foi o que eu consegui pensar e fazer até agora. Mas estou trancado.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts