Solução: Problema da idade em dias (Adriano Queiroz)
From AdonaiMedrado.Pro.Br
Revision as of 16:21, 3 April 2009 by 200.17.147.2 (Talk) (New page: <code lang="c"> #include <stdio.h> #include <time.h> int bissexto(int ano){ if (!(ano%4)) { if (!(ano%100)) { if (!(ano%400)) return 1; else return 0;...)
#include <stdio.h> #include <time.h> int bissexto(int ano){ if (!(ano%4)) { if (!(ano%100)) { if (!(ano%400)) return 1; else return 0; } else return 1; } return 0; } void data(int *dia, int *mes, int *ano) { time_t agora_t = time(NULL); struct tm *agora = localtime(&agora_t); *dia = agora->tm_mday; *mes = agora->tm_mon + 1; *ano = agora->tm_year + 1900; } int main(void) { int diaInicial, mesInicial, anoInicial; int contagemMes, contagemAno, somaDias=0; int diaAtual, mesAtual, anoAtual; data(&diaAtual, &mesAtual, &anoAtual); printf("Data de nascimento\n"); scanf("%d%d%d", &diaInicial, &mesInicial, &anoInicial); for (contagemAno = anoInicial; contagemAno<=anoAtual; contagemAno++) { for (contagemMes = 1; contagemMes<=12; contagemMes++) { if (mesInicial == mesAtual && anoInicial == anoAtual) { somaDias = diaInicial>diaAtual ? diaInicial - diaAtual : diaAtual - diaInicial; break; } if ((contagemMes<mesInicial) && (contagemAno == anoInicial)) contagemMes=mesInicial; if ((contagemAno == anoInicial) && (contagemMes == mesInicial)) somaDias -= (diaInicial); else if ((contagemAno == anoAtual) && (contagemMes == mesAtual)) { somaDias += diaAtual; break; } if ((contagemMes>mesAtual) && (contagemAno == anoAtual)) break; if ((contagemMes == 4) || (contagemMes == 6) || (contagemMes == 9) || (contagemMes == 11)) somaDias += 30; else if (contagemMes == 2) somaDias += bissexto(contagemAno) ? 29 : 28; else somaDias += 31; } } printf("idade em dias: %d", somaDias); getchar(); return 0; }