Jump to content
agrot

Codificação e descodificação morse

Recommended Posts

agrot

Tenho as duas seguintes duvidas em linguagem C

1ª Para codificar ou descodificar em morse é-me pedido para pedir qual a frase, a codificar ou descodificar, por escrito no teclado ou por leitura ficheiros.

No caso de ficheiros é o utilizador do programa que tem que me indicar a drive e o nome do ficheiro, por enquanto tenho assim:

                        File *fp;

char nome[100]

puts("Introduza o nome do ficheiro:"\n)

gets(nome);

if (fp==NULL)

printf ("Abertura sem sucesso"\n);

else {

Isto está correcto?

E como poderei utilizar a função que tenho para codificar e descodificar para utilizar os caracteres inseridos no ficheiro.

2ª A descodificar o morse não dando para utilizar o comando switch tenho os seguintes comandos:

if( strcmp( c, ".-" ) == 0  code = "A";

else if( strcmp( c, "-...") == 0 code = "B";

.

.

.

Continuando os caracteres todos, assim o visual studio informa-me que esta a correr um erro como posso corrigir esse erro.

Se for possivel responder o mais rápido possível agradeço

Cumprimentos Agrot

Share this post


Link to post
Share on other sites
Localhost

@agrot: dessa maneira vais ter que ter 26 condições seguidas, achas que isso é viável? E que tal teres um vector com as letras codificadas em morse e depois para cada letra da string que vais codificar ires buscar a esse vector a respectiva letra codificada?

Imagina que a letra actual está contida na variável c e que o vector se chama coded_chars:

strcat (coded_string, coded_chars[c - 97]);

Algo como isto, diz-te alguma coisa?


here since 2009

Share this post


Link to post
Share on other sites
agrot

Poderei passar assim também a codificação e a descodificação ao mesmo tempo dessa maneira? ou teria que ter dois comandos para cada uma? Sendo assim o comando aceita a variável com vários caracteres, porque já codificado é apresentado com pontos e traços para o programa descodificar.

Terei que utilizar o código morse todo tens aqui o morse inteiro

http://pt.wikipedia.org/wiki/C%C3%B3digo_morse

Share this post


Link to post
Share on other sites
Localhost

Tens de criar duas funções separadas para descodificar/codificar. Para descodificar vais ter um pouco mais de trabalho. Primeiro faz a função que codifica e apresenta-a aqui (utiliza aquilo que te disse na minha última resposta).


here since 2009

Share this post


Link to post
Share on other sites
agrot

Tive a tentar ver como utilizaria strcat mas ainda não compreendo como é que vai buscar os pontos e os traços do morse, este é o meu primeiro ano de programação e ainda não me ajeitei com isto. Se puderes dar um exemplo de outra função com strcat para poder compreender o funcionamento.

Share this post


Link to post
Share on other sites
Localhost

A função strcat concatena a uma string destino uma string origem.

Tens aqui um link acerca do seu funcionamento: http://www.cplusplus.com/reference/clibrary/cstring/strcat/.

Como sabes cada char tem o seu respectivo código ascii. Supondo que todas as letras são minúsculas e sabendo que a letra 'a' tem como código ascii o número 97 podemos aceder ao vector com as letras codificadas e temos automaticamente a respectiva tradução para morse.

Vou-te dar um exemplo:

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

#define MAX 5
#define LIM 120

int main (void)
{
char coded_chars[MAX][LIM] = {"ola","adeus","tudo bem?","lol"}, coded_string[LIM] = "\0", input_string[LIM];
int k = 0;

printf ("Input string: ");
scanf ("%s", input_string); // Devia utilizar a fgets, só foi para ficar mais simples

for ( k = 0; input_string[k]; k++ )
{
	if ( input_string[k] - 97 < MAX )
		strcat (coded_string, coded_chars[input_string[k] - 97]);
}

printf ("%s\n", coded_string);

return 0;
}

Exemplo de input/output:

localh0st@localh0st-laptop:~/Desktop$ ./a.out

Input string: abcd

olaadeustudo bem?lol

Percebeste onde quis chegar com este exemplo? Compila e executa aí.


here since 2009

Share this post


Link to post
Share on other sites
agrot

Mas neste caso terei que utilizar os pontos necessários para todos os caracteres alfanuméricos e especiais? Ele vai buscar a localização na string para cada caracter certo?

Share this post


Link to post
Share on other sites
Localhost

Não. A solução aí será teres vários vectores ou então teres mesmo um vector com 255 (?) posições para cada código ascii e depois nem precisares de subtrair nada para acederes ao respectivo valor. Para preencheres esse vector fazes um ciclo simples.

Com o vector de 255 (?) posições farias:

strcat (coded_string, coded_chars[c]);


here since 2009

Share this post


Link to post
Share on other sites
k-32

Ola, boa tarde.

VIVA o Isel  :)

Eu só estou a começar agora o projecto para programação mas pudias-me dizer quando é para entregar. É até hoje á meia noite ou amanha á meia noite.

Obrigado.

Share this post


Link to post
Share on other sites
Xpirito

Eu fiz esse programa, mas em C#

Criei um array em que em cada uma das posições ia uma letra. No meu caso apenas 26 posições.

Depois criei um array com as posições de código morse. Para cada letra inserida em alfabeto, corespondia a mesma posição no array de codigoMorse. A descodificação é mais complicada, porque separar pontos e hifens é bem mais complicado. :)


Para perguntas idiotas, respostas estúpidas!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.