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


Página 1 de 2    1  2 
23-05-2005 por felipe.gualdi
Como descobrir qtos dias de vida você tem?!?!?!?!
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...
23-05-2005 por profeta_livre
isso é pura m,atematica!
23-05-2005 por Hider
pega como entrada a idade no formato dd/mm/aaaa ai vc vai fazendo dependendo do ano vc vai dividindo por 4 eu acho ( bissexto he 4 em 4 ne?) nem sei ai vc pega o mes x 30 dependendo do num de anos bissexto vc diminui ai o n de dias e vai !!! vai fazendo q vc consegue num he dificil n!! mas vai enche o saco hehe !! tb to fazendo 1º periodo de CC isso he pra fazer no PASCAL??eu ja fiz isso no laboratorio uma vez fiz no pascal

obs: nunca axei nada para confiri se a conta tava certa!! intao se vc fizer algo q chegue em um numero aproximado com certeza vai passa de lizo pelo professor hehe!!!!

falowww!!!!!!!
23-05-2005 por intruso
na verdade o ano bissexto é aquele que é divisivel por 4 e não é por 100 ....
23-05-2005 por aylons
Não exatamente, intruso. O ano bisssexto é aquelçe que é divisível por 4, não é por 100, mas aqueles que são divisíveis por 400 são bissextos. Por isso o ano 2000 foi.
24-05-2005 por intruso
ihhh ... foi mals... eu esqueci desses q são por 400 ... ops: :lol:
valeu a correção
t+
24-05-2005 por felipe.gualdi
Então galera ai é complicado... o mais dificil mesmo é fazer com que ele de a idade exata... pq os meses que tem 31 dias interferem, os anos bissextos interferem...
Eu tava vendo uns artigos na net, que mandam dividir o numero por 80640, alguma coisa assim... mais num encontrei um sentido correto para isso...
24-05-2005 por aylons
Nem sempre o algoritmo do software é matemática pura. Quer uma idéia?

Faça um programa que, a partir da data atual, vá fazendo uma contagem regressiva, indo para trás mês a mês, somando o número de dias de cada mes. Quando chegar em fevereiro, ele verifica se o ano é bissexto ou não e soma um dia se for o caso. Para quando chegar no mês de nascimento do cara e desconta o dia que ele nasceu naquele mes do total de dias.
24-05-2005 por felipe.gualdi
Poxa cara é uma boa... mais me diz como eu faço uma lógica que conte o mes certinho?? Pq pensa comigo... vamos supor que seja 24 05 1984... vou contar mes a mes, porém devo começar apartir de um ano... e como fazer que conte o mes se ele esta no meio do ano? viajei neste ponto...
24-05-2005 por aylons
Eu não entendi sua pergunta. Explica melhor.
24-05-2005 por felipe.gualdi
Bom Vamos lá, vamos ver se eu consigo...
Contar usando os anos beleza, mais tenho problemas em como começar, pq? Assim vc não ira começar com um ano "completo" mais seim de um mes qualquer no meio do ano... como começar sem que isso interfira no resultado final? pq a ideia q vc me deu foi descontar o dia de nascimento no final, mais e qto aos dias atuais?? :cry:
24-05-2005 por aylons
Como eu disse. Comece na data atual e vá tirando mês a mês. Depois você pode ir de ano em ano (ou ainda, de 4 em 4 anos, para ficar mais eficiente):

Por exemplo, Hoje, dia 24/05/2005. Seu algoritmo, para começar, coloca os 24 dias na soma. E começa a contar os meses que resta:

30 dias para abril, 31 para março, para fevereiro, ele soma 28 e verifica se estamos em ano bissexto. Se estivermos, soma 1, depois som a janeiro e pronto. Agora ele vai somando os 365 dias para cada ano e 366 nos anos bissextos.

Ou, melhor ainda, vai somando (4x365 + 1) para cada 4 anos, até a diferença entre o ano que ele estiver e o ano de nascimento for menor que 4.

Aí, você volta a somar os anos. Qndo chegar no ano do aniversario, os meses, e qndo chegar no mes, os dias.

Tem várias otimizações matemáticas e computacionais que dá para fazer, mas esse é um exemplo bem didádito de algoritmo.
24-05-2005 por felipe.gualdi
Fechou... esta ideia resolveu totalmente o meu problema... valeu cara... vc conseguiu me economizar pelo menos alguns neoronios e me deu algumas horas de sono.... rs... :lol:
03-04-2006 por ilair
Citação:
Postado Originalmente por aylons
Não exatamente, intruso. O ano bisssexto é aquelçe que é divisível por 4, não é por 100, mas aqueles que são d...
Bom dia!

Gostaria de saber por que deve ser divisível por 400 e não pode ser divisível por 100 para que seja ano bissexto?
Este ponto não está muito claro para mim.
Desculpem minha ignorância neste ponto, mas tenho certeza de que isso é muito útil para muitos.
03-04-2006 por aylons
É uma forma de ajustar corretamente as casas decimais do ano.

A terra não dá a volta em torno do sol em 365 dias, mas em 365,25 dias. Por isso, a cada quatro anos, soma-se um (4 * 0,25 = 1).

Maaas... A verdade é que esse tempo é melhor aproximado por 365,24. Por isso, a cada 100 anos, a gente cometeu o erro de um dia ao aproximar por 365,25 (0,01 * 100 = 1dia). Por isso os anos divisíveis por cem não são bissextos, para compensar esse dia a mais que foi contado no fim de cem anos.

Porém, isso já é outra aproximação. O número mais correto seria 365,2425. Assim, a cada 400 anos, a gente deixou de contar um dia, novamente (0,0025 * 400 = 1). Por isso a gente coloca um dia a mais nos anos divisíveis por 400.
03-04-2006 por G-Doria_New
veja se isso te ajuda:
http://www.cosmobrain.com.br/lua/cosmobrain_calendar2003.js
29-05-2007 por cleidsonal
http://www.jornaldosamigos.com.br/calculo_de_idade.htm

Por este link, vc poderá calcular dias, meses, ano, segundos desde o dia q vc nasceu!!!!

Isso é o q vc quer saber msm?
30-05-2007 por Andask
Não pode ser feito na data atual, pq por exemplo vc fez dia 1º de qlqr mes o programa ai vc vai entregar pro professor soh dia 20, ai c ele for testa vai tah errado!
Achu q vc vai ter q por uma varial pra digitar a data atual tb, ou tenta com o getdate (se der, sl ) xD
30-05-2007 por Andask
achu q vc pode adotar cada ano como tendo 365.25 dias e mostrar a variavel do dia como integer achu q daria certo!
30-05-2007 por david.rj.2k
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/...po_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!
 
Guia do Hardware Melhores Tópicos