Os três maiores.
Percorrer um array e manter o registro dos maiores elementos dele pode ter um custo surpreendentemente alto, principalmente se o array for excessivamente grande.
Nestes casos, convém estudar alternativas que sejam mais atraentes. O uso de programação em baixo nível é uma delas.
Seguem dois programas iniciais para serem usados no projeto. Podem baixá-los no arquivo projeto_16_2.zip,
O primeiro deles, CreateFile.cpp, gera um arquivo texto (numbers.txt) com 1000 (mil) números inteiros gerados aleatoriamente. O segundo, Find4.cpp, abre o arquivo numbers.txt e busca, dentro dele, os três maiores valores.
Compile-os e execute-os para ver seu funcionamento. Talvez seja conveniente renomear suas extensões, trocando o .cpp por .c.
O algoritmo implementado é simples: mantém-se um array com os três maiores elementos e, à medida em que se percorrem os números do arquivo (que estão em outro array), testa-se se eles devem pertencer à lista dos três maiores e, em caso positivo, faz-se a devida substituição, incluindo-o (e removendo o menor, já que apenas os três maiores devem permanecer).
O projeto.
Reimplemente a função int find3Greatest(int * list, int greatest[4], int total) do programa Find4.cpp (ou Find4.c) usando linguagem de baixo nível.
Note que há muitas comparações de dados, e muitas movimentações também. Todas feitas com dados em memória. Mantê-los em registradores pode trazer uma vantagem substancial.
Execute o seu programa e compare o tempo de execução com o programa original (talvez você tenha que aumentar o tamanho do arquivo de números, além de gerar muitos arquivos diferentes para serem executados em sequência, a fim de conseguir tempos significativamente diferentes).
Produza um relatório apresentando os resultados (faça avaliações estatísticas com intervalo de confiança em 95%) e verifique o quanto seu programa executa mais rápido que o original, se for o caso. DISCUTA OS RESULTADOS: o seu programa é mais rápido? Porque? Porque o resultado não foi ainda melhor? Quais os limites? O que poderia melhorar ainda mais o resultado?
Equipes
Para este projeto serão formadas equipes de no mínimo uma, e no máximo três pessoas. As equipes podem ser formadas espontaneamente, desde que os nomes dos componentes sejam enviados para meu e-mail até à meia noite do dia 27/01/2017. Os nomes que não estejam em equipes espontâneas até a data limite serão incluídos em equipes compulsórias definidas pelo professor.
Equipes Espontâneas
Samuel Santos Alves
Victor Batista de Oliveira
Laís Santana
Adonias Alcântara
Hellan D. G. Viana
Valter Barbosa
Equipes Compulsórias
PRABHAT KUMAR DE OLIVEIRA
JONATHAN QUEIROZ SILVA
VÍVIAN MARIA FERREIRA NUNES DOS SANTOS
EDUARDO DANTAS DO NASCIMENTO
WAGNER MAX TIMÓTEO DE ARCHIRUSAL
DIEGO PEREIRA DOS SANTOS
YURI BONIFACIO OLIVEIRA
CLEIVISON SOUZA DE JESUS
JESSE BENEVIDES SANTOS
NYGUEL VINICIUS SALES DE MENEZES
JOSE DA CONCEIÇÃO BERGENS JUNIOR
KAIQUE SILVA PEDROSO
ADRIELE SILVA OLIVEIRA
BRUNA OLIVEIRA HERMENEGILDO