Acrescentar ao programa do exercício anterior a possibilidade de determinar, caso a data seja válida, o número de dias que faltam para terminar o ano.
Passo 1
O enunciado pede para, além de validar uma data (dia, mês e ano), calcular quantos dias faltam até 31 de dezembro caso a data seja válida. O conteúdo envolve manipulação de datas, verificação de ano bissexto e soma de dias usando um vetor com o número de dias em cada mês.
Passo 2
Para saber se um ano é bissexto, aplicamos a regra: um ano é bissexto se for divisível por 400, ou se for divisível por 4 mas não por 100. Em código, usamos:
Passo 3
Criamos um vetor
diasPorMes[12]
que guarda a quantidade de dias em cada mês. Se o ano for bissexto, ajustamos diasPorMes[1] = 29
, caso contrário 28
.Passo 4
Validamos a data conferindo se
mes
está entre 1 e 12 e se dia
está entre 1 e diasPorMes[mes-1]
. Se a data for inválida, exibimos mensagem e encerramos.Passo 5
Para contar quantos dias já se passaram no ano até a data dada, somamos todos os dias dos meses anteriores e adicionamos o dia atual. Por exemplo, para 15/03, somamos dias de janeiro e fevereiro e depois +15.
Passo 6
O total de dias em um ano é
365
ou 366
se for bissexto. Então os dias que faltam até 31 de dezembro são:Passo 7
Basta então imprimir
diasFaltam
quando a data for válida.Resposta
#include <stdio.h>
#include <stdbool.h>
#include <stdbool.h>
bool ehBissexto(int ano) {
return (ano % 400 == 0) || (ano % 4 == 0 && ano % 100 != 0);
}
return (ano % 400 == 0) || (ano % 4 == 0 && ano % 100 != 0);
}
int main() {
int dia, mes, ano;
printf(“Digite dia, mes e ano: “);
scanf(”%d %d %d”, &dia, &mes, &ano);
int dia, mes, ano;
printf(“Digite dia, mes e ano: “);
scanf(”%d %d %d”, &dia, &mes, &ano);
if (mes < 1 || mes > 12) {
printf("Data invalida!\n");
return 0;
}
int diasPorMes[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (ehBissexto(ano)) {
diasPorMes[1] = 29;
}
if (dia < 1 || dia > diasPorMes[mes-1]) {
printf("Data invalida!\n");
return 0;
}
int diasPassados = 0;
for (int i = 0; i < mes-1; i++) {
diasPassados += diasPorMes[i];
}
diasPassados += dia;
int totalDias = ehBissexto(ano) ? 366 : 365;
int diasFaltam = totalDias - diasPassados;
printf("Faltam %d dias para terminar o ano.\n", diasFaltam);
return 0;
}