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

P@ko

text-to-morse por P@ko

6 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para TheDark

Sim tens toda a razão nos pontos colocados e sim trata-se de C puro. Um principiante não passa de um aprendiz!!!  :wallbash:

Já fiz a alteração para as plicas entretanto no 1º array.

Quanto aos pontos 3 e 4 continuo sem entender como os resolver.

Se der pra dar uma ajuda agradeço imenso.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obg já foi uma grande ajuda pra entender o problema e passar ao próximo passo  :).

Agradecido por tudo

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