Programa em C (preciso de ajuda)

13 respostas
P

Tenho que fazer um programa em C que abra um ficheiro .txt e que traduza o que está no ficheiro para código morse no ecran em que:

  • cada letra morse é separada da letra seguinte por um espaço,
  • as palavras são distanciadas por quatro espaços,
  • as linhas não terão mais de 80 caracteres,
  • 1a palavra não poderá ser cortada ao meio .

alguem pode ajudar?

Muit obrigado

.- 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
    1 ·----
    2 ··—
    3 ···–
    4 ····-
    5 ·····
    6 -····
    7 --···
    8 —··
    9 ----·

já fiz isto para chamar o ficheiro, mas n consigo traduzir…

#include <stdio.h>

int main (void){

int end;
  
while (end != EOF){

	char buffer[81];

	end = scanf ("%s",buffer);

	if (end != EOF) printf ("%s    " ,buffer);

	;

}

return 0;
}

13 Respostas

marcelohd02

Amigo essa Comunidade é de JAVA . favor procurar uma comunidade no Orkut . Linguagem de Programação C e poste suas duvidas

P

Desculpa amigo, pensei que “outras linguagens” fosse o sitio para postar outras linguagens para alem de Java.
Pelos vistos o erro foi meu, nao volta a acontecer.

Cumprimentos

renamed

Ola perik.

  1. Ignore o que foi dito pelo marcelohd02 … aqui realmente é a parte do forum para outras linguagens;
  2. Da proxima vez, coloque seu codigo entre as tags “code” para ficar mais visível… tem um botãozinho na mesma pagina que vc usa pra escrever uma mensagem pro topico…
  3. Seu problema…

Você sabe ao menos abrir o arquivo para ler o que há nele?
Depois que vc abrir o arquivo, vai ler linha a linha e tratar a linha que vc leu através dessas regras que vc postou acima…
Leia uma letra do vetor de chars (linha do arquivo) separadamente (com tamanho 81)…

  • Se vc ler o espaco, incremente o contador de espaços
  • Se vc ler um espaço e depois uma letra zere o contador de espaços e coloque essa letra em seu retorno…
  • Se vc ler quatro espaços, zere o contador de espaços e insira um espaço na sua string de retorno…

ok?

P

muito obrigado pela resposta! já tive a tentar mas não consegui nenhum resultado prático, a nao ser muitos erros.
Não queria tar a abusar da tua paciência mas podias pôr um exemplo só com uma letra para eu perceber.
Mais uma vez muito obrigado pela resposta.

Cumprimentos, Pedro Rikardo

G

renamed

Acho que as regras do problema dele se aplicam ao texto em código morse que será impresso.

perik

Você faltou nas aulas de programação né? :stuck_out_tongue:
Quanto tempo você tem para entregar esse exercício? Porque você vai ter que aprender um bocado.

P

