Departamento de Ciência da Computação - IME - USP

MAC2166 Introdução à Computação

Escola Politécnica - Primeiro Semestre de 2025 - Turmas C

Primeiro Exercício Programa      Entrega: até 1 de abril de 2025 (Quem ingressou a partir de 14/3 pode entregar até 16 de abril de 2025) às 23h59m00s

 

Ajudando a equipe de cronometragem de um rali de regularidade

  "Ka-chow!"
Relâmpago McQueen, no filme Carros

 


Objetivos

O objetivo do primeiro exercício-programa consiste em familiarizar os alunos com manipulação de números inteiros, operadores matemáticos, lógicos e laços. Note que para resolver esse exercício você só poderá utilizar o conteúdo visto em sala de aula.

Introdução

Ralis de regularidade são competições automobilísticas em que, como o próprio nome sugere, a regularidade conta mais do que a velocidade. As equipes, geralmente formadas por alguém que dirige o carro e por alguém que age como navegador(a), precisam passar por vários checkpoints dentro de prazos estabelecidos. Vence quem terminar a prova tendo chegado o mais perto possível dos prazos estabelecidos em todos os checkpoints.

inicio

Os organizadores de um determinado rali de regularidade estão precisando automatizar a verificação dos tempos das equipes em uma competição e pediram a sua ajuda. Cada carro será equipado com dispositivos de GPS capazes de atestar a localização exata e a hora exata a cada momento. Alguns minutos antes da prova começar, as equipes receberão a latitude e longitude de cada checkpoint, com a observação de que o tempo esperado para a passagem no checkpoint i, com i começando em 1, é i horas, 0 minutos e 0 segundos. A cada passagem por um checkpoint, a diferença entre o instante atual e o instante esperado deve ser acumulado individualmente para cada equipe. Ao término da prova, a equipe que tiver o menor tempo acumulado vence a prova, a equipe que tiver o segundo menor tempo acumulado fica em segundo lugar e a equipe que tiver o terceiro menor tempo acumulado fica em terceiro lugar.

Cada uma das três primeiras equipes receberá um prêmio em dinheiro dessa forma:

Além disso, você sugeriu, e a organização da prova topou, que equipes que demonstrem um conhecimento matemático apurado recebam uma premiação maior. A proposta aceita foi de que, se o tempo acumulado, em segundos, da primeira equipe for um número primo, a premiação dela deve ser dobrada, mas isso vale apenas para a equipe que ficar em primeiro lugar.

Tarefa

Neste EP, a sua tarefa será receber a quantidade de equipes participantes (no mínimo 3 e no máximo 90), a quantidade de checkpoints (no mínimo 2 e no máximo 90) e os tempos em que cada equipe passou por cada checkpoint no formato horas:minutos:segundos. Considere ainda que o máximo de tempo acumulado que uma equipe terá será 100 horas. Você não precisa se preocupar em verificar se a equipe cumpriu essa regra pois nos casos em que a equipe tiver alguma falha que impeça ela de cumprir esse tempo limite, o tempo que será informado será -1:-1:-1 em todos os checkpoints a partir daquele que a equipe não conseguiu cumprir. Nesse caso, a equipe será desclassificada.

Por exemplo, se a prova tiver 4 checkpoints e os instantes de tempo de uma equipe forem:

A equipe terá uma diferença de 59 segundos no primeiro checkpoint, uma diferença de 50 segundos no segundo checkpoint, uma diferença de 600 segundos no terceiro checkpoint e uma diferença de 34 segundos no quarto checkpoint. Totalizando 743 segundos (Observe que a diferença de tempo deve ser considerada tanto para mais quanto para menos. Ou seja, um atraso de 10 segundos ou um adiantamento de 10 segundos são contabilizados da mesma forma). Se esse tempo for o menor dentre os tempos de todas as equipes, essa equipe ficará em primeiro lugar e ganhará R$ 1.000.000,00 pois 743 é um número primo.

Nessa mesma prova, abaixo está uma sequência de instantes de tempo de uma equipe que foi desclassificada:

Entrada e saída

Considere que o programa receba inicialmente dois números inteiros que são referentes à quantidade de equipes (E) e à quantidade de checkpoints (C). Em seguida, o programa recebe E x C instantes de tempo no formato horas:minutos:segundos sendo que os valores de horas, minutos e segundos são números inteiros respeitando o intervalo de horas de 0 a 99, de minutos de 0 a 59 e de segundos também de 0 a 59.

Como visto até o momento em sala de aula, a entrada de dados em um programa em C é feita com a função scanf. Na sua forma mais simples, o scanf recebe um único número inteiro seguido de ENTER. Como neste EP é necessário ler uma linha inteira contendo horas:minutos:segundos, nesse formato, seguido de ENTER, o scanf precisa ser usado de forma a especificar que serão lidos três números inteiros separados por dois pontos. Isso é feito assim:

scanf("%d:%d:%d", &variavel1, &variavel2, &variavel3);

