18.04.2013 Views

Plano de Aula - CAFW - UFSM

Plano de Aula - CAFW - UFSM

Plano de Aula - CAFW - UFSM

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Exercícios Complementares sobre TAD Lista<br />

Instruções<br />

Procure realizar os exercícios <strong>de</strong> forma individual e em encontrando dificulda<strong>de</strong>s pontuais solicite auxílio;<br />

A interpretação dos exercícios faz parte do problema, logo evite conversas durante a aula;<br />

Ao <strong>de</strong>senvolver algoritmos, procure fazer comentários, eles lhe auxiliarão a compreen<strong>de</strong>r o problema e a estratégia que você<br />

próprio está utilizando para resolvê-lo;<br />

Ao final da aula envie os exercícios resolvidos para o en<strong>de</strong>reço: brunoboniati@gmail.com (somente serão consi<strong>de</strong>rados os emails<br />

enviados até as 12:30 do dia 25/Maio/2012).<br />

Durante a última aula discutimos e implementamos um TAD para representar uma lista.<br />

Contudo, observamos que em alguns casos houve a necessida<strong>de</strong> <strong>de</strong> manipulação dos<br />

valores das variáveis do tipo ponteiro (variáveis que guardam en<strong>de</strong>reços <strong>de</strong> outras variáveis)<br />

o que criou a necessida<strong>de</strong> <strong>de</strong> utilizarmos “ponteiros para ponteiros” para representar<br />

a<strong>de</strong>quadamente as operações mínimas <strong>de</strong> uma lista (incluir, retirar e listar).<br />

Imagine uma lista unicamente enca<strong>de</strong>ada <strong>de</strong> letras (valores char) on<strong>de</strong> a inclusão é feita<br />

sempre no início da lista e que cada sub-rotina que manipula a lista é uma FUNÇÃO que<br />

recebe como parâmetro o en<strong>de</strong>reço do primeiro elemento e retorna o en<strong>de</strong>reço do novo<br />

primeiro elemento. Essa lista seria assim <strong>de</strong>finida:<br />

struct elemento {<br />

char letra;<br />

struct elemento* prox;<br />

};<br />

type<strong>de</strong>f struct elemento Elemento;<br />

Consi<strong>de</strong>re a necessida<strong>de</strong> <strong>de</strong> implementação das seguintes operações:<br />

Elemento* lst_cria(); /*Função <strong>de</strong> criação: retorna uma lista vazia<br />

Retorna o valor NULL<br />

*/<br />

Elemento* lst_insere(Elemento* lst, char p); /*Inserção no início e retorno do novo início<br />

Aloca memória para um novo elemento (coloca o parâmetro “p” no campo “letra”,<br />

enca<strong>de</strong>ia o novo elemento com o início da lista (parâmetro lst) e retorna o en<strong>de</strong>reço do<br />

novo elemento (que passa a ser o novo início).<br />

*/<br />

void lst_imprime(Elemento* lst); /*Função imprime: imprime valores dos elementos*/<br />

Percorre a lista a partir do elemento inicial (parâmetro lst) e exibe todos os<br />

elementos até encontrar um enca<strong>de</strong>amento NULO.<br />

*/<br />

int lst_vazia(Elemento* lst); /*Função vazia: retorna 1 se vazia e 0 se não vazia<br />

Uma lista é vazia quando o seu início (parâmetro lst) é NULO.<br />

*/<br />

Elemento* lst_busca(Elemento* lst, char p); /*Função busca: busca um elemento na lista<br />

Percorre a lista a partir do elemento inicial (parâmetro lst) e verifica a existência<br />

<strong>de</strong> uma ocorrência pelo menos do valor “p”. Ao encontrar, retorna o elemento on<strong>de</strong> “p”<br />

está armazenado.<br />

*/<br />

void lst_libera(Elemento* lst); /*Função libera: libera toda a memória alocada para a lista<br />

Percorre a lista a partir do elemento inicial (parâmetro lst) eliminando todos os<br />

elementos existentes (essa subrotina é padrão para qualquer tipo <strong>de</strong> lista)<br />

*/<br />

Elemento* lst_retira(Elemento* lst, char p); /*Função retira: retira um elemento da lista<br />

Percorre a lista a partir do elemento inicial (parâmetro lst) verificando a existência<br />

<strong>de</strong> uma ocorrência do valor “p”. Ao encontrar, altera o enca<strong>de</strong>amento do elemento<br />

anterior a “p” <strong>de</strong> forma que ele aponte para o elo apontado por “p” <strong>de</strong> forma que “p”<br />

possa ser retirado da lista sem que a mesma seja <strong>de</strong>sfeita.<br />

*/


Parte 1 – Implementação do TAD Lista (versão 2)<br />

1) A primeira parte do exercício consiste na implementação das operações do TAD Lista<br />

