• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

a_c

Código Morse para texto

1 mensagem neste tópico

Ola!

Sou novo tanto neste forum como em programacao em C e por isso venho pedir ajuda. xD

Desde ja agradeco!

Trata-se de um programa para a universidade que tem de ser entregue ate hoje a meia noite, pelo menos um prototipo intermedio executavel... Por isso e urgente.

O programa devera receber um codigo em Morse, um dicionario com as palavras possiveis e dentro das mesmas apurar as possiveis com o respectivo codigo e ainda indicar o numero possivel de frases (independentemente se fazem sentido ou nao) que utilizam todo o codigo...

Aqui esta o algoritmo para melhor compreensao:

1. Receber código em Morse;

2. Receber um número inteiro que representa o número de palavras correspondentes ao dicionário assim como o respectivo dicionário.

3. Verificar na tabela as letras possíveis com o primeiro, os dois primeiros, os três primeiros e os quatro primeiros caracteres do código em Morse - 4 é o número máximo de símbolos Morse por carácter;

3.1. Considerar apenas o primeiro © carácter, verificar na tabela de Código Morse se corresponde a uma letra;

3.1.1. Se corresponde a uma letra, guardar a mesma e passar ao ponto seguinte. Senão apenas passar ao ponto seguinte;

3.2. Considerar o primeiro © e o segundo (c+1) carácter, verificar na tabela de Código Morse se correspondem a uma letra;

3.2.1. Se correspondem a uma letra, guardar a mesma e passar ao ponto seguinte. Senão apenas passar ao ponto seguinte;

3.3. Considerar o primeiro ©, segundo (c+1) e terceiro (c+2) carácter, verificar na tabela de Código Morse se correspondem a uma letra;

3.3.1. Se correspondem a uma letra, guardar a mesma e passar ao ponto seguinte. Senão apenas passar ao ponto seguinte;

3.4. Considerar o primeiro ©, segundo (c+1), terceiro (c+2) e quarto (c+3) carácter, verificar na tabela de Código Morse se correspondem a uma letra;

3.4.1. Se correspondem a uma letra, guardar a mesma e passar ao ponto seguinte. Senão apenas passar ao ponto seguinte;

4. Verificar no dicionário fornecido as palavras que se iniciam pelas letras adquiridas no ponto anterior ou que apenas são formadas pelas  mesmas;

4.1. Considerar apenas o primeiro carácter de cada palavra;

4.2. Comparar carácter obtido em 4.1 à letra obtida (l);

4.3. Se for o mesmo guardar, senão ignorar;

4.3.1. Se l=0 passar para o ponto 12 com x=0;

5. Construir uma linha de código para cada letra possível;

5.1. Verificar qual a codificação em Morse correspondente à letra;

5.2. Apagar a codificação da letra no início do código em Morse;

5.3. Escrever a letra no início do código obtido no ponto 5.2, (letra possível n)+(restante código Morse);

6. Repetir ponto 3 e verificar se as letras agora adquiridas são o próximo carácter de alguma palavra começada pelas letras anteriormente adquiridas;

6.1. Considerar apenas o primeiro © carácter, verificar na tabela de Código Morse se corresponde a uma letra;

6.1.1. Se corresponde a uma letra, guardar a mesma e passar ao ponto seguinte. Senão apenas passar ao ponto seguinte;

6.2. Considerar o primeiro © e o segundo (c+1) carácter, verificar na tabela de Código Morse se correspondem a uma letra;

6.2.1. Se correspondem a uma letra, guardar a mesma e passar ao ponto seguinte. Senão apenas passar ao ponto seguinte;

6.3. Considerar o primeiro ©, segundo (c+1) e terceiro (c+2) carácter, verificar na tabela de Código Morse se correspondem a uma letra;

6.3.1. Se correspondem a uma letra, guardar a mesma e passar ao ponto seguinte. Senão apenas passar ao ponto seguinte;

6.4. Considerar o primeiro ©, segundo (c+1), terceiro (c+2) e quarto (c+3) carácter, verificar na tabela de Código Morse se correspondem a uma letra;

6.4.1. Se correspondem a uma letra, guardar a mesma e passar ao ponto seguinte. Senão apenas passar ao ponto seguinte;

7. Ignorar as letras que não cumprem a condição do ponto 6;

