Já fiz algo assim em C, utilizando struct para armazenar a data, o complicado é que fosse terá que verificar meses de 30 e 31 dias e no mês de fevereiro se o ano é bissexto.
Assim, não pede a restrição de ano Bissexto. Eu não sei é fazer a diferença, no caso de a pessoa ter nascido em Outubro e hoje ser novembro e calcular essa diferença. Tipo, saber se ja passamos pelo mês para ele ser contabilizado como dias.
é para ser resolvido em pseudocodigo simples
[code]algoritmo
var
d,m,a : int
d_a, m_a, a_a :int //dia atual, mes atual, ano atual
dia,mes,ano : int
inicio
escreval (“Dia de Nascimento:”);
leia (d);
escreval (“Mes de Nascimento:”);
leia (m);
escreval (“Ano de Nascimento:”);
leia (a);
Se for algo só pra treinar logica da pra arredontar mês = 30 e ano=365
e ai é so subtrair a data de hj menos a sua data de nascimento, e multiplicar mes*30 ano * 365 + dia
Se quiser trabalhar com valores reais( meses <> 30 e anos <> 365 ) vai ter que usar alguma classe do java
[color=red]Considerando todas variáveis inteiras[/color]
Isso converte datas em dias, falta com ele converter a data atual e a data de nascimeto
daí:
diasDeVida = diasAteHoje - diasAteNascimento
numeroDeDiasParaOAno = ano * 365
if mes < 8
then
meses31 = (mes + 1) / 2
else
meses31 = 1 + mes / 2
meses30 = mes - meses31;
numeroDeDiasParaOMes = meses31 * 31 + meses30 * 30
if (mes > 2)
then
numeroDeDiasParaOMes = numeroDeDiasParaOMes - 2;
anoFim = ano + 1
else
anoFim = ano
numeroDeDiasParaODia = dia
fatorCorrecaoParaAnosBissextos = (anoFim / 4) - (anoFim / 100) + (anoFim / 400)
numeroTotalDeDias = numeroDeDiasParaOAno + numeroDeDiasParaOMes + numeroDeDiasParaODia + fatorCorrecaoParaAnosBissextos
[color=red]Considerando todas variáveis inteiras[/color]
Isso converte datas em dias, falta com ele converter a data atual e a data de nascimeto
daí:
diasDeVida = diasAteHoje - diasAteNascimento
Do modo de mais simples e interativo, mas também mais ineficiente:
[code]
PRINCIPAL()
nascimento = (diaN,mesN,anoN)
hoje = (diaH,mesH,anoH)
dias = 0
while nascimeto != hoje
do
dias = dias + 1
nascimento = AMANHA(nascimento)
RETURN dias
AMANHA(dia, mes, ano)
switch mes
case 2
if ( (!(ano % 4)) && (ano % 100) ) || (!(ano % 400))
then
modulo = 30
else
modulo = 29
case 4
case 6
case 9
case 11
modulo = 31
case 1
case 3
case 5
case 7
case 8
case 20
modulo = 32
dia = (dia + 1) % modulo
if dia = 0
then
dia = 1
mes = (mes + 1) % 13
if mes = 0
then
mes = 1
ano = ano + 1
RETURN (dia, mes, ano)
[/code]