proposto na página anterior, sem utilizar “ponteiros para ponteiros” e consi<strong>de</strong>rando a restrição<br />

<strong>de</strong> que toda inclusão ocorre no início da lista;<br />

2) Uma vez concluída a implementação do TAD Lista, utilize o programa disponível no link<br />

abaixo para validar sua codificação (o programa oferece um meu com opções <strong>de</strong> manipulação<br />

<strong>de</strong> uma lista: inclusão, pesquisa, remoção e listagem):<br />

http://www.cafw.ufsm.br/~bruno/disciplinas/estrutura_dados/exercicios/lista_complementar/usa_lista.c<br />

O gabarito <strong>de</strong>ste exercício po<strong>de</strong> ser obtido através do en<strong>de</strong>reço abaixo, após o envio da sua<br />

versão, solicite ao professor a senha para o arquivo.<br />

http://www.cafw.ufsm.br/~bruno/disciplinas/estrutura_dados/exercicios/lista_complementar/lista.zip<br />

Parte 2 – Questões <strong>de</strong> provas anteriores<br />

3) Escreva um subrotina para comparar duas listas <strong>de</strong> caracteres. A subrotina <strong>de</strong>ve retornar 1<br />

(verda<strong>de</strong>iro) se os elementos das duas listas são os mesmos (e na mesma or<strong>de</strong>m) ou então 0<br />

(falso) caso não sejam iguais.<br />

4) Escreva uma subrotina para inverter os apontadores <strong>de</strong> uma lista. O elemento que antes<br />

representava o início da lista passará a ser o último elemento e o que atualmente é o último<br />

passará a ser o primeiro.<br />

5) Codifique um programa utilizando linguagem c que recebe um elemento qualquer em uma<br />

lista e verifica se o elemento está mais próximo do final (return 1), mais próximo do início<br />

(return -1) ou exatamente no meio (return 0) . Neste caso consi<strong>de</strong>re que a sub-rotina<br />

recebe o Elemento em si e não o valor armazenado nele.<br />

Antes que me perguntem... já respondo ...<br />

a) Professor, preciso entregar o exercício?<br />

Resposta: Sim, o exercício precisa ser entregue para comprovar que você estava na aula e que está tentando realizar<br />

as ativida<strong>de</strong>s da disciplina.<br />

b) Professor, tenho que criar um arquivo para a interface (arquivo h) e outro para a implementação<br />

(arquivo c)?<br />

Resposta: Sim, é uma boa prática <strong>de</strong> programação separar as interfaces do código, isso simplifica o entendimento e o<br />

planejamento das i<strong>de</strong>ias. No caso do exercício 1, o arquivo “.h” já está <strong>de</strong>finido, basta implementar o arquivo “.c”.<br />

c) Professor, posso ir para casa fazer o exercício e enviá-lo <strong>de</strong>pois?<br />

Resposta: Sim, no entanto consi<strong>de</strong>re que em casa você terá o mesmo tempo para fazê-lo, até no máximo as 12:30 e<br />

que não terá auxílio dos coletas e/ou do professor para tirar dúvidas;<br />

d) Professor, não sei nem por on<strong>de</strong> começar, o que <strong>de</strong>vo fazer?<br />

Resposta: É preciso começar <strong>de</strong> algum lugar , neste caso uma alternativa seria revisar o conteúdo da aula anterior e as<br />

principais i<strong>de</strong>ias dos algoritmos implementados em aula. Outra forma é tentar esboçar no papel as operações,<br />

<strong>de</strong>talhando (na forma <strong>de</strong> um algoritmo) o que elas precisam fazer. Posteriormente basta transcrever as i<strong>de</strong>ias em sintaxe<br />

<strong>de</strong> linguagem <strong>de</strong> programação.<br />

e) Professor, ainda assim não sei nem por on<strong>de</strong> começar, posso auxiliar um colega meu com algumas<br />

“i<strong>de</strong>ias” e a gente envia o exercício juntos?<br />

Resposta: po<strong>de</strong> auxiliar o colega com suas “i<strong>de</strong>ias” no entanto cada um <strong>de</strong>ve fazer sua própria implementação, não será<br />

permitido o envio do exercício em duplas, trios ou quartetos.<br />

f) Professor, não consegui fazer todos os exercícios, <strong>de</strong>vo entregar mesmo assim?<br />

Resposta: Certamente, entregue aquilo que você conseguiu fazer, isso me permite ter um diagnóstico <strong>de</strong> como anda<br />

sua compreensão sobre os assuntos abordados na disciplina bem como qual é seu interesse em aprendê-los.<br />

Caso ainda não tenha feito ... não se esqueça <strong>de</strong> informar o professor sobre sua dupla para realização do trabalho 2<br />

(http://www.cafw.ufsm.br/~bruno/disciplinas/estrutura_dados/materiais/trabalho2.pdf)

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

Saved successfully!

Ooh no, something went wrong!