Guest User

Untitled

a guest
Jun 18th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.57 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. struct DMA{
  6. int dia;
  7. int mes;
  8. int ano;
  9. };
  10. typedef struct DMA dma;
  11.  
  12.  
  13. int main(void)
  14. {
  15. dma data;
  16.  
  17. printf("Informe a data: ");
  18. scanf("%d/%d/%d", &data.dia, &data.mes, &data.ano);
  19.  
  20. if(data.ano >= 10 && data.ano <= 9999){ //!checa o ano
  21.  
  22. if (data.mes >= 1 && data.mes <= 12){ //! checa o mes
  23.  
  24. if ((data.dia >= 1 && data.dia <= 31) && (data.mes == 1 || data.mes == 3 || data.mes == 5 || data.mes == 7 || data.mes == 8 || data.mes == 10 || data.mes == 12)){
  25. puts("Data valida!"); //!checa os meses que tem 31 dias
  26. }
  27. else
  28. if ((data.dia >= 1 && data.dia <= 30) && (data.mes == 4 || data.mes == 6 || data.mes == 9 || data.mes == 11)){
  29. puts("Data valida!"); //!checa os meses que tem 30 dias
  30. }
  31. else if (data.dia >=1 && data.dia <= 28 && data.mes == 2){
  32. puts("Data valida!"); //!valida as datas do mes 2
  33. }
  34.  
  35. else if (data.dia == 29 && data.mes == 2 && (data.ano % 400 == 0 || (data.ano % 4 ==0 && data.ano % 100 != 0))){
  36. puts("Data valida! (Ano bissexto)"); //!checa o ano bissexto e imprime informando
  37. }
  38.  
  39. else{
  40. puts("## ATENCAO: Dia invalido! ##"); //!informa caso DIA inserido for invalido
  41. }
  42. }
  43. else{
  44. puts("## ATENCAO: Mes invalido! ##"); //!informa caso MES inserido for invalido
  45. }
  46. }
  47.  
  48. else{
  49. puts("## ATENCAO: Ano invalido! ##"); //!informa caso ANO inserido for invalido
  50. }
  51.  
  52.  
  53. return 0;
  54. }
  55.  
  56. #ifndef __FOOBAR_H__
  57. #define __FOOBAR_H__
  58.  
  59. #define ERR_DIA_BISSEXTO_INVALIDO (-4)
  60. #define ERR_DIA_INVALIDO (-3)
  61. #define ERR_MES_INVALIDO (-2)
  62. #define ERR_ANO_INVALIDO (-1)
  63. #define DATA_OK (0)
  64.  
  65. #define BISSEXTO(ano) ((ano % 4) == 0 && ((ano % 100) != 0 || (ano % 400) == 0))
  66.  
  67. int validar_data( int dia, int mes, int ano );
  68.  
  69. #endif
  70.  
  71. #include "foobar.h"
  72.  
  73. int validar_data( int dia, int mes, int ano )
  74. {
  75. if( ano < 10 || ano > 9999 )
  76. return ERR_ANO_INVALIDO;
  77. else if( mes < 1 || mes > 12 )
  78. return ERR_MES_INVALIDO;
  79. else if( (dia > 31) && (mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12) )
  80. return ERR_DIA_INVALIDO;
  81. else if( (dia > 30) && (mes == 4 || mes == 6 || mes == 9 || mes == 11) )
  82. return ERR_DIA_INVALIDO;
  83. else if( !BISSEXTO( ano ) && mes == 2 && dia > 28 )
  84. return ERR_DIA_BISSEXTO_INVALIDO;
  85. else if( BISSEXTO( ano ) && mes == 2 && dia > 29 )
  86. return ERR_DIA_BISSEXTO_INVALIDO;
  87. else
  88. return DATA_OK;
  89. }
  90.  
  91. #include <stdio.h>
  92. #include <stdlib.h>
  93.  
  94. #include "foobar.h"
  95.  
  96. int main( void )
  97. {
  98. int ret, dia, mes, ano;
  99.  
  100. printf("Informe a data (DD/MM/AAAA): ");
  101.  
  102. ret = scanf("%d/%d/%d", &dia, &mes, &ano );
  103.  
  104. if( ret != 3 )
  105. {
  106. printf( "Data nao formatada corretamente!n" );
  107. return 0;
  108. }
  109.  
  110. ret = validar_data( dia, mes, ano );
  111.  
  112. switch( ret )
  113. {
  114. case DATA_OK:
  115. printf( "Data valida!n" );
  116. break;
  117. case ERR_ANO_INVALIDO:
  118. printf( "Ano invalido!n" );
  119. break;
  120. case ERR_MES_INVALIDO:
  121. printf( "Mes invalido!n" );
  122. break;
  123. case ERR_DIA_INVALIDO:
  124. printf( "Dia invalido!n" );
  125. break;
  126. case ERR_DIA_BISSEXTO_INVALIDO:
  127. printf( "Dia invalido para um ano bissexto!n" );
  128. break;
  129. default:
  130. printf( "Data invalida!n" );
  131. break;
  132. }
  133.  
  134. return 0;
  135. }
Add Comment
Please, Sign In to add comment