Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Beginner Web en 25 Septiembre 2018, 18:26 pm



Título: Metodo para calcular dias transcurridos
Publicado por: Beginner Web en 25 Septiembre 2018, 18:26 pm
Hola a tod@s, acabo de hacer un metodo para calcular los dias transcurridos desde el 1 de Enero de ese año, teniendo en cuanta que la fecha pasada por parametro esta validada, se que este metodo funciona pero me gustaria saber si hay otras formas mas simples de implementarlo? Me siento tonta :-\
Gracias!!  ;-)
Código
  1. void calcular_dias(t_fecha n)
  2. {
  3. int dias=0, m[11]={31,28,31,30,31,30,31,31,30,31,30};
  4. switch(n[1]){
  5. case 1: dias+=n[0];break;
  6. case 2: dias+=m[0]+n[0];break;
  7. case 3: dias+=m[0]+m[1]+n[0];break;
  8. case 4: dias+=m[0]+m[1]+m[2]+n[0];break;
  9. case 5: dias+=m[0]+m[1]+m[2]+m[3]+n[0];break;
  10. case 6: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+n[0];break;
  11. case 7: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+n[0];break;
  12. case 8: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+m[6]+n[0];break;
  13. case 9: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+m[6]+m[7]+n[0];break;
  14. case 10: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+m[6]+m[7]+m[8]+n[0];break;
  15. case 11: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+m[6]+m[7]+m[8]+m[9]+n[0];break;
  16. case 12: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+m[6]+m[7]+m[8]+m[9]+m[10]+n[0];break;
  17. }
  18. if(n[2]%4==0 && n[1]>2){
  19. dias++;
  20. }
  21. cout<<"Dias transcurridos desde el 1 de Enero: "<<dias<<endl;
  22. }


Título: Re: Metodo para calcular dias transcurridos
Publicado por: MAFUS en 25 Septiembre 2018, 22:11 pm
Puedes usar la librería time.h que ya viene preparada para trabajar con fechas y horas. Algo así:

Código
  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. unsigned calcular_dias(struct tm *fecha) {
  5.    double diff;
  6.    struct tm aux = *fecha; // Copio la fecha que me han pasado
  7.  
  8.    aux.tm_mday = 1; // Cambio a dia 1 del mes
  9.    aux.tm_mon = 0; // Cambio al primer mes del año. Los meses empiezan por 0
  10.  
  11.    diff = difftime(mktime(fecha), mktime(&aux)); // Calculo los segundos de diferencia entre las dos fechas
  12.  
  13.    return diff/(60*60*24); // Devuelvo la diferencia en días
  14. }
  15.  
  16. int main() {
  17.    time_t tiempo;
  18.    struct tm *fecha;
  19.  
  20.    tiempo = time(NULL); // Consigo la marca de tiempo actual
  21.    fecha = localtime(&tiempo); // Y la paso a la estrutura que la descompone en fecha/hora
  22.  
  23.    printf("Han pasado %u dias.", calcular_dias(fecha));
  24. }
  25.  


Título: Re: Metodo para calcular dias transcurridos
Publicado por: M4RQUS en 26 Septiembre 2018, 04:15 am
Creo que podrias calcular la cantidad de dias utilizando un for que valla desde 0 hasta n

Código
  1. int calcular_dias(int n){
  2. int dias=0;
  3. int m[11] = {31,28,31,30,31,30,31,31,30,31,30};
  4.  
  5. for(int i = 0; i < n;i++){
  6. dias += m[i];
  7. }
  8.  
  9. return dias;
  10. }
  11.  

Algo asi creo yo (Pd: yo tambien estoy comenzando a programar :B)


Título: Re: Metodo para calcular dias transcurridos
Publicado por: Beginner Web en 26 Septiembre 2018, 04:23 am
Gracias MAFUS, aunque no entiendo casi nada de ese codigo , que debiera leer para entenderlo a parte del codigo?  :laugh:
M4RQUS , bueno eso si lo sabia pero se me hace ya mucho codigo colocar un for y tampoco quiero usar una funcion aparte solo para calcular los dias, por ahi lei acerca de un for in mmmmmm  ;-)


Título: Re: Metodo para calcular dias transcurridos
Publicado por: MAFUS en 26 Septiembre 2018, 06:50 am
Puedes aprender que hace cada parte que desconoces aquí: http://c.conclase.net/librerias/index.php?ansilib=time#inicio


Título: Re: Metodo para calcular dias transcurridos
Publicado por: M4RQUS en 26 Septiembre 2018, 14:28 pm
No es tan complicado usar un for ademas lo podes poner dentro del procedimiento y te acorta mucho el codigo