Algoritmo - Dias de Vida

Olá pessoal, sei que não linguagem, mas não encontrei outro local que seria mais correto para postar que não aqui.

Tenho que fazer um pseudocódigo desse algoritmo proposta, mas não faço a menor ideia de como resolve-lo.
Alguém poderia me ajudar.

  1. Crie um algoritmo que solicite ao usuário o dia, mês e ano de
    nascimento, calcule quanto dias de vida ele tem.

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.

Bom … vamos lá … beeeeeeeeem do começo … como vc faz pra calcular quantos anos vc tem hj ?

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

escreval (“Dia Atual:”);
leia (dia);
escreval (“Mes Atual:”);
leia (mes);
escreval (“Ano Atual:”);
leia (ano);

ano = (ano-a);
ano = ano*365

escreval (“A pessoa possui: " + dias_vida + " Dias de vida”);
fimalgoritmo[/code]

Esse exercício, pra mim, é mais difícil do que aparenta ser.

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

era algo do tipo Date, Calendar se não me engano.

Matematicamente falando o calculo é o seguinte:

numeroDeDiasParaOAno = ano * 365

n = (  |mes - 8| / (mes - 8)  + 1)
n' = (n + 1) % 2

d1 = (mes + 1) / 2
d2 = (7 + 1) / 2
d3 = (mes - 6) / 2

meses31 = n' * d1 + n * d2 + n * d3
meses30 = mes - meses31;

n2 = (  |mes - 3| / (mes - 3)  + 1);
n2' = (n2 + 1) % 2
fatorCorrecaoDeFevereiro = -2  * n2'

numeroDeDiasParaOMes = meses31 * 31  +  meses30 * 30  +  fatorCorrecaoDeFevereiro

numeroDeDiasParaODia = dia

anoFim = ano + 1 * n2

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

De modo mais algorítmico:

numeroDeDiasParaOAno = ano * 365

if mes &lt; 8
then
	meses31 = (mes + 1) / 2
else
	meses31 = 1 + mes / 2 

meses30 = mes - meses31;


numeroDeDiasParaOMes = meses31 * 31  +  meses30 * 30

if (mes &gt; 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]