Você está na página 1de 6

Universidade de Braslia Departamento de Cincia da Computao/IE Semestre: 01/2010 Disciplina: Computao Bsica Trabalho Prtico 3 O objetivo desta terceira

etapa que o aluno aprenda a usar estruturas de dados do tipo matriz, subalgoritmos (funes) e manipulao de arquivos em algoritmos, bem como implement-los corretamente em programas. Especificao da terceira etapa: Problema: Implementar um programa que AUXILIA UMA PESSOA QUE EST PERDIDA EM UM LABIRINTO. Calcular o MENOR caminho, se existir, entre uma pessoa e o portal de sada do labirinto. Ao nal, deve-se mostrar qual o caminho, caso exista, que a pessoa deveria seguir para chegar a portal de sada, ou informar que no h como a pessoa chegar ao portal. Detalhamento do problema: 1. As unidades de entrada deste trabalho devero ser o disco rgido (um arquivo contendo o labirinto), bem como o teclado quando solicitado ao usurio. A unidade de sada ser o monitor de vdeo. Sero fornecidos alguns arquivos de entrada (.txt) para o labirinto, que seguiro sempre um mesmo padro. Voc tambm poder criar o seu labirinto, desde que siga o mesmo padro (caracteres utilizados e tamanho). Detalhes sobre como fazer a leitura do arquivo sero dados abaixo. 2. Padro do arquivo txt contendo o labirinto: o arquivo deve conter 20 linhas, e 30 colunas, onde em cada clula poder ser armazenado somente os seguintes caracteres: # representando uma parede . (ponto final) representando um espao vago, ou seja, onde possvel andar pelo labirinto P representando a pessoa (ponto de partida do labirinto) O representado o portal que a pessoa deve atingir, ou seja, a sada do labirinto. As posies de P e O so fixas, ou seja, mesmo que voc modifique o labirinto, a pessoa e o portal esto sempre nas mesmas posies, que so: P na posio (19,1) e O na posio (0,28). Lembrando que tanto a linha quando a coluna so contadas a partir da posio 0 (zero). Toda a borda do labirinto deve conter o caracter #, exceto na posio onde esto a pessoa e o portal. 3. Tipo de dados: A matriz que ir armazenar o labirinto (a ser lido do arquivo) deve ser declarada como char[20][31]. 4. Leitura do arquivo contendo o labirinto: ser fornecido um arquivo contendo o labirinto, denominado labirinto.txt. Este arquivo, do tipo texto, dever ser aberto, lido completamente e armazenado em uma matriz na memria RAM. Aps a leitura, o arquivo deve ser fechado, e o programa ter acesso somente a matriz contendo o

labirinto. O arquivo deve ser lido linha a linha e cada uma deve ser armazenada em uma linha da matriz. Comandos para abertura do arquivo, leitura, e armazenamento na matriz LAB (nome opcional). Ateno: modifique o caminho (path) contendo os diretrios de onde se encontra o seu arquivo (parte em negrito abaixo). A declarao do ponteiro para o arquivo (FILE *fp;) deve ser colocado junto com a declarao das variveis.
FILE fp; /* declara o ponteiro do arquivo */ /* abre o arquivo /* fp = fopen("/Users/carlacastanho/Desktop/labirinto.txt","r"); i=0; /* loop que faz a leitura do arquivo, linha a linha armazenando na matrix LAB /* while (fscanf(fp,"%s",LAB[i]) > 0) { i++; } fclose; /* fecha o arquivo /*

5. Para facilitar o manuseio do programa, devero ser dadas mensagens explicativas em alguns casos conforme indicado posteriormente nesta especificao. 6. Use variveis Mnemnicas no seu programa fonte. Por exemplo: lin_pessoa, col_pessoa, lin_portal, col_portal, LAB (OBS: So apenas sugestes de nomes para as variveis. Vocs podem definir outros nomes. O importante que elas sejam Mnemnicas, ou seja, faam sentido dentro do contexto do programa!) 7. TELA INICIAL: Ao rodar o programa, voc deve mostrar o labirinto na tela (a partir do canto superior esquerdo) e solicitar ao usurio que tecle enter para visualizar o menor caminho. 8. SADA: o seu programa deve calcular e mostrar ao usurio o menor caminho para a Pessoa chegar at o Portal percorrendo somente as posies livres. O programa deve mostrar o labirinto na tela, com o menor caminho preenchido por * (asteriscos). Em seguida deve ser dada um mensagem solicitando ao usurio que tecle enter para visualizar o caminho sendo percorrido. Aps o usurio teclar enter, voc deve mostrar animao da Pessoa (no caso o caracter P) se deslocando pelo menor caminho, e apagando os caracteres * que representam o menor caminho. Conforme a pessoa se desloca, cada caracter * da trajetria apagado e substitudo por um espao em branco. Caso no haja um caminho da Pessoa at o Portal o programa deve dar uma mensagem informando isso ao usurio. Caso exista mais de um menor caminho, qualquer um pode ser mostrado. 9. Para dar uma idia de animao quando a pessoa percorre do labirinto, basta voc ir atualizando a matriz (alterando o P de posio e gravando um espao em branco onde o P estava localizado), e mostrando a matriz na tela a cada alterao.

10. Neste trabalho voc DEVE modularizar o seu programa criando funes. Conforme j dito em sala de aula, funes tornam o seu programa mais legvel, mais fcil de se entendido, e mais curto, j que evita a duplicao de cdigo para uma mesma ao. * Devero ser criadas, no mnimo, as seguintes funes: 1 - Funo para mostrar a matriz do labirinto na tela inicial; 2 - Funo para calcular o menor caminho; Voc pode (e deve!) criar outras funes (no obrigatrias) caso identifique essa necessidade! (Ou seja, caso identifique que h trechos de cdigo se repetindo no programa, ou determinados trechos que no devem fazer parte do programa principal) Crie nomes de funes mnemnicos!!! 11. NO utilize variveis globais! 12. Calculando o menor caminho: existem diversos mtodos para voc calcular o menor caminho no labirinto. Uma sugesto voc ter uma outra matriz de inteiros que representa o labirinto, e fazer alguns clculos e processamentos utilizando esta matriz auxiliar. Veja o texto anexo ao final deste documento, onde o monitor Raul apresenta um dos mtodos para realizar esta tarefa. Lembrando que a fim de simplificar a explicao ele utilizou um labirinto menor e mais simples, contudo a idia pode ser utilizada com um labirinto de qualquer tamanho. 13. Nas funes, utilize passagem de parmetros por valor e por referncia, conforme necessrio. 14. Faa diversos testes com o seu programa, modificando o arquivo com o labirinto. Observaes Gerais: 1. Incluir cabealho como comentrio (ou seja, entre /* */), no programa fonte, de acordo com os critrios de avaliao dos trabalhos (Disponvel no Moodle). 2. A data de entrega do programa : 12/08/2010 (5a) at s 23:55 hs. Ser dada uma tolerncia de atraso sem desconto de nota para entregues at as 8:00 da manh do dia 13/08/10 (6a-feira). ANEXO na pgina seguinte!

ANEXO ENCONTRANDO O MENOR CAMINHO (elaborado pelo monitor Raul ):