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