Ver Mensaje Individual
  #2 (permalink)  
Antiguo 23/01/2015, 23:14
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 3 meses
Puntos: 38
Respuesta: Trabajar con fechas en C

Este te calcula los años bisiesto. Esta por toda la red XD

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5.  
  6. struct Fecha {
  7.     int dia;
  8.     int mes;
  9.     int anio;
  10. };
  11.  
  12. //función que calcula si es bisiesto un año
  13. int bisiesto ( int anio ) {
  14.     if ( anio % 400 == 0 || ( anio % 4 == 0 && anio % 100 != 0 ) ) return 1;
  15.     else return 0;
  16. }
  17.  
  18. //función que Calcula los días de un mes
  19. int dias_mes ( struct Fecha fecha ) {
  20.     switch ( fecha.mes ) {
  21.         case 1:
  22.         case 3:
  23.         case 5:
  24.         case 7:
  25.         case 8:
  26.         case 10:
  27.         case 12:
  28.             return 31;
  29.             break;
  30.            
  31.         case 4:
  32.         case 6:
  33.         case 9:
  34.         case 11:
  35.             return 30;
  36.             break;
  37.            
  38.         case 2:
  39.             if ( bisiesto ( fecha.anio ) )
  40.                 return 29;
  41.             else
  42.                 return 28;
  43.     }
  44.    
  45.     return 0;
  46. }
  47.  
  48. //informa los días que hay entre dos fechas.
  49. int cuenta_dias ( struct Fecha fecha1, struct Fecha fecha2 ) {
  50.     int acum = 0;
  51.    
  52.     while ( 1 ) {
  53.         if ( fecha1.anio == fecha2.anio && fecha1.mes == fecha2.mes )
  54.             break;
  55.            
  56.         acum = acum + ( dias_mes ( fecha1 ) - fecha1.dia );
  57.        
  58.         if ( fecha1.mes == 12 ) {
  59.             fecha1.mes = 1;
  60.             fecha1.anio++;
  61.         } else
  62.             fecha1.mes++;
  63.            
  64.         fecha1.dia = 0;
  65.     }
  66.    
  67.     acum = acum + ( fecha2.dia - fecha1.dia );
  68.     return acum;
  69. }
  70.  
  71. int main() {
  72.     Fecha fecha1, fecha2;
  73.     fecha1.dia = 8;
  74.     fecha1.mes = 2;
  75.     fecha1.anio = 2012;
  76.     fecha2.dia = 18;
  77.     fecha2.mes = 2;
  78.     fecha2.anio = 2012;
  79.    
  80.    
  81.     printf ( "%d dias de diferencia entre ambas fechas.\n", cuenta_dias ( fecha1, fecha2 ) );
  82.     return 0;
  83. }