Atualmente, a maioria dos ciclocomputadores utilizados pelos ciclistas (amadores e profissionais) possuem um GPS. Esses dispositivos também conversam com diferentes sensores, como por exemplo, sensor de frequência cardíaca, velocidade, cadência, potência, etc. Isso permite que o ciclista/treinador possa analisar os dados do pedal e verificar se o treino foi realizado conforme prescrito.
Todas essas informações (GPS e sensores) são armazenadas a cada segundo. No exemplo abaixo, temos o log de dois segundos. As duas primeiras linhas contém a informação da bicicleta utilizada e a data da atividade. Na sequência, temos diversos campos com os respectivos valores e unidades registrados a cada segundo. Note que nem todos os campos estarão disponíveis. Por exemplo, se o ciclista não usar um sensor de frequência cardíaca, o campo heart_rate não existirá.
Gear: Cannondale SuperSix Date: Nov 2, 2020, 10:26:44 AM altitude: 973.8 m ascent: 0 m battery_soc: 100.0 percent cadence: 62 rpm calories: 0 kcal distance: 2.21 m enhanced_altitude: 973.8 m enhanced_speed: 3.343 m/s gps_accuracy: 2 m grade: 7.9 % heart_rate: 112 bpm left_pedal_smoothness: 30.0 percent left_right_balance: 56 left_torque_effectiveness: 95.0 percent position_lat: -302650798 semicircles position_long: -587443105 semicircles power: 201 watts right_pedal_smoothness: 28.0 percent right_torque_effectiveness: 85.5 percent speed: 3.343 m/s timestamp: 2020-11-02 10:26:45 altitude: 973.8 m ascent: 0 m battery_soc: 100.0 percent cadence: 63 rpm calories: 0 kcal distance: 5.18 m enhanced_altitude: 973.8 m enhanced_speed: 3.312 m/s gps_accuracy: 2 m grade: 7.2 % heart_rate: 112 bpm left_pedal_smoothness: 30.5 percent left_right_balance: 55 left_torque_effectiveness: 95.0 percent position_lat: -302650524 semicircles position_long: -587442916 semicircles power: 194 watts right_pedal_smoothness: 28.0 percent right_torque_effectiveness: 85.5 percent speed: 3.312 m/s timestamp: 2020-11-02 10:26:46
Para esse trabalho, você terá acesso a diversos arquivos de log (https://www.inf.ufpr.br/lesoliveira/ci1002/) de diferentes bicicletas. Você deve escrever um programa que leia todos os logs de um dado diretório e apresente um resumo para cada bicicleta da seguinte forma:
Bicicleta: Cannodale SuperSix
Data | Distância (km) | Velocidade Média (km/h) | Velocidade Máxima (km/h) | HR Médio (bpm) | HR Máximo (bpm) | Cadência Média (rpm) | Subida Acumulada (m) |
---|---|---|---|---|---|---|---|
2/11 | 62,3 | 25 | 50 | 130 | 150 | 75 | 1200 |
… | … | … | … | … | … | … | … |
Observações:
Ao fim você deve apresentar um sumário contendo as seguintes informações: Quantidade de Atividades, Total Percorrido em km, Pedal mais longo em km, Pedal mais curto em km e Distância Média em km.
Forma de chamada:
./gps -d <diretório de arquivos log>
Com essa chamada, seu programa deve ler todos os arquivos de log encontrados no diretório passado como parâmetro e armazenar as informações relevantes em memória.
Enquanto o programa estiver lendo os arquivos de log, o usuário deve ser informado que o programa está em execução.
Uma vez feito isso, o programa deverá apresentar as seguintes opções ao usuário:
Atividade Extra:
Os alunos que apresentarem o mesmo histograma no formato gráfico (vide exemplo abaixo) receberão 25 pontos extras na nota final do trabalho. Para gerar o gráfico, você pode utilizar qualquer biblioteca (por exemplo, gnuplot), desde que a implementação seja na linguagem C.
ATENÇÃO
O código-fonte deve ser devidamente modularizado e estruturado em arquivos .c
e .h
que
agrupem as diversas funcionalidades do programa: leitura/escrita em
arquivos, alocação de memória, geração de tabelas, etc. Deve haver pelo menos 3 arquivos: um contendo o programa principal (apenas) e os demais contendo os diversos módulos que compõem o programa.
.c
e .h
Makefile
Makefile
para o projeto deve ter pelo menos:all
(default), clean
e purge
.-std=c99 -Wall
ATENÇÃO
: Deve ser OBRIGATORIAMENTE usada a opção de compilação -std=c99
.o
intermediários)Os itens de avaliação do trabalho e respectivas pontuações são:
ATENÇÃO: programas que tiverem erros de compilação ou terminarem a execução de forma abrupta sem que tenha havido processamento adequado receberão nota ZERO