8. Para palavras formadas apenas por uma letra ou que tenham sido concluídas, siga para o passo seguinte, senão volte ao ponto 3;

9. Criar bifurcações para cada linha de código; uma (letra possível n)+(letra possível n+1)+(restante código Morse), outra (letra possível n)+(espaço)+(letra possível n+1)+(restante código Morse);

9.1. Escrever numa linha as letras previamente adquiridas, a letra adquirida e o restante código em Morse;

9.2. Numa outra linha escrever as letras previamente adquiridas, deixar um espaço e escrever o restante código em Morse;

10. Voltar ao ponto 3 até ao final do código em Morse fornecido;

11. Contar o número de frases obtidas (x);

11.1. Guardar a primeira frase obtida;

11.2. Comparar a frase n às primeiras n-1 frases guardadas;

11.3. Se frase n for diferente das frases n-1, guardar frase, senão ignorar;

11.4. Voltar ao ponto 11.2 até ao final do código em Morse fornecido;

12. Escrever o número obtido no ponto 11.

12.1. Imprimir o número de frases (x) guardadas.

Fim Algoritmo

o codigo ate ao momento:

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<errno.h>
#include <fstream> 

#define MAX 1000
#define MIN 15



typedef struct
{
        char word[MIN];
        }dic;
        

void Insert(void);
void Translate();
int ConsultDictionary();

    
int main()
{
      
      
       Insert();



    return 0;
}

void Insert(void)
{
     
      char c, seq[MAX] ;
      int  i, cont=0, count=0 ;
      int num; 
  char pal[20][MAX];
  char alph[1000];
      
           

  
                  printf("Type the Morse code.\n") ;
                  scanf("%c", &c);  /* Reads the first character */
         
                  while(c != '\n' && cont<MAX) 
                  {
                    seq[cont] = c ;  //stores character by character at different addresses of the array
                    cont++ ;    // increment array address
                    scanf("%c", &c) ;  /* Reads the next character */
                  }

			  printf("\nEnter the number of words in the dictionary:\n"); 
                  scanf ("%d", &num); //reads the number of words 
             
				for (i=0;i<num+1; i++) 
{
	gets(pal[i]);  
	fflush(stdin); //cleaner buffer 
	count++;
}     
               


				 Translate(seq);
}

void Translate (seq)
{

   for (i=0; i<1000; i++)
			  {
				  if (seq[i]==('.')) {alph[i]='E';
				  if (seq[i] ==('-')) alph[i]='T'; 

                      strcat (seq[i], seq[i+1]);

				  if (seq[i]==('.-')) alph[i]='A';
				  if (seq[i]==('-.')) alph[i]='N';
				  if (seq[i]==('--')) alph[i]='M';
                      if (seq[i]==('..')) alph[i]='I';

				  strcat (seq[i], seq[i+2]);

				  if (seq[i]==('...')) alph[i]='S';
				  if (seq[i]==('---')) alph[i]='O';
				  if (seq[i]==('-.-')) alph[i]='K';
				  if (seq[i]==('--.')) alph[i]='G';
				  if (seq[i]==('-..')) alph[i]='D';
				  if (seq[i]==('.-.')) alph[i]='R';
				  if (seq[i]==('.--')) alph[i]='W';
				  if (seq[i]==('..-')) alph[i]='U';

				  strcat (seq[i], seq[i+3]);
				  if (seq[i]==('-...')) alph[i]='B';
				  if (seq[i]==('....')) alph[i]='H';
				  if (seq[i]==('.---')) alph[i]='J';
				  if (seq[i]==('.-..')) alph[i]='L';
				  if (seq[i]==('-.--')) alph[i]='Q';
				  if (seq[i]==('..-.')) alph[i]='F';
				  if (seq[i]==('-.--')) alph[i]='Y';
				  if (seq[i]==('--..')) alph[i]='Z';
				  if (seq[i]==('-.-.')) alph[i]='C';
				  if (seq[i]==('-..-')) alph[i]='X';
				  if (seq[i]==('...-')) alph[i]='V';
			  }

}

o problema neste momento e como traduzir 1º caracter, o 1º e 2º, o 1º 2º e 3º, e o 1º 2º 3º e 4º caracter...

nao sei como fazer.  :wallbash:

se tiver erros estejam a vontade de os apontar e se tiverem sugestoes ate agradeco!  :)

obrigado!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora