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;...)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
#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;
}