El enfoque de K-YreX me parece el correcto en principio, pero creo que la cosa es un pelín más complicada y hay que darle una vuellta de tuerca más.
Habría pues que reacomodar el algoritmo (y el dato de partida de nº de días de Febrero) para tenerlo en cuenta. A este respecto comentar que, además, no solo son bisiestos cada 4 años, los divisibles entre 4 (división por 4 con resto 0), sino que el sistema tiene más correcciones de manera que no todos los que cumplen el requisito de ser divisibles por 4 exactamente son automáticamente bisiestos; por ejemplo 1900 no fue bisiesto a pesar de ser divisble exactamente por 4 (cociente 475 - resto 0). Hay correcciones adicionales al sistema del calendario.
Efectivamente, tal y como dices para hacerlo más correcto habría que tener en cuenta los años bisiestos. Sin embargo, viendo que es un ejercicio típico de introducción a la programación, cuando quieren que tengas en cuenta los años bisiestos, te lo suelen indicar (por experiencia).
Es por eso que opté por no mencionarlo y así no complicarlo más. Siempre queda la posibilidad de mejorarlo a futuro...
Por otro lado, ciertamente los años bisiestos no son aquellos divisibles por 4. El cálculo es un pelín más complejo:
esBisiesto = ( año % 4 == 0 && (año % 100 != 0 || año % 400 == 0) )
Hola, creo que así te respondo a este mensaje, desconozco si hay otra forma de hacerlo mejor, pero no entiendo la parte en la que pones "diasDeMesesCompletosHasta(mes-1).
Sí, con eso ya haces referencia al mensaje.
Supongamos que no hay años bisiestos y queremos calcular la cantidad de días totales que han transcurrido hasta el día de hoy (27/10/2022):
1. Calculamos los días de los años que han pasado completos (aquí tuve un error y se nos ha colado a todos
, lo corregiré en el post original cuando termine con este mensaje): (año - 1) * 365 = 2021 * 365 =
737665 días¿Por qué (año-1)? Porque el año 2022 no ha terminado. Si multiplicásemos: 2022 * 365 nos daría la cantidad de días que han pasado hasta terminar el 2022 y eso no nos sirve... El año actual hay que ir desgranándolo en meses completos y luego en días sueltos.
2. Calculamos los días de los meses que han pasado completos: dias_mes1 + dias_mes2 + dias_mes3 + ... + dias_(mes-1) = 31 (enero) + 28 (febrero) + 31 (marzo) + 30 (abril) + 31 (mayo) + 30 (junio) + 31 (julio) + 31 (agosto) + 30 (septiembre) =
273 díasMisma pregunta: ¿por qué hasta (mes-1)? Misma respuesta
: Porque si calculásemos hasta el mes actual incluido, estaríamos calculando los días totales suponiendo que el mes actual (octubre) ha terminado y no es así.
En este paso es donde te será de gran utilidad tener el array con los días que tiene cada mes. ¿Por qué? Sencillo, ¿hasta qué índice del array tienes que recorrer mientras los vas sumando...?
Ya hemos degranado los meses completos, ahora sólo quedan los días sueltos, es decir, ¿cuántos días de octubre han transcurrido ya?
3. Calculamos los días transcurridos del mes actual: Simple...
27 días4. Sumamos todas las cantidades: 737665 días + 273 días + 27 días =
737965 días totales