Advertisement
bruno_travi

trabalho_informática_aplicada

Aug 8th, 2019
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.76 KB | None | 0 0
  1. /*
  2.     Trabalho de Informática Aplicada
  3.    
  4.     Questão:
  5.         1) Escreva um programa em C que, dados valores de hora e minutos
  6.         corrente e hora e minutos de um alarme, determinar o número de minutos
  7.         entre os dois valores. Ele deve ser capaz de repetir os testes enquanto o
  8.         valor dos dados de entrada forem todos diferente de 0. Cada caso de teste
  9.         contém quatro números inteiros h1, m1, h2 e m2, sendo que h1:m1
  10.         representa hora e minuto atuais, e h2:m2 representa hora e minuto para os
  11.         quais um alarme foi programado
  12.         (0 = h1 < 24; 0 = m1 < 60; 0 = h2 < 24; 0 = m2 < 60)
  13.         Para cada caso de teste da entrada, deve ser impressa uma linha contendo
  14.         um número inteiro que indica o número de minutos entre os dois horários.
  15.  
  16.     Desenvolvedor:
  17.         Bruno Travi Teixeira
  18. */
  19.  
  20. #include <stdio.h>
  21. #include <stdlib.h>
  22. #include <stdbool.h>
  23.  
  24. #define message_insert_time_and_alarm \
  25.     "-> Entre a hora atual e a hora do alarme (formato: h1 m1 h2 m2)\r\n> "
  26.  
  27. #define message_error_time_format_wrong \
  28.     "\r\n-> O formato da hora atual ou do alarme esta incorrento.\r\n-> Insira novamente (formato: h1 m1 h2 m2):\r\n> "
  29.  
  30. #define message_exit_program \
  31.     "\r\n-> Voce optou por sair do programa.\r\n-> Programa finalizado."
  32.  
  33. #define message_difference_between_times \
  34.     "\r\n-> Hora atual: %02d:%02d | alarme: %02d:%02d\r\n-> Alarme programado para daqui %d minutos.\r\n\r\n"
  35.  
  36. bool IsValidTime(int h, int m)
  37. {
  38.     bool validTime = ((h >= 0 && h < 24) && (m >= 0 && m < 60));
  39.     return (validTime);
  40. }
  41.  
  42. bool ValueToOutProgram(int h1, int m1, int h2, int m2)
  43. {
  44.     bool outProgram = (!h1 && !m1 && !h2 && !m2);
  45.     return outProgram;
  46. }
  47.  
  48. int DifferenceBetweenTimes(int h1, int m1, int h2, int m2)
  49. {
  50.     int difference = 0, hours, minutes = 0, min1, min2;
  51.    
  52.     if(h1 > h2)
  53.     {
  54.         hours = 24 - h1;
  55.         hours += h2;
  56.        
  57.         minutes = hours * 60;
  58.     }
  59.     else if(h1 < h2)
  60.     {
  61.         hours = h2 - h1;
  62.         minutes = hours * 60;
  63.     }
  64.     else if(h1 == h2)
  65.     {
  66.         if(m1 > m2)
  67.         {
  68.             hours = h2;
  69.             minutes = hours * 60;
  70.         }
  71.         else if(m1 == m2)
  72.         {
  73.             m1 = 60;
  74.             m2 = 0;
  75.         }
  76.         else//m1 < m2
  77.         {
  78.             min1 = 0;
  79.             m2 = m2 - m1;
  80.         }
  81.     }
  82.    
  83.     if(min1 != 0)
  84.         min1 = 60 - m1;
  85.        
  86.     min2 = m2;
  87.    
  88.     difference = minutes + min1 + min2;
  89.     return difference;
  90. }
  91.    
  92. int main()
  93. {
  94.     int h1 = -1, m1 = -1, h2 = -1, m2 = -1;
  95.    
  96.     execute_again:
  97.        
  98.     printf(message_insert_time_and_alarm);
  99.    
  100.     try_again:
  101.    
  102.     scanf("%d %d %d %d", &h1, &m1, &h2, &m2);
  103.    
  104.     if(!IsValidTime(h1, m1) || !IsValidTime(h2, m2))
  105.     {
  106.         printf(message_error_time_format_wrong);
  107.         goto try_again;
  108.     }
  109.    
  110.     if(ValueToOutProgram(h1, m1, h2, m2))
  111.     {
  112.         printf(message_exit_program);
  113.         system("exit");
  114.         return 1;
  115.     }
  116.    
  117.     printf(message_difference_between_times, h1, m1, h2, m2, DifferenceBetweenTimes(h1, m1, h2, m2));
  118.    
  119.    
  120.     goto execute_again;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement