Dicas Trabalho Prático 3 - Lista de Alunos

Ir em baixo

Dicas Trabalho Prático 3 - Lista de Alunos

Mensagem por Evandro Abu Kamel em Sex 23 Out 2009, 16:17

Olá pessoal, quanto tempo hein!? Smile

Hoje vou escrever algumas dicas para se resolver os problemas desse trabalho, pois tem muita gente que ainda não entendeu o espírito da coisa. Sem mais delongas...

Primeiramente vamos dar uma olhada nas classes que foram pedidas. São elas:

  • Aluno: Armazena o nº de matrícula e o nome, e executa operações sobre os mesmos, inclusive criar um objeto do tipo/classe Aluno através dos construtores;

  • Nodo: Armazena um objeto 'aluno' no tipo/classe Aluno, que contém os atributos e métodos da classe Aluno; e um objeto 'prox' do tipo/classe Nodo, que aponta para o próximo nodo ao qual esse está ligado;

  • Lista: Se for uma LSEC, ela deverá ter um Nodo 'sentinela', que é o primeiro da lista, e um Nodo 'ultimo', que aponta para o último nodo da lista, e tem a variável 'numeroElementos'.


A seguir vem uma breve dica sobre os métodos da classe Lista. Vale lembrar que vocês devem fazer o tratamento dos dados, como verificar se a lista está vazia, tomar cuidado ao remover o primeiro u o último elemento, como ai funcionar a pesquisa de um aluno, entre outras coisas.

- Inserindo um aluno: Muita gente me perguntou sobre como inserir um aluno na lista, pois o método insere(Aluno aluno) recebe como parâmetro um objeto do tipo aluno, e não os seus dados. Para isso, devemos, no programa principal, ler os dados do alunos e instanciar um novo objeto do tipo Aluno com esses dados, em seguida passamos esse objeto como parâmetro para o método.

- Retirando um aluno: Esse método retira um aluno de uma posição 'pos' passada como parâmetro. Uma forma de se fazer isso é usar um nodo 'p' para percorrer a lista a partir do sentinela até o nodo anterior ao da posição 'pos', pois aí será feita a ligação dos nodos 'pos-1' com 'pos+1', deixando de fora o nodo que se quer retirar, usando uma repetição que usa o parâmetro 'pos' como contador decrescente até que (pos > 1, usando do..while()).

- Imprimindo a lista: Idêntico ao método da LSEC simples, mas agora nós não temos apenas um simples valor inteiro em um nodo, nós temos um objeto, do tipo Aluno, logo, esse objeto possui atributos e métodos. Mas se forem olhar a assinatura da classe Aluno, nós não podemos acessar diretamente seus dados a partir de outra classe, mas podemos usar os métodos que retornam esses valores, são eles: obtemMatricula() e obtemNome(). Ou seja, quando tivermos um nodo 'p' que já está devidamente preenchido, para acessármos os dados do aluno usamos 'p.aluno.obtemMatricula()' e 'p.aluno.obtemNome()', lembrem que esse 'aluno' após o 'p.' é o objeto 'aluno' declarado como atributo da classe Nodo.

- Pesquisando elemento numa posição: Nesse método podemos uma lógica bem parecida com a do método retira(int pos), a diferença é que o nodo 'p' deve parar na posição 'pos', ou seja, uma repetição de 'p' a partir do sentinela até (p > 0, usando while()). Não esqueça de retornar o objeto 'aluno' contido no nodo 'p' caso a posição exista, senão retorne null.

- Pesquisando um aluno: Esse método já é um pouquinho mais legal, pois ele passa um objeto do tipo Aluno como parâmetro. A idéia é percorrer toda a lista enquanto ela não chegar ao final e os dados no 'aluno' passado como parâmetro sejam diferentes dos valores do 'aluno' contido no nodo que percorre a lista. Não esqueça também de colocar um contador e, caso o aluno não seja encontrado, retorne -1.

- Carregar lista de um arquivo: Aqui há duas opções a seguir: limpar a lista e preenchê-la com os dados contidos no arquivo, ou, ir preenchendo a lista atual com os dados do arquivo sem verificar nada. Para fazer a leitura do arquivo é só seguir o exemplo que está no enunciado do trabalho. E para incluir os aluno do arquivo para a lista, basta criar um objeto do tipo Aluno com os dados e inserir um novo aluno através do método insere(Aluno aluno), isso para cada linha do arquivo.

- Salvar lista em um arquivo: Esse também é bem simples. Antes de tudo, criamos um arquivo com o nome passado por parâmetro e mandar imprimir os dados de um aluno, como se fosse imprimir no Console (na tela), mas vamos imprimir no arquivo que foi criado. E não esqueça de fechar o arquivo ao final.

-= Ordenando a Lista =-

Agora vem a parte interessante. Wink
Primeiramente, você deve escolher qual o algoritmo de ordenação usará. Consulte o tópico Algoritmos de Ordenação.

Particularmente, acho muito difícil fazer a ordenação da lista na forma encadeada, então, resolvi criar uma Struct, com os mesmos atributos da classe Aluno, e um vetor dessa Struct, do tamanho da lista. Criei dois métodos, um que passa os dados da LSEC para o vetor e outro que passa os dados do vetor para a LSEC, sendo que o primeiro remove todos os nodos da lista e o segundo insere os dados do vetor na lista.

Fazendo dessa forma serão necessários dois métodos de ordenação: um para ordenar por número de matrícula e outro para ordenar por nome.

Uma forma de se ordenar por nome é usando o método String.Compare() do C#.
Esse método possui 2 parâmetros obrigatórios e vários opcionais, são eles respectivamente: string A, string B, bool ignoreCase. O último é opicional, ele serve indicar se deve ou não ignorar a diferenciação por maiúsculas e minúsculas.

O método funciona da seguinte forma: faz a diferença entre as strings A e B nessa ordem.
Caso o retorno seja < 0, então A < B, está ordenado;
Caso o retorno seja > 0, então A > B, está desordenado.

Veja onde é feita a comparação de valores do seu método de ordenação e aplique esse método String no lugar.

Bem pessoal, espero que ajude um pouco aqueles que estão com dificuldades nesse trabalho.
Qualquer coisa poste aqui sua dúvida, ou me procure.

Até a próxima.

_________________
"Faça as coisas o mais simples que você puder,
porém, não as mais simples." Albert Einstein

avatar
Evandro Abu Kamel
Administrador
Administrador

Número de Mensagens : 222
Idade : 29
Data de inscrição : 11/03/2009

Ver perfil do usuário http://forum.clubedosistema.com

Voltar ao Topo Ir em baixo

Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum