Logo Hardware.com.br
felipe.gualdi
felipe.guald... Novo Membro Registrado
7 Mensagens 0 Curtidas

Como descobrir qtos dias de vida você tem?!?!?!?!

#1 Por felipe.guald... 23/05/2005 - 16:58
Bom Galera to precisando de uma ajudinha...

Faço faculdade de ciencias da computação, e como trabalhado de final de semestre o bendito professor passou um trabalinho para calcular a qtdade de dias de vida que vc tem (considerando o ano bissexto), porém estou numa fria... num tenho tempo... alguém ai tem uma ideia de como faço pra calcular a idade considerando o ano bissexto? Necessito transforma-lo em algum formato de numeros para que seja considerado os ultimos dias sem que o mês atrapalhe...

Aguardo ancioso pela ajuda de vcs...
Grato...
david.rj.2k
david.rj.2k Membro Senior Registrado
416 Mensagens 8 Curtidas
#20 Por david.rj.2k
30/05/2007 - 02:16
Andask, dessa forma o resultado seria impreciso, e provavelmente o professor vai comparar com resultado de outros alunos, ou seja, se tiver 20 alunos e 10 tiverem iguais, e o dele diferente, o dele estará errado.

Vo tenta, mas n vo fala que está certo, vo usar como base:
30/01/1991 (minha data de nascimento) até
30/05/2007 (dia que fiz esse post).

Bom, sabemos que tem 16 anos de 1991 até 2007.
Agora temos que saber quantos meses têm 16 anos no período.

de 01 até 12 seriam 12 meses (JAN até DEZ) da data inicial.
Explicando: do mes do meu aniversário até o ultimo mes do ano.
Temos também que saber se passou por FEVEREIRO (para saber depois se contará ou não como ano bissexto, ou seja, adicionar um dia amais no tempo de vida), no caso, passou.
ANO_INICIAL = 1991
NASCIMENTO_MES = 12; // Quantidade de meses desse ano (desde o mes de nascimento)
NASCIMENTO_FEV = TRUE; // Fevereiro é agora ou já passou

de 01 até 12 seriam mais 12 meses (JAN até DEZ) do mes.
tirando 2 anos seria, 12*14 (MESES TOTAL * ( QUANTIDADE DE ANOS - 2 ) ).
Seria então 168.
Explicando: Tirei 2 anos porque os mesmos seriam calculados separadamente, o PRIMEIRO MES e o ULTIMO MES.

de 01 até 05 seriam mais 05 meses (JAN até MAI) de hoje.
Explicando: Do primeiro mes até o mes atual.
Também será necessário se passou por FEVEREIRO.
ANO_FINAL = 2007
HOJE_MES = 5; // Quantidade de meses desse ano até agora.
HOJE_FEV = TRUE; // Fevereiro é agora ou já passou

Ou seja:
NASCIMENTO_MES + ( 12 * ( ( ANO_FINAL - ANO_INICIAL ) - 2 ) ) + HOJE_MES
12 + ( 12 * ( ( 2007 - 1991 ) - 2 ) ) + 5 =
12 + ( 12 * 14 ) + 5 =
185 meses.
QUANTIDADE_MES = 185

Agora sabemos que um ano tem 365 dias, então 185 * 365 = 67525 dias, finalmente teremos de calcular quantos dias serão acrescentados para o ANO BISSEXTO.

TOTAL_DIAS = 67525;
Antes de qualquer coisa: % = MOD.
...
1992 % 4 igual a 0
--> DIAS_BISSEXTO + 1;
...
1996 % 4 igual a 0
--> DIAS_BISSEXTO + 1;
...
2000 % 4 igual a 0
--> DIAS_BISSEXTO + 1;
...
2004 % 4 igual a 0
--> DIAS_BISSEXTO + 1;
...

Lembrando que:
1. Você terá que fazer um calculo para saber quandos dias foram bissextos (isso n é difícil).
2. Você não deverá usar o Boolean para saber se vai contar OU NÃO com o ano de nascimento e também contar OU NÃO com o ano final.
Ou seja, 4 dias bissextos...

TOTAL_DIAS + 4 = 67529 dias.
Acho que falta também adicionar 30 dias (de nascimento) e retirar 30 dias (que se passaram desse mes, de hoje no caso), mas se eu fizer isso, dará ZERO, e não dará para perceber. então o meu é isso mesmo.

UFA!!! Terminei, eu acho hehe... nossa... será que eu já vivi 67MIL dias? o.O to velho hehe..

Então vo tenta faze isso aki no PASCAL, caso consiga mando pra vocês o código fonte e o executável (pra quem não tive o compilador).

FLWS!
Espero ter ajudado (fora o complicado) hehe.

FLWS!

--- EDIT ---

Só pra corrigir...
O calculo poderá ficar um pouquinho impreciso, já que não consegui encaixar os DIAS de 31 e 30 dias :S... To tentando isso no PASCAL (ahh... to colocano bastante comentários para você entender melhor).

