/* Faça uma função com protótipo void proxima_data (int *dia, int *mes, int *ano); que recebe três inteiros *dia, *mes e *ano representando uma data válida e os altera para que eles guardem a data do dia seguinte. Escreva um programa que lê uma data de nascimento e a data de hoje e calcula quantos dias a pessoa viveu. */ #include #define TRUE 1 #define FALSE 0 int data_valida (int dia, int mes, int ano); void proxima_data (int *dia, int *mes, int *ano); int main() { int d, m, a; /* data de nascimento */ int dh, mh, ah; /* data de hoje */ int dias; /* dias de vida */ scanf("%d%d%d", &d, &m, &a); scanf("%d%d%d", &dh, &mh, &ah); dias = 0; while (a < ah || (a == ah && m < mh) || (a == ah && m == mh && d < dh)) { /* d/m/a é menor que dh/mh/ah */ proxima_data (&d, &m, &a); dias++; } printf("Esta pessoa viveu %d dias\n", dias); return 0; } int data_valida (int dia, int mes, int ano) { int dias; /* dias no mês */ if (mes == 2) { /* ano bissexto se for divisível por 4 e não for divisível por 100, exceto se for divisível por 400 */ if (ano % 4 == 0 && (ano % 100 != 0 || ano % 400 == 0)) { dias = 29; } else { dias = 28; } } else if (mes == 4 || mes == 6 || mes == 9 || mes == 11) { dias = 30; } else { dias = 31; } if (1 <= mes && mes <= 12 && 1 <= dia && dia <= dias) { return TRUE; } else { return FALSE; } } void proxima_data (int *dia, int *mes, int *ano) { if (data_valida (*dia + 1, *mes, *ano)) { *dia += 1; } else if (data_valida (1, *mes + 1, *ano)) { *dia = 1; *mes += 1; } else { *dia = 1; *mes = 1; *ano += 1; } }