O objetivo deste trabalho é o uso de abstração de dados e procedimentos na criação de um programa extensível.
O trabalho é em equipe de até três pessoas. O compartilhamento de informações entre as equipes é permitido e aconselhado, mas o compartilhamento de código não é permitido. Trabalhos que tenham porções significativas de código iguais, ou copiados da internet, serão anulados.
Criar um programa de visualização de algoritmos de ordenação por troca.
O programa deve fornecer as seguintes funcionalidades:
Permitir que o usuário selecione uma configuração pré definida de arranjo (aleatório, em ordem invertida, cresce e diminui, etc).
Permitir que o usuário selecione os algoritmos que serão visualizados.
Permitir que o usuário escolha entre uma animação automática ou uma passo a passo.
Exibir as trocas executadas pelos algoritmos de forma gráfica. Sugestão de como as animações podem ser feitas (exemplo do Bubble sort na Wikipédia):
Você deve implementar três algoritmos de ordenação, mas o programa deve ser extensível, permitindo que a adição de um novo algoritmo possa ser feito adicionando no máximo duas linhas nos arquivos de código existentes: uma para importar o novo algoritmo e outra para ligar o novo algoritmo ao sistema.
No relatório você deve explicar como você organizou o seu programa para ser extensível e destacar os recursos da linguagem utilizados para isso. Explique como a adição de um novo algoritmo é feita.
O programa pode ser escrito em: C, C++, Go, Java, JavaScript, Python, Rust ou TypeScript.
Você deve escrever testes automatizados pelo menos para os algoritmos de ordenação.
O relatório deve ser entregue impresso em papel A4. Os diretórios dos programas devem ser zipados e enviados para o e-mail malbarbo arroba gmail.com respeitando o limite de data e horário de entrega. Não envie arquivos compilados, apenas os arquivos de código fonte.
O trabalho será avaliado de acordo com os critérios:
Organização: o programa deve definir e usar corretamente as abstrações.
Corretude: o programa deve funcionar de acordo com a descrição e deve passar em todos os testes.
Completude: o programa deve estar completo, incluindo testes automatizados.
Entendimento: o aluno deve entender o programa que entregou e ser capaz de fazer alterações no código.