Algoritmo - Dias de Vida

7 respostas
viny_scholl

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.

7 Respostas

douglas_arantes

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.

sowyer

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

viny_scholl
sowyer:
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

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

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

M

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.

DavidUser

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

DavidUser

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

DavidUser
Do modo de mais simples e interativo, mas também mais ineficiente:
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)
Criado 12 de novembro de 2012
Ultima resposta 17 de nov. de 2012
Respostas 7
Participantes 5