You are on page 1of 5

Centro de Ensino Superior FUCAPI

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:

Este   trabalho   consiste   na   criação   de   um   programa   para   manipulação   de   um 


“Mundo   de   Blocos”,   que   é   um   ambiente   que   permite   a   inserção   e   manipulação   de 
blocos em um plano, formando em alguns casos um ou vários empilhamento de blocos. 
O   seu   programa   deve   fornecer   funções   para   movimentação   dos   blocos   contidos   no 
Mundo   de   Blocos,   alem   de   inserção   ou   remoção   de   blocos   e   a   visualização   da 
configuração atual do Mundo de Blocos.
Este   trabalho   deve   ser   implementado   na   linguagem   “C”,   utilizando   seus 
conhecimentos em estruturas de dados dinâmicas.

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.

Ao   iniciar   o   programa,   o   Mundo   de   Blocos   estará   vazio.   Quando   o   usuário 


chamar um comando para inserir um novo bloco em uma determinada posição do plano, 
ele será inserido na base desta posição do plano. Caso um novo bloco seja inserido 
novamente na mesma posição do plano, este novo bloco será inserido acima do bloco 
anterior,  formando uma pilha. Nas outras posições  do plano, a inserção ocorrerá da 
mesma forma. A Figura 2 mostra o processo descrito acima.

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

Ao   sair   do   programa,   lembre­se   de   remover   todos   os   elementos   que   foram 


alocados.

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).

Além   disso,   adicionar   no   código   fonte   comentários   explicando   o   papel   de   cada 


função   desenvolvida   no   programa,   argumentos   de   entrada   e   valores   de   retorno 
destas funções e quem desenvolveu cada função.

4) Como entregar

O trabalho deve ser entregue para o email  petrina@dcc.ufam.edu.br. No título do 
email, escrever “[EDA­II] 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,   dividam­no   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.

You might also like