O objetivo deste laboratório é a implementação de uma pequena base de dados de dados de alunos contendo nome e RA. Apesar de o RA ser usado primariamente como chave para identificação no mundo real, nesse exemplo a chave primária para as operações será o nome do aluno.
A implementação deverá usar uma tabela de espalhamento com encadeamento (hash with chaining). Dentro de cada lista, as entradas de alunos deverão estar em ordem crescente de nome, usando a ordem a comparação lexicográfica (a mesma dada pela função strcmp).
A função de hash usada deverá ser a mesma para todos os alunos, e deverá ser o ou exclusivo bit-a-bit dos caracteres do nome do aluno módulo TAMHASH (o tamanho da tabela de hash).
Os comandos disponibilizados pelo interpretador, no arquivo principal.c, são:
Os comandos do interpretador já vêm implementados. Alguns detalhes de implementação estão descritos em forma de comentário nas funções. Para certificar-se do formato de saída, verifique os arquivos de teste.
Você deverá submeter apenas o arquivo hash.c.
Neste laboratório, a primeira linha da entrada indica a função a ser testada. Por exemplo, a seguinte entrada:
Hash insere 996677 "Fulano de Tal" insere 996677 "Fulano de Tal" imprime consulta "Fulano de Tal" consulta "Maria da Silva" consulta "abc" remove "Fulano de Tal" remove "Fulano" imprime sair
Gera a seguinte saída:
Testando apenas a função `Hash´. Insere: 996677 "Fulano de Tal" Insere: 996677 "Fulano de Tal" Nome repetido: "Fulano de Tal" Imprime Tabela: 1 aluno(s): (12) 996677 "Fulano de Tal" Consulta: "Fulano de Tal" 996677 "Fulano de Tal" Consulta: "Maria da Silva" Nome inexistente: "Maria da Silva" Consulta: "abc" Nome inexistente: "abc" Remove: "Fulano de Tal" Remove: "Fulano" Nome inexistente: "Fulano" Imprime Tabela: 0 aluno(s):
Neste laboratório o formato dos testes difere dos demais. Cada caso de teste testará o funcionamento de apenas uma função implementada pelo aluno, as demais funções serão testadas usando-se as implementações do gabarito. Para isso, será fornecido um arquivo objeto .o para a linkagem junto ao programa compilado no formato ELF, e deve ser compatível com o compilador gcc para linux, e possivelmente outros compiladores que aceitem o formato ELF.
Essa funcionalidade é fornecida apenas como conveniência, e pode ser desabilitada pelo aluno, caso, por exemplo, exista algum problema com a linkagem. Para isso basta descomentar a linha CFLAGS+=-DNOGAB no arquivo Makefile. Note que, no Susy esse recurso não será desabilitado e será usado para rodar todos os testes.
Haverá 8 grupos de teste, um para cada função a ser testada. Os arquivos de cada grupo são iguais, variando apenas a função testada em cada um deles. E serão, repectivamente, Hash, CriaTabela, InsereTabela, RemoveTabela, ConsultaTabela, NumeroAlunosTabela, ImprimeTabela, LiberaTabela.