útimas Notícias

13 de novembro, 2007

TESTE 5

Veja o que deve ser feito no teste 5

01 de novembro, 2007

Material de Apoio

Material para estudo

24 de outubro, 2007

Ganhe 1 ponto extra!!!

A viagem de Juquinha

07 de agosto, 2007

Apostila de MC102 do professor Alexandre Falcão

acesse!

Notícia do SuSy

acesse!

06 de agosto, 2007

Material de MC102 (elaborado pelo professor Arnaldo Moura)

acesse!

TESTE 5

O Teste 5 consiste de um programa e um relatório que devem ser entregues até dia 22 de novembro.

O PROGRAMA

Faça um programa em linguagem C que insira números inteiros em uma lista ligada L e depois separe os números em duas listas L1 (com os números pares) e L2 (com os números ímpares).

O programa deve imprimir as 3 listas na tela. Você é livre para fazer a entrada e a saída no formato que desejar, mas os números devem ser lidos do teclado (serão digitados pelo usuário).

Você encontrará exemplos de construção de lista ligada no material de apoio e na internet. Use-os para entender o que deve ser feito.

Comentários no código são extremamente importantes e valem pontos.

Sinta-se a vontade para usar recursões e criar outras tarefas a serem executadas pelo seu programa.

Se você quiser, pode colocar cores na tela, criando um legítimo software de padaria. Para isso, veja esse link: dicas de printf.

O programa deve ser entregue via e-mail no endereço: mc102z@ic.unicamp.br até o dia 22 de novembro às 23h59m. (veja abaixo como fazer e entregar o relatório.)

DICAS

Construa uma struct do tipo Tno com os seguintes campos:

  • um inteiro N
  • um ponteiro para structs Tno proximo
Crie um apontador que sempre estará no início da lista.

Em cada função, se julgar necessário, crie um apontador que "anda" pela lista verificando os termos. Como eu ando pela lista??? Suponha que o apontador que aponta para o começo da lista se chama inicio. Crie um apontador p e faça inicialmente p=inicio. Dentro da struct do tipo Tno, você tem um apontador proximo que sempre apontará para o próximo nó ou para NULL (quando não houver próximo. Um jeito de andar na lista é:
p=inicio;

while(p->proximo!=NULL) // enquanto o proximo elemento nao eh NULL
{ 
   printf("%d",p->N);  // imprime o valor do noh atual na tela 

   p=p->proximo;       // faz o ponteiro que "anda" pela lista receber o endereco do proximo noh 
                       // ou seja, faz p apontar para o proximo noh
}
Você fazer outras comparações, como por exemplo:
while(p->N != 5 && p->proximo!=NULL) p=p->proximo;
Neste exemplo; o apontador p anda pela lista até que chegue ao final dela (p==NULL) ou até que o valor de um nó seja 5 (p->N==5).

Crie funções para:
  • inserir elementos na lista
  • separar pares e ímpares - note que esta fução deve receber como parâmetro três ponteiros: um ponteiro para o início da lista que tem todos os números; outro para o início da lista dos números pares e outro para o início da lista de números ímpares.
  • desalocar a memória alocada
Note que você tem duas opções:
  • criar uma cópia de um nó que tem valor par na lista de pares (e fazer o mesmo para ímpares) ou
  • fazer cada nó que tem um valor par ser apontado pelo último p->proximo da lista de pares (e fazer o mesmo para ímpares)
O primeiro é bem mais fácil e o segundo é um código muito mais elegante. Você pode fazer qualquer um dos dois, não vai ganahr mais ou menos nota com um ou outro.

Note que, dependendo da maneira como você construir a função que insere elementos na lista. ela pode ser útil em 3 ocasiões: para inserir os nós com os valores digitados pelo usuário; para inserir os pares na lista par e para inserir os ímpares na lista ímpar.

Se tiver dúvidas, mande e-mail!!!! (sheila.almeida@gmail.com)

O RELATÓRIO

No dia da terceira prova (22/11) você deve entregar um relatório impresso com o seu código fonte devidamente comentado. Esse relatório deve conter:

  • seu nome e RA
  • uma introdução onde você explica com suas próprias palavras o que é e como se constrói uma lista ligada
  • uma seção onde você explica quais as tarefas que seu programa é capaz de executar.
  • uma seção onde você conta quais as funções que você implementou: o que elas fazem, quais os argumentos e o que elas retornam.
  • uma seção onde você conta como deve ser feita a entrada e a saída do seu programa e quais são as mensagens que ele apresenta na tela
  • uma seção com o código fonte muito bem descrito. Você pode quebrar em pedaços, pode inserir trechos de texto no meio (não precisa escrever tudo como comentário). O que eu mais quero é saber o quanto você entende do seu código e da manipulação dos ponteiros que há nele.
  • Opcionalmente, você pode fazer uma seção de conclusões, críticas e sugestões sobre o Teste 5. Não tenha medo de fazer críticas! Isso não vai influenciar na sua nota!