--- EDIT ---

Acho que o erro que eu disse acima dos dias que terminam em 30 e 31 não existe (ou talvez seja muuuuito pouco) erro de uns 5 dias talvez.
Ahh... e como eu falei, to cumprindo!
Fiz a parada em PASCAL e deu o mesmo resultado postado acima.

Pra baixar é só vir aqui (Código-Fonte + Executável):
http://rpg.grupoelite.com.br/outros/calc_tempo_de_vida.rar

Obs.: Eu compilei com o FreePascal por dois motivos:
1. O valor final (tempo de vida) é maior que 65.535 (ou seja, 16 bits) e o Turbo Pascal não suportaria.
2. Precisei converter Integer para String, e se não me engano, o Turbo Pascal não tem a lib SysUtils (por isso ficou bem grande o resultado).

FLWS!!!
Espero ter ajudado.

Ahh...
Só não espero ter que calcular em segundos! hehe zuação
FLWS!
Flash Websites
Desenvolvimento de sites profissionais em PHP/JS [incluído AJAX]
Parcelamos em até 3x
Machine9000
Machine9000 Novo Membro Registrado
9 Mensagens 0 Curtidas
#21 Por Machine9000
11/06/2008 - 13:15
david.rj.2k disse:

Agora sabemos que um ano tem 365 dias, então 185 * 365 = 67525 dias,


Cara, oq vc fumo pra multiplicar quantidade de meses por 365?????

seria melhor mais ou menos assim:

(((anofinal-anoinicial)*12+(12-mesdenascimento))*30)+3

o 3 é o resultado de fevereiro e dos cinco meses de 31 dias

67 mil dias seria se vc tivesse 185 anos, não 185 meses. Um errinho e tá tudo errado
tpcvasco
tpcvasco General de Pijama Registrado
2.9K Mensagens 330 Curtidas
#23 Por tpcvasco
11/06/2008 - 14:36
Só uma dica, Machine9000, procure ver a data do último post do tópico antes de postar. A data do post anterior ao seu é "30-05-2007", ou seja, ninguém escreve nada nele há mais de 1 ano. É bem provável q a dúvida já tenha sido resolvida.
"Milhouse: - Médicos e bombeiros são heróis.
Bart Simpson: - Olha, as casas continuam pegando fogo e as pessoas continuam doentes. Os verdadeiros heróis são os Schwarzenegger's, os Stallone's, e, em menores proporções, os Vandame's..."
Machine9000
Machine9000 Novo Membro Registrado
9 Mensagens 0 Curtidas
#24 Por Machine9000
11/06/2008 - 15:14
Guitarrista Kurumin disse:
Até agora parece que vc não falou a linguagem de programação. Conforme for isso já vêm implementado em alguma biblioteca.

Parece q a maioria tava fazendo em pascal, eu só passei mais ou menos como algoritmo

tpcvasco disse:
É bem provável q a dúvida já tenha sido resolvida.

Ou não, pois não vi nenhum "obrigado/vlw" ou qualquer outro agradecimento.
Alan167
Alan167 Membro Junior Registrado
83 Mensagens 0 Curtidas
#29 Por Alan167
12/06/2008 - 16:51
ja tinha feito um programar desse em python.
codigo:

def diasDeVida(anterior,atual):
meses = {1:31,2:28,3:31,4:30,5:31,6:30,7:31,8:31,9:30,10:31,11:30,12:31}
numeroDeDias = 0

if anterior[2] % 4 == 0 and anterior[2] % 100 !=0 or anterior[2]%400==0:
meses[2] = 29

for x in range(anterior[1],13):
numeroDeDias += meses[x]
numeroDeDias -= anterior[0]


for x in range(anterior[2]+1,atual[2]):
if x % 4 == 0 and x % 100 != 0 or x%400==0:
numeroDeDias += 366
else :
numeroDeDias += 365

if atual[2] % 4 == 0 and atual[2] % 100 !=0 or atual[2]%400==0 :
meses[2] = 29

for x in range(1,atual[1]):
numeroDeDias += meses[x]
numeroDeDias += atual[0]

return numeroDeDias

nascimento = []
dataAtual = []

print "Entre com dados do seu nascimento."
dia = int(raw_input("Dia: &quot)
mes = int(raw_input("Mes: &quot)
ano = int(raw_input("Ano: &quot)

nascimento.append(dia)
nascimento.append(mes)
nascimento.append(ano)

print "Entre com dados do ano atual."
dia = int(raw_input("Dia: &quot)
mes = int(raw_input("Mes: &quot)
ano = int(raw_input("Ano: &quot)

dataAtual.append(dia)
dataAtual.append(mes)
dataAtual.append(ano)

print "\n\n\nVoce tem %i dias de vida." % diasDeVida(nascimento,dataAtual)

raw_input()

© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal