Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

johnfcporto

Exercício Labirinto

Mensagens Recomendadas

johnfcporto

O exercício é o seguinte:

Escreva uma aplicação para desenhar um labirinto no ecrã a partir da informação guardada num ficheiro de texto, como é ilustrado na coluna esquerda da tabela seguinte. O labirinto tem de ser constituído pelas letras maiúsculas T ou X, * (asterisco) e espaços.

Exemplo 1:

http://imageshack.us/photo/my-images/194/desenholabirinto.png

A informação sobre o labirinto está no ficheiro de texto designado LAB.IN, cujo formato é

ilustrado na coluna direita da tabela anterior. Cada linha desse ficheiro corresponde a uma linha

do labirinto. Os algarismos indicam o número de repetições do carácter seguinte. A letra b

(minúscula) representa os espaços brancos no labirinto. O ficheiro de saída contendo o labirinto

desenhado, será designado por LAB.OUT.

Não tou a conseguir fazer, se me puderem ajudar.

Nota: Os ficheiros de texto aqui tem formato .txt ou .in.... nao tou a perceber

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Resolvi esse exercício à dias a um amigo meu. :)

Escusado será dizer que não te vou dar o código. Onde é que tens dúvidas?

Edit: Podes colocar os ficheiros com a extensão .in ou .out que consegues abrir depois no bloco de notas.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AngusYoung

Não sei / Não cheguei ao nível de fazer esse tipo de exercícios, mas começando por um pouco de pseudocódigo, tens de:

- Fazer com que o programa leia o texto e identifique o tipo de caracter;

- Fazer com que o programa faça uma ação ao identificar o caracter, por exemplo:

                - Ao ler "T", fazer print de um quadrado;

                - Ao ler "S", fazer print de um espaço;

E por aí fora.


Isto porque, saber a composicão do granito, os estágios da evolucão psicológica humana ou as deambulacões do Sartre não indicam puto sobre as competências de alguém num determinado campo específico e muito menos sobre o que as pessoas gostam de fazer ou a sua capacidade de aprendizagem. - bubulindo, 15 de Fevereiro de 2013 - 02:01

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
johnfcporto

Percebi que tenho de ler o ficheiro e guardar cada linha num vector de strings..

o problema está depois em tratar esse vector de strings...

Porque depois tenho de atribuir o algarismo ao número de repetiçoes do caracter seguinte e o b aos espaços em branco.... e isso nao tou a ver como o vou fazer

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AngusYoung

Não sei se é boa idéia guardar cada linha num array.

Mas, quem sou eu, para andar para aí a ensinar gente mais avançada que eu.


Isto porque, saber a composicão do granito, os estágios da evolucão psicológica humana ou as deambulacões do Sartre não indicam puto sobre as competências de alguém num determinado campo específico e muito menos sobre o que as pessoas gostam de fazer ou a sua capacidade de aprendizagem. - bubulindo, 15 de Fevereiro de 2013 - 02:01

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KTachyon

Se for mesmo só receber e imprimir o labirinto, só precisas de transformar o input numa só String em que representas as linhas como estarão no ficheiro (\n).

O que podes fazer é ler o ficheiro para uma String, analisar caracter a caracter e colocar o que é pretendido na String final. Em principio, com uma cadeia de ifs ou um switch case, resolves o problema. Só tens a questão de se o valor que indica o número de repetições poder ou não ser maior que 9.

Podes mesmo simplificar substituindo na String de input as ocorrências de 'b' por ' ':

String input = input.replaceAll("b", " ");

switch (one_char) {
    case ' ':
    case 'T':
        // escrever para a string final (função com ciclo for para número de repetições)
        repetitions = 0;
        break;
    case '\n':
        // escrever para a string final (uma única vez)
        // reset às repetitions também pode ser uma boa ideia
        break;
    default:
        if (one_char >= '0' && one_char <= '9') { // ver tabela ascii
            repetitions *= 10; // reter o valor já existente na variável
            repetitions += (int) (one_char - '0');
        }
        else { // error }
}


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

via código como? nao percebo...

 try {
            FileWriter ficheiro = new FileWriter("LAB.IN");
            BufferedWriter output = new BufferedWriter(ficheiro);
            output.write("1T1b5T\n1T2b1T1b2T\n1T1b1T2b2T\n1T3b1T1b1T\n3T3b1T\n1T3b1T1b1T\n5T1*1T");
            output.close();
        } catch (Exception e) {
            System.err.println("Erro: " + e.getMessage());
        }

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.