P@ko Posted December 3, 2009 at 01:23 AM Report Share #298530 Posted December 3, 2009 at 01:23 AM 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 More sharing options...
Baderous Posted December 3, 2009 at 01:34 AM Report Share #298531 Posted December 3, 2009 at 01:34 AM 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 More sharing options...
TheDark Posted December 3, 2009 at 12:17 PM Report Share #298560 Posted December 3, 2009 at 12:17 PM 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 More sharing options...
P@ko Posted December 4, 2009 at 12:39 AM Author Report Share #298658 Posted December 4, 2009 at 12:39 AM 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!!! 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 Link to comment Share on other sites More sharing options...
TheDark Posted December 4, 2009 at 12:57 AM Report Share #298661 Posted December 4, 2009 at 12:57 AM 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 More sharing options...
P@ko Posted December 4, 2009 at 10:30 PM Author Report Share #298743 Posted December 4, 2009 at 10:30 PM Obg já foi uma grande ajuda pra entender o problema e passar ao próximo passo 🙂 . Agradecido por tudo Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now