Objetivo dessa atividade é implementar os principais algoritmos de ordenação baseados em comparações 🚀
Espera-se que ao final desta atividade você seja capaz de classificar informaçoes usando diferentes métodos de ordenação e compreender os principais conceitos e analisar o desempenho deles ao serem empregados em uma base de dados reais.
Nesta atividades, desejamos aprimorar o nosso sistema SIGA. Além de manipular o cadastro de informações de estudantes em um arquivo binário, iremos agora classificar as informações baseados em uma determinada chave de comparação.
- Copiar as rotinas do siga.cc que foram desenvolvidas na atividada prática anterior para o arquivo siga.cc atual.
- Alterar a rotina de leitura de dados do arquivo CSV. Observe que novas colunas foram inseridas no arquivo estundantes.csv. Alterações em outras partes do código serão necessárias para evitar BUGs. Indetifique-as e faça as correções necessárias.
- Implementar as rotinas de ordenação no arquivo sort.h. Seguir as indicações nas marcações TODO.
- Verificar se as rotinas passam nos testes definidos na pasta tests. Observem como os testes foram feitos e implementados. Há alguma falha neles?
- Implementar o programa de análise de desempenho desempenho.cc. Seguir as indicações nas marcações TODO.
- Implementar o programa de classificação dos estudantes por nome e turma. Novamente, vocês devem seguir as marcações TODO no arquivo. A classificação deve gerar uma arquivo csv chamando classificado.csv na pasta dados.
O projeto está organizado na seguinte estrutura de arquivos:
src
- estudante.h e estudante.cc : Implementa a entidade estudante
- siga.h e siga.cc: Implementa um sistema simplista de gerenciamento de estudante.
- sort.h: Implementa as rotinas de ordenação usando templates c++.
- tools.h e tools.cc: implementa rotinas auxiliares para a verificação dos casos de testes e na medição de desempenho.
test
- test1.cc: Testa se a entrada da base de dados está correta.
- test2.cc: Testa a ordenação do algoritmo ordenação BasicSort está correta.
- test3.cc: Testa a ordenação do algoritmo ordenação MergeSort está correta.
- test4.cc: Testa a ordenação do algoritmo ordenação QuickSort está correta.
- test5.cc: Testa a ordenação do algoritmo ordenação HeapSort está correta.
- test6.cc: Testa a ordenação do algoritmo ordenação MySort está correta.
app
- performance.cc: Gera um relatório de performance entre os métodos.
- classifica.cc: Gera um arquivo texto em formato csv classificando os alunos por turma e nome em ordem ascendente.
IMPORTANTE
- Detalhes do que deve ser feito encontram-se no arquivos fontes sob a tag TODO.
- Os arquivos da pasta tests não devem ser modificados.
- Os arquivos serão lidos ou criados na pasta tests/data
- Fiquem a vontade para alterar ou adicionar outras ferramentas nos arquivos tools.h e tools.cc
Para a compilação em ambiente Unix/linux, use o comando:
- Crie um diretório build
mkdir build
- Entre no diretório
cd build
- Chame o cmake
cmake ../.
- Compile os testes:
make
- Rode os testes:
ctest
- Para rodar o estudo de desempenho:
./app/performance
- Para rodar a classificação:
./app/classifica
Importante: Entre uma chamadas do ctest, remova o arquivo estudantes.bin da pasta tests/data.
Além do código, um relatório com a análise da atividade deverá ser entregue. Para tanto, basta editar o arquivo REPORT.md e submeté-lo junto com o código-fonte. O relatório faz parte dos critérios avaliativos desta atividade. A não submissão dele, ocasionará em penalidades na nota final.
- Não será permita o envio de código-fonte vai upload de arquivos no github!! Todos os envios devem ser via commits e push ao repositório.
- Trabalhos iguais -> nota 0!! Logo não copie do colega!!!