2 dias… =(

pvrsouza

Srs,

Como sou inciante em Java, este tipo de estudo de caso sempre é interessante para mim.
estou implementando esse caso em Java e estou com um problema na saida do meu vetor. Ele inicializa com null e mostra 'null' no system.out.print

PrincipalMorse.java
public class PrincipalMorse {
    public static void main(String[] args){
        String palavra = "Aqui entra a frase que eu quero que seja convertida";
        
        //vetor de palavras
        String[] vetPalavras = palavra.split(" ");
        //vetor de palavras convertidas
        String[] vetPalavrasConvertidas = new String[vetPalavras.length];

        for(int x=0;x<vetPalavras.length;x++){
            //quebra a palavra em um vetor de char
            char[] vetLetras = vetPalavras[x].toCharArray();
            //varre o vetor de letras
            for(int y=0;y<vetLetras.length;y++){
                vetPalavrasConvertidas[x] += FuncoesMorse.converteCaracterEmMorse(vetLetras[y]);
            }
        }
        
        for(int x=0;x<vetPalavrasConvertidas.length;x++){
            System.out.println(vetPalavrasConvertidas[x]);
        }
    }
}
FuncoesMorse.java
public class FuncoesMorse {
    public static String converteCaracterEmMorse(char letras){
        char letrasUpperCase = Character.toUpperCase(letras);
        String letraConvertida="";
        switch (letrasUpperCase){
            case ' ': letraConvertida = " "; break;
            case 'A': letraConvertida = ".-"; break;
            case 'B': letraConvertida = "-..."; break;
            case 'C': letraConvertida = "-.-."; break;
            case 'D': letraConvertida = "-.."; break;
            case 'E': letraConvertida = "."; break;
            case 'F': letraConvertida = "..-."; break;
            case 'G': letraConvertida = "--."; break;
            case 'H': letraConvertida = "...."; break;
            case 'I': letraConvertida = ".."; break;
            case 'J': letraConvertida = ".---"; break;
            case 'K': letraConvertida = "-.-"; break;
            case 'L': letraConvertida = ".-.."; break;
            case 'M': letraConvertida = "--"; break;
            case 'N': letraConvertida = "-."; break;
            case 'O': letraConvertida = "---"; break;
            case 'P': letraConvertida = ".--."; break;
            case 'Q': letraConvertida = "--.-"; break;
            case 'R': letraConvertida = ".-."; break;
            case 'S': letraConvertida = "..."; break;
            case 'T': letraConvertida = "-"; break;
            case 'U': letraConvertida = "..-"; break;
            case 'V': letraConvertida = "...-"; break;
            case 'X': letraConvertida = "-..-"; break;
            case 'Z': letraConvertida = "--.."; break;
            case 'Y': letraConvertida = "-.--"; break;
            case 'W': letraConvertida = ".--"; break;
        }
        return letraConvertida+" ";
    }
}

Ex: Converter: "Aqui entra a frase que eu quero que seja convertida"
A saida:
null.- --.- ..- ..
null. -. - .-. .-
null.-
null..-. .-. .- ... .
null--.- ..- .
null. ..-
null--.- ..- . .-. ---
null--.- ..- .
null... . .--- .-
null-.-. --- -. ...- . .-. - .. -.. .-

Porque está saindo esse 'null'?

G

perik

2 dias é muito pouco tempo. Eu teria que rever algumas coisas do C pra te ajudar, não vai dar tempo. Desculpas. :(

pvrsouza

Também sou iniciante e não sei pq diabos está aparecendo esse null.
Eu implementei assim:

MorseCode.java

public class MorseCode {
	public static String toMorse(char c) {
		
		if ( !(((c >= 48) && (c <= 57)) || ((c >= 65) && (c <= 90)) || ((c >= 97) && (c <= 122))) ) { // se nao ascii 0-9, A-Z, a-z
			return null;
		}
		
		if (Character.isDigit(c)) {
			switch(c) {
			case '1': return ".----";
			case '2': return "..---";
			case '3': return "...--";
			case '4': return "....-";
			case '5': return ".....";
			case '6': return "-....";
			case '7': return "--...";
			case '8': return "---..";
			case '9': return "----.";
			case '0': return "-----";
			}
		}
		
		c = Character.toUpperCase(c);
		switch(c) {
		case 'A': return ".-";
		case 'B': return "-...";
		case 'C': return "-.-.";
		case 'D': return "-..";
		case 'E': return ".";
		case 'F': return "..-.";
		case 'G': return "--.";
		case 'H': return "....";
		case 'I': return "..";
		case 'J': return ".---";
		case 'K': return "-.-";
		case 'L': return ".-..";
		case 'M': return "--";
		case 'N': return "-.";
		case 'O': return "---";
		case 'P': return ".--.";
		case 'Q': return "--.-";
		case 'R': return ".-.";
		case 'S': return "...";
		case 'T': return "-";
		case 'U': return "..-";
		case 'V': return "...-";
		case 'W': return ".--";
		case 'X': return "-..-";
		case 'Y': return "-.--";
		case 'Z': return "--..";
		}
	return null;
	}
}
testeMorse.java:
public class testeMorse {
	public static void main(String args[]) {
		
		String s = "Aqui entra a frase que eu quero que seja convertida";
		String ch;
		
		for (int i = 0; i < s.length(); i++ ) {
			if (s.charAt(i) == ' ')  {
				System.out.println();
				continue;
			}
			ch = MorseCode.toMorse(s.charAt(i));
			if (ch == null) continue;
			System.out.print(ch + " ");
		}
	}
}

resultado:

.- --.- ..- ..
. -. - .-. .-
.-
..-. .-. .- ... .
--.- ..- .
. ..-
--.- ..- . .-. ---
--.- ..- .
... . .--- .-
-.-. --- -. ...- . .-. - .. -.. .-

EDIÇÃO: Uma solução melhor foi apresentada pelo ViniGodoy nesse tópico aqui.

pvrsouza

Eu não quis fazer usando ASCII não. Eu queria realmente testar a o toCharArray, que diferente de charAt() já me retorna o vetor todo. O charAt() me passa só uma posição.

Mas gostei da forma que implementou. Ficou mais elegante.

Vou dar umapesquisada depois para ve se consigo a solução.

marcelohd02

Renan devido ao Nome e a maioria das postagens… serem em java como um dos nossos amigos res´pondeu …

GUJ
Notícias, artigos e o maior fórum brasileiro sobre Java

pvrsouza

Eu ja acho que o perik ja pode fazer em C…pelo menos a lógica já ta ai!!

marcelohd02

Bem o Algoritmo ja ta pronto né agora so resta a ele como fazer isto em C

G

É! perik queremos ver seu código em C. Deixa de ser malandro e posta essa budega pra galera!

Criado 12 de dezembro de 2009
Ultima resposta 14 de dez. de 2009
Respostas 13
Participantes 5