Professional Documents
Culture Documents
Instituto de Ciências Exatas
Departamento de Ciência da Computação
Estrutura de Dados e Algoritmos II
Trabalho Prático I
Professora: Petrina de Assis da Silva Kimura (petrina@dcc.ufam.edu.br)
Data de entrega: 03/04/2011
Número máximo de integrantes da equipe: 3 integrantes
1) Apresentação:
2) Descrição do trabalho:
Um Mundo de Blocos pode ser descrito como um ambiente formado por um
plano que pode armazenar um conjunto de blocos, sendo que estes blocos podem ficar
empilhados. A Figura 1 mostra um exemplo de um Mundo de Blocos. O Mundo de
Blocos abaixo possui tamanho 5, o que significa que é permitido criar apenas 5 fileiras
de blocos. No entanto, um número ilimitado de blocos podem ser adicionados nele.
Figura 1: exemplo de Mundo de Bloco de tamanho 5.
Figura 2: inserção de blocos no plano vazio.
Alem de inserir novos blocos, o programa deve permitir a remoção de qualquer
bloco anteriormente inserido no Mundo de Blocos. Para isso, basta informar o
identificador do bloco a ser removido. Caso um dado bloco seja o único bloco de uma
determinada posição do plano, este plano ficará novamente vazio. Caso uma posição do
plano possuir mais de um bloco inserido e o bloco a ser removido estiver entre os outros
blocos, os blocos acima dele será ligado aos que está abaixo dele. A Figura 3 mostra um
exemplo ilustrando este caso.
Figura 3: exemplo de remoção de blocos do Mundo de Blocos
Neste programa, cada bloco possuirá um identificador único. Considere que o
primeiro bloco inserido possui identificador 0, o segundo possui o identificador 1, o
terceiro o identificador 2 e assim sucessivamente. Caso ocorra uma remoção, o
identificador usado anteriormente não poderá ser reutilizado. Por exemplo, caso 5
blocos já tenham sido inseridos e o bloco 0 é removido, quando um novo bloco for
inserido, este novo bloco possuirá identificador 5. O próximo bloco possuirá
identificador 6, e assim por diante.
Em relação ao tamanho do plano, ele será de tamanho variável. Porém, ele tem
que ser maior que 0 e menor ou igual a 10. O valor referente ao tamanho do plano será
fornecido pelo usuário como um parâmetro do programa (utilize os parâmetros argc e
argv da função main). Caso esta informação não seja fornecida como parâmetro do
programa, solicite dentro do programa este valor do usuário.
Além das funções de inserção e remoção de blocos do Mundo de Blocos, o seu
programa deverá implementar os seguintes comandos para movimentação dos blocos:
a) Bloco X sobre Y: mover o bloco X, situado em qualquer posição do plano,
para cima do bloco Y. Caso existam outros blocos em cima de Y, eles deverão ser
movidos de forma que X fique sobre Y e os demais blocos fiquem sobre X. Blocos
situados acima de X deverão ser ligados aos que estão abaixo de X.
b) Pilha de blocos X sobre bloco Y: mover o bloco X e todos os situados acima
dele para cima do bloco Y. Caso existam outros blocos em cima de Y, eles deverão ser
movidos de forma que a pilha de X fique sobre Y e os demais blocos fiquem sobre esta
pilha.
c) Bloco X sobre topo de Y: mover o bloco X, situado em qualquer posição do
plano, para o topo da pilha que possui o bloco Y. Blocos situados acima de X deverão
ser ligados aos que está abaixo de X.
d) Pilha de blocos X sobre topo de Y: mover o bloco X e todos os situados
acima dele para o topo da pilha que possui o bloco Y.
e) Plano X sobre plano Y: mover todos os blocos da posição X do plano para o
topo da posição Y do plano.
f) Ordenar Mundo: mover as pilhas de blocos das posições do plano com a
maior quantidade de blocos para as primeiras posições do plano. Por exemplo, a Figura
4 mostra a configuração do Mundo de Blocos depois da chamada deste comando.
Figura 4: configuração do Mundo de Blocos depois do comando “ordena mundo”.
g) Distribui Mundo: organiza os blocos do Mundo de Blocos de forma que eles
fiquem o mais uniforme possível. Por exemplo, a Figura 5 mostra a configuração do
Mundo de Blocos depois da chamada deste comando.
Figura 5: configuração do Mundo de Blocos depois do comando “distribui mundo”.
Obs: os blocos não precisam estar ordenados como no exemplo mostrado acima. O
principal objetivo do comando “distribui mundo” é deixar todos os blocos no menor
nível possível. Porém, os elementos podem ficar em qualquer ordem.
Portanto, para criação e manipulação do Mundo de Blocos, o seu programa
deverá apresentar um menu, com as seguintes opções:
01 – Inserir um novo bloco
02 – Mostrar o Mundo de Blocos
03 – Remover um bloco
04 – Inserir bloco X sobre Y
05 – Inserir pilha de blocos X sobre bloco Y
06 – Inserir bloco X sobre o topo do bloco Y
07 – Inserir pilha de blocos X sobre o topo do bloco Y
08 – Inserir o plano X sobre o plano Y
09 – Ordenar Mundo de Blocos
10 – Distribuir Mundo de Blocos
0 – Sair do programa
3) O que entregar
1. Os códigos fontes dos programas compactados no formato “.tar.gz” ou “.zip”,
juntamente com os seguintes arquivos:
a. “AUTHORS.txt”: arquivo que contém o nome de todos os integrantes da
equipe, e os respectivos emails e códigos de matrícula.
b. “README.txt”: arquivo contendo informações sobre compilação e
execução da sua aplicação, dependências para execução do seu
programa, ou seja, quais programas precisam estar instalados no sistema
para que o seu programa funcione (opcional se tiver algum, dizer como
instalálo também), além de informações a respeito de como utilizar o
seu programa (recomendável).
4) Como entregar
O trabalho deve ser entregue para o email petrina@dcc.ufam.edu.br. No título do
email, escrever “[EDAII] Trabalho prático 2” e no corpo do email escrever o nome
dos integrantes da equipe.
5) Critérios de Avaliação
Execução correta: 60%
Estilo de programação e código bem estruturado: 20%
Documentação e comentários: 20%
6) Comentários Finais
Comece a fazer este trabalho logo, enquanto o prazo para terminálo está tão longe
quanto jamais poderá estar. Estudo em grupo é recomendado, mas seja ético e não
copie o trabalho de outras equipes. Trabalhem em equipe: entendam o problema
proposto, dividamno em problemas menores, dividam a resolução destes
subproblemas entre os membros da equipe (usem funções para solucionar estes
subproblemas) e depois integrem as soluções para resolver o problema geral.
Importante: Não haverá adiamento para a data de entrega deste
trabalho.
Boa sorte.