Onde variavel1, variavel2 e variavel3 são as variáveis onde os valores das horas, minutos e segundos serão armazenados (Não chame as variáveis de variavel1, variavel2 e variavel3! Isso é apenas um exemplo. Use nomes de variáveis que façam sentido considerando o que elas vão armazenar).

A saída do programa é uma lista apresentando quais foram as equipes que ficaram nas três primeiras posições e quanto cada uma ganhou. Considere que o identificador da equipe seja a ordem em que os tempos dela foram informados, começando de zero. Em casos de empate, a última equipe que teve os seus dados informados deve vencer o empate.

Importante: Você não precisa se preocupar com situações em que o usuário não digite os valores esperados. A correção do EP não levará em conta essas situações. Portanto, se o seu programa explodir caso o usuário passe por exemplo letras no lugar dos números dos tempos ou valores negativos para a quantidade de equipes, não tem problema.

 

Exemplos de execução do programa

    Nos exemplos, tudo que aparece em vermelho e negrito foi digitado pelo usuário. O resto foi impresso na tela pelo programa.

Exemplo 1

digite a quantidade de equipes: 3
digite a quantidade de checkpoints: 2
digite os tempos de passagem nos checkpoints da equipe 0:
01:00:00
02:00:12
digite os tempos de passagem nos checkpoints da equipe 1:
01:01:01
01:59:13
digite os tempos de passagem nos checkpoints da equipe 2:
01:00:00
02:00:13
[RESULTADO]
Equipe em primeiro lugar: 0
   >>> Ganhou 500000 Reais
Equipe em segundo lugar: 2
   >>> Ganhou 200000 Reais
Equipe em terceiro lugar: 1
   >>> Ganhou 50000 Reais

Exemplo 2

digite a quantidade de equipes: 3
digite a quantidade de checkpoints: 2
digite os tempos de passagem nos checkpoints da equipe 0:
01:00:00
02:00:13
digite os tempos de passagem nos checkpoints da equipe 1:
01:01:01
-1:-1:-1
digite os tempos de passagem nos checkpoints da equipe 2:
01:00:00
-1:-1:-1
[RESULTADO]
Equipe em primeiro lugar: 0
   >>> Ganhou 1000000 Reais
Equipe em segundo lugar: nenhuma
Equipe em terceiro lugar: nenhuma

Exemplo 3

digite a quantidade de equipes: 3
digite a quantidade de checkpoints: 2
digite os tempos de passagem nos checkpoints da equipe 0:
-1:-1:-1
-1:-1:-1
digite os tempos de passagem nos checkpoints da equipe 1:
01:01:01
-1:-1:-1
digite os tempos de passagem nos checkpoints da equipe 2:
01:00:00
-1:-1:-1
[RESULTADO]
Equipe em primeiro lugar: nenhuma
Equipe em segundo lugar: nenhuma
Equipe em terceiro lugar: nenhuma

Exemplo 4

digite a quantidade de equipes: 6
digite a quantidade de checkpoints: 4
digite os tempos de passagem nos checkpoints da equipe 0:
01:00:00
02:20:12
03:00:45
03:50:57
digite os tempos de passagem nos checkpoints da equipe 1:
01:01:01
01:59:13
02:59:00
04:19:00
digite os tempos de passagem nos checkpoints da equipe 2:
01:00:00
02:00:13
03:09:48
04:00:00
digite os tempos de passagem nos checkpoints da equipe 3:
00:58:45
02:10:00
03:10:00
04:10:00
digite os tempos de passagem nos checkpoints da equipe 4:
00:50:00
02:17:00
03:00:00
04:00:00
digite os tempos de passagem nos checkpoints da equipe 5:
01:01:01
02:02:02
03:03:03
-1:-1:-1
[RESULTADO]
Equipe em primeiro lugar: 2
   >>> Ganhou 1000000 Reais
Equipe em segundo lugar: 1
   >>> Ganhou 200000 Reais
Equipe em terceiro lugar: 4
   >>> Ganhou 50000 Reais

Atenção: imprima os textos informativos ao usuário exatamente da mesma forma que apresentado nos exemplos de execução acima. Não remova nenhuma palavra, nenhum espaço e nenhuma pontuação, não adicione acentos ou textos a mais e não mude letras maiúsculas para minúsculas ou vice-versa, pois qualquer uma dessas mudanças atrapalha o avaliador automático.

 

Entrega do EP

O arquivo a ser entregue deve ser nomeado como ep1.c, com todos os caracteres minúsculos.

Note que para resolver esse exercício você só poderá utilizar o conteúdo visto em sala de aula.

O seu código deve ser claro, enxuto, bem organizado e os nomes das variáveis devem revelar a sua intenção, i.e., o significado do valor que elas guardam.

Leia as INFORMAÇÕES SOBRE ENTREGA DE EPs antes de entregar o seu EP. Lendo as informações você verá, por exemplo, que o seu EP deve ter um cabeçalho específico.

Certifique-se de que o seu programa foi realmente depositado no site.

entrega