Se pueden hacer mejoras a este código (?
El enunciado: Elabore un programa en C que dado el día, el mes y el año imprima cuantos días han transcurrido desde el 1 de enero de 2015 hasta la fecha indicada.
El enunciado: Elabore un programa en C que dado el día, el mes y el año imprima cuantos días han transcurrido desde el 1 de enero de 2015 hasta la fecha indicada.
Código PHP:
/*
* dcount.c
*
* Copyright 2017 Oswell <Oswell@OSWELL-PC>
*
*/
#include <stdio.h>
int get_days(int n1, int n2);
#define BASE 2015
#define C_END 1
#define C_CONTINUE 0
int main()
{
int dia, mes, anio, i;
printf("\n Pon un dia: ");
scanf("%i", &dia);
printf("\n Pon un mes: ");
scanf("%i", &mes);
printf("\n Pon un año: ");
scanf("%i", &anio);
if(dia > 31 || dia < 1)
{
printf("\n [ERROR] Introduciste '%i' como dia invalido.", dia);
return C_END;
}
else if(mes > 12 || mes < 1)
{
printf("\n [ERROR] Introduciste '%i' como mes invalido.", mes);
return C_END;
}
else if(anio < BASE)
{
printf("\n [ERROR] Introduciste '%i' como año invalido, el año base es '%i'.", anio, BASE);
return C_END;
}
i = anio-BASE;
i = i*get_days(12, BASE);
if(mes > 1)
dia = dia+i-1+get_days(mes-1, anio);
else if(mes < 2)
dia = dia+i-1;
printf("\n Ha transcurrido %i dia%s desde el 1/Enero/%i.", dia, dia > 1 ? "s" : "", BASE);
return C_CONTINUE;
}
int get_days(int n1, int n2)
{
// devuelvo la suma de dias de los meses.
switch(n1)
{
case 1:
return 31;
break;
case 2:
return ((n2 % 4) == 0) ? 60 : 59; // Lo que entendi de wikipedia, un año bisiesto es division 'perfecta' entre 4 y termina en 0.
break;
case 3:
return ((n2 % 4) == 0) ? 91 : 90;
break;
case 4:
return ((n2 % 4) == 0) ? 121 : 120;
break;
case 5:
return ((n2 % 4) == 0) ? 152 : 151;
break;
case 6:
return ((n2 % 4) == 0) ? 182 : 181;
break;
case 7:
return ((n2 % 4) == 0) ? 213 : 212;
break;
case 8:
return ((n2 % 4) == 0) ? 244 : 243;
break;
case 9:
return ((n2 % 4) == 0) ? 274 : 273;
break;
case 10:
return ((n2 % 4) == 0) ? 305 : 304;
break;
case 11:
return ((n2 % 4) == 0) ? 335 : 334;
break;
case 12:
return ((n2 % 4) == 0) ? 366 : 365;
break;
}
return ((n2 % 4) == 0) ? 366 : 365;
}