Jump to content

text-to-morse por P@ko


P@ko
 Share

Recommended Posts

Alguém pode dar uma ajuda com um trabalho de passar texto para código morse?

Até ao momento construí o seguinte código:

#include<stdio.h>
#include<iostream.h>
#include<ctype.h>
int main(void)
{
int i=0, j=0, k=0, iL;

char alph[38]={ ‘ ’, ‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘O’, ‘P’, ‘Q’, ‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’, ‘X’, ‘Y’, ‘Z’, ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘\0’};

int morse={“    ”, “.-”, “-...”, “-.-.”, “-..”, “.”, “..-.”, “--.”, “....”, “..”, “.---”, “-.-”, “.-..”, “--”, “-.”, “---”, “.--.”, “--.-”, “.-.”, “...”, “-”, “..-”, “...-”, “.--”, “-..-”, “-.--”, “--..”, “.----”, “..---”, “...--”, “....-”, “.....”, “-....”, “--...”, “---..”, “----.”, “-----”};

char *str1;
printf (“Insira um texto e pressione enter: \n”);
scanf (“%s”, str1);
iL=strlen (str1);
for (k=0;  k<=iL; k++)
str1[k]=touper(str1[k]);
for (j=0; j<=38; j++)
{
if (str1[i]==alph[j])
printf (“%s”, morse[j]);
}
getchar();
return 0;
}

Ao escrever o texto em morse o programa deve seguir as seguintes regras para a apresentação do código morse:

1. cada letra morse é separada da letra seguinte (pertencendo a mesma palavra) por um espaço,

2. as palavras são separadas por quatro espaços,

3. as linhas não podem ter mais de 80 caracteres,

4. uma palavra não pode ser cortada ao meio (entre duas linhas).

Neste momento não sei como resolver os pontos 3 e 4.

Se der pra dar uma opinião sobre o programa, e no caso de ter erros agradeço as correcções.

Saudações

Link to comment
Share on other sites

Para impedir que sejam lidos mais de 80 caracteres tens de indicar esse valor na função de leitura:

scanf("%80[^\n]",str); ////lê no máximo 80 caracteres para uma string ou, caso o input seja menor que 20, lê até encontrar um '\n' que indica mudança de linha

Assim até fica melhor do que o que tens, porque da forma que tens, só vais ler até ao primeiro caracter branco (que vai ser o 1º espaço que separa as letras). Assim como eu fiz, ele lê até à mudança de linha.

Para o 4, tens de jogar com os espaços, penso eu de que.

Link to comment
Share on other sites

No ponto 3, não fará mais sentido que sejam as linhas convertidas para morse que não podem ter mais de 80 caracteres, já que os pontos se referem a "regras para a apresentação"? Isto relaciona-se com o ponto 3, significando que

"uma palavra não pode estar em duas linhas"

e

"uma linha não pode ter mais que 80 caracteres, de modo a que possa ser apresentada numa consola standard (com 80 colunas)".

Já agora, esse código é C puro. E algo de errado se passa nas declarações dos arrays. O 1º é um array de chars e está a ser preenchido com arrays de char (aspas em vez de plicas), e o 2º é um array de int?

Desaparecido.

Link to comment
Share on other sites

As alíneas 3 e 4 impedem que faças logo output do código morse à medida que o vais descodificando.

Já ouviste falar em "dividir para conquistar"? É uma máxima que em programação, normalmente, tem resultados excelentes 🙂

Assim, sugiro que, numa 1ª fase, alteres o programa para que, em vez de utilizares o printf para escrever directamente no ecrã, escrevas o código morse para um array de char, e no fim de cada palavra (dica: quando encontrares um espaço) escrevas esse array para o ecrã, mais os 4 espaços, e voltas a escrever no início do array. Isto fará com que, em cada passo, tenhas uma palavra completa no array.

Terminado o código para o parágrafo anterior, cria uma variável (chamemos-lhe contador) para contares o número de caracteres que já tens na linha actual. Isto é, por cada palavra em morse que escrevas, adicionas o número de caracteres que compõem essa palavra em morse (não esquecendo os espaços) ao contador. Se o contador não ultrapassar 80, escreves 4 espaços no ecrã; se ultrapassar 80, escreves um '\n'. Finalmente escreves a palavra em morse.

Se tiver sido demasiado confuso, diz.

Desaparecido.

Link to comment
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
 Share

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