Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Trabalho de Informática Aplicada
- Questão:
- 1) Escreva um programa em C que, dados valores de hora e minutos
- corrente e hora e minutos de um alarme, determinar o número de minutos
- entre os dois valores. Ele deve ser capaz de repetir os testes enquanto o
- valor dos dados de entrada forem todos diferente de 0. Cada caso de teste
- contém quatro números inteiros h1, m1, h2 e m2, sendo que h1:m1
- representa hora e minuto atuais, e h2:m2 representa hora e minuto para os
- quais um alarme foi programado
- (0 = h1 < 24; 0 = m1 < 60; 0 = h2 < 24; 0 = m2 < 60)
- Para cada caso de teste da entrada, deve ser impressa uma linha contendo
- um número inteiro que indica o número de minutos entre os dois horários.
- Desenvolvedor:
- Bruno Travi Teixeira
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- #define message_insert_time_and_alarm \
- "-> Entre a hora atual e a hora do alarme (formato: h1 m1 h2 m2)\r\n> "
- #define message_error_time_format_wrong \
- "\r\n-> O formato da hora atual ou do alarme esta incorrento.\r\n-> Insira novamente (formato: h1 m1 h2 m2):\r\n> "
- #define message_exit_program \
- "\r\n-> Voce optou por sair do programa.\r\n-> Programa finalizado."
- #define message_difference_between_times \
- "\r\n-> Hora atual: %02d:%02d | alarme: %02d:%02d\r\n-> Alarme programado para daqui %d minutos.\r\n\r\n"
- bool IsValidTime(int h, int m)
- {
- bool validTime = ((h >= 0 && h < 24) && (m >= 0 && m < 60));
- return (validTime);
- }
- bool ValueToOutProgram(int h1, int m1, int h2, int m2)
- {
- bool outProgram = (!h1 && !m1 && !h2 && !m2);
- return outProgram;
- }
- int DifferenceBetweenTimes(int h1, int m1, int h2, int m2)
- {
- int difference = 0, hours, minutes = 0, min1, min2;
- if(h1 > h2)
- {
- hours = 24 - h1;
- hours += h2;
- minutes = hours * 60;
- }
- else if(h1 < h2)
- {
- hours = h2 - h1;
- minutes = hours * 60;
- }
- else if(h1 == h2)
- {
- if(m1 > m2)
- {
- hours = h2;
- minutes = hours * 60;
- }
- else if(m1 == m2)
- {
- m1 = 60;
- m2 = 0;
- }
- else//m1 < m2
- {
- min1 = 0;
- m2 = m2 - m1;
- }
- }
- if(min1 != 0)
- min1 = 60 - m1;
- min2 = m2;
- difference = minutes + min1 + min2;
- return difference;
- }
- int main()
- {
- int h1 = -1, m1 = -1, h2 = -1, m2 = -1;
- execute_again:
- printf(message_insert_time_and_alarm);
- try_again:
- scanf("%d %d %d %d", &h1, &m1, &h2, &m2);
- if(!IsValidTime(h1, m1) || !IsValidTime(h2, m2))
- {
- printf(message_error_time_format_wrong);
- goto try_again;
- }
- if(ValueToOutProgram(h1, m1, h2, m2))
- {
- printf(message_exit_program);
- system("exit");
- return 1;
- }
- printf(message_difference_between_times, h1, m1, h2, m2, DifferenceBetweenTimes(h1, m1, h2, m2));
- goto execute_again;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement