Jump to content
Sign in to follow this  
P@ko

text-to-morse por P@ko

Recommended Posts

P@ko

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

Share this post


Link to post
Share on other sites
Baderous

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.

Share this post


Link to post
Share on other sites
TheDark

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.

Share this post


Link to post
Share on other sites
P@ko

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

Share this post


Link to post
Share on other sites
TheDark

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.

Share this post


Link to post
Share on other sites
P@ko

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

Agradecido por tudo

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
Sign in to follow this  

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