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:
(bissexto) = (ano % 400 == 0) || (ano % 4 == 0 && ano % 100 != 0)

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:
diasFa

Passo 7

Basta então imprimir diasFaltam quando a data for válida.

Resposta

#include <stdio.h>
#include <stdbool.h>
bool ehBissexto(int ano) {
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);
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;
}

Exercícios relacionados