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

Sign in to follow this  
johnfcporto

Exercício Labirinto

Recommended Posts

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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
bioshock

Não te esqueças que a aplicação também pede que insiras o labirinto via código se bem me lembro.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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());
        }

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  

×

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.