13.04.2013 Views

texto - Decom - Ufop

texto - Decom - Ufop

texto - Decom - Ufop

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Universidade Federal de Ouro Preto – UFOP<br />

Instituto de Ciências Exatas e Biológicas – ICEB<br />

Departamento de Computação – DECOM<br />

Disciplina: Algoritmos e Estruturas de Dados I – CIC102<br />

Professor: David Menotti (menottid@gmail.com)<br />

Aluno: ______________________________________________________________ No. ______<br />

• A prova é individual e sem consulta, exceto o contido em sua mente;<br />

• A interpretação das questões faz parte da avaliação;<br />

• Faça as observações que acredita ser necessário, por escrito, na folha de resposta.<br />

• Nas questões que requerem implementação escreva os algoritmos em C ou C++.<br />

• Dica: primeiro, leia todas as questões e só, então, comece a resolver as questões a partir<br />

das que você acredita serem as mais fáceis.<br />

2ª. Avaliação – 2,4 pontos<br />

(24% da nota total, onde 0,4 pontos extra)<br />

1. (0,6 pontos) Considere uma pilha P vazia e uma fila F não vazia. Utilizando apenas os testes<br />

de fila e pilha vazias (FilaVazia, PilhaVazia e FazPilhaVazia), as operações<br />

Enfileira, Desenfileira, Empilha, Desempilha, e uma variável aux do tipo<br />

TItem, escreva uma função em C/C++ que inverta a ordem dos elementos da fila (a função<br />

recebe somente a fila como parâmetro). Uma sugestão para a definição (protótipo) da função<br />

é:<br />

void InverteFila(TFila* pFila);<br />

2. (0,6 pontos) Escreva uma função em C/C++<br />

int Troca(TLista* pLista, TCelula* p, TCelula* q)<br />

que, dado dois apontadores quaisquer para células (p e q), troca de posição essas células na<br />

lista simplesmente encadeada, como mostrado na figura abaixo. (Obs. Não vale trocar<br />

apenas o campo item! Você deverá fazer a manipulação dos apontadores para trocar as duas<br />

células de posição). Considere que p e q não são adjacentes (um do lado do outro).<br />

Antes: X Y<br />

λ<br />

Primeiro p<br />

q<br />

Ultimo<br />

Depois: Y X<br />

λ<br />

Primeiro q<br />

p<br />

Ultimo<br />

q<br />

p


Universidade Federal de Ouro Preto – UFOP<br />

Instituto de Ciências Exatas e Biológicas – ICEB<br />

Departamento de Computação – DECOM<br />

Disciplina: Algoritmos e Estruturas de Dados I – CIC102<br />

Professor: David Menotti (menottid@gmail.com)<br />

3. (0,6 pontos) Considere uma árvore estritamente binária e quase completa, composta por<br />

um ponteiro para o nó raiz, onde cada nó é composto por um valor inteiro e ponteiros para<br />

os nós direito e esquerdo, como os TADs apresentados abaixo:<br />

typedef struct Tarvore<br />

{<br />

TNo *pRaiz;<br />

} TArvore;<br />

typedef struct TNo<br />

{<br />

int valor;<br />

TNo *pEsq;<br />

TNo *pDir;<br />

} TNo;<br />

Construa uma função em C/C++ que receba dois valores inteiros e um ponteiro para árvore<br />

estritamente binária e quase completa, e então insira os dois novos nós (representados pelos<br />

valores inteiros recebidos) na árvore de forma que ela continue sendo uma árvore<br />

estritamente binária e quase completa. Obs: caso a árvore esteja vazia somente um dos<br />

valores deverá ser inserido na árvore, de forma que ela continue sendo estritamente binária e<br />

quase completa. Caso seja necessário usar outras estruturas de dados como pilhas, filas e<br />

listas, considere que elas já estão implementadas.<br />

4. (0,6 pontos) Considere uma matriz composta por valores 1 e 0 representando uma imagem<br />

binária (ponto branco valor 0, ponto preto valor 1) como ilustrado na figura abaixo.<br />

unsigned char img[10][10] = {<br />

{0,0,1,1,0,0,0,0,0,0},<br />

{0,1,0,0,0,1,0,0,0,0},<br />

{0,1,0,1,1,0,0,0,1,0},<br />

{0,1,0,0,1,0,1,0,0,0},<br />

{0,1,1,0,1,0,1,1,0,0},<br />

{0,0,0,0,1,0,0,1,0,0},<br />

{0,0,1,0,1,0,1,1,1,0},<br />

{0,0,1,1,1,0,0,1,0,1},<br />

{0,0,0,0,0,0,1,1,0,0},<br />

{0,0,0,0,0,0,1,0,0,0} };<br />

A matriz/imagem apresentada acima/esquerda contém quatro regiões (uma com 7 pontos,<br />

duas com 11 pontos e uma última com um único ponto). Construa uma função em C/C++,<br />

que determine (e retorne) o número de regiões existentes em uma matriz/imagem. Uma<br />

sugestão para a definição (protótipo) da função é:<br />

Considere os TADs definidos abaixo,<br />

typedef struct TPonto<br />

{<br />

int x,y;<br />

struct TPonto* pstProx;<br />

} TPonto;<br />

int Regiao(TMatriz* pImagem);<br />

typedef struct TMatriz<br />

{<br />

int m,n;<br />

unsigned char** Matriz;<br />

} TMatriz;<br />

Também considere que funções de pilhas e filas já estão implementados para o TAD<br />

TPonto. Ainda considere que existem funções para criar, liberar e «zerar» o TAD TMatriz.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!