quarta-feira, 16 de junho de 2010

Java + Calculo com datas SEM FUNCOES OU LOOPS

Aparentemente um exercício bem simples p/ calculo com datas, mas veja a particularidade do enunciado :

Desenvolva um algoritmo que receba a data de nascimento de uma pessoa e a data 
atual, calcule e mostre a idade desta pessoa em anos, meses, dias e semanas.
################################################################################################
obs : SEM IF e SEM USAR FUNCAO DE DATAS LOOOPS OU QQ COISA PARECIDA 


/*  
//  version 1.0 Wed Mar 17 13:23:55 on ttys000.
 *  version 2.0 Sun Mar 21 22:28:34 on console ttys000 , como ela pediu p/ fazer sem for, switch, nada (*_*)
//  Created by Mario Cezzare mcezzare@gmail.com  on Sun Mar 21 22:28:34 on console ttys000.
//  Copyright 2010 My Powerbook :) . All rights reserved.
 * segunda tentativa alg29cap5b.java  professora Lucy Mary
// 29. Desenvolva um algoritmo que receba a data de nascimento de uma pessoa e a data 
atual, calcule e mostre a idade desta pessoa em anos, meses, dias e semanas.
################################################################################################
obs : SEM IF e SEM USAR FUNCAO DE DATAS LOOOPS OU QQ COISA PARECIDA
################################################################################################
*/

import javax.swing.JOptionPane;
public class alg29cap5b {
public static void main (String args[]) {
String diaF, mesF,anoF; 
String message;
diaF="21";
mesF="3";
anoF="2010";
double diaI,mesI,anoI; // read from user
double  base_dI, base_dF, calc_d, base_mI, base_mF, calc_m, base_aI, base_aF, calc_a; //to calculate values
String data_atualOut,data_nascOut;
diaI= Double.parseDouble(JOptionPane.showInputDialog("dia de nascimento:"));
mesI= Double.parseDouble(JOptionPane.showInputDialog("mes de nascimento:"));
anoI= Double.parseDouble(JOptionPane.showInputDialog("ano de nascimento:"));
// dias
base_dI = (diaI * 24 * 60 * 60 * 1000);
base_dF = (Double.parseDouble(diaF) * 24 * 60 * 60 * 1000);
calc_d = ((base_dF - base_dI) / 1000 / 60 / 60 / 24);
// meses 
base_mI = ( mesI * 30 * 24 * 60 * 60 * 1000);
base_mF = ( Double.parseDouble(mesF) * 30 * 24 * 60 * 60 * 1000);
calc_m = ( (base_mI - base_mF) /1000 /60 /60 /24 / 30 );
// anos 
base_aI  =( anoI * 365  * 30 * 24 * 60 * 60 * 1000) ;
base_aF  =( Double.parseDouble(anoF) * 365  * 30 * 24 * 60 * 60 * 1000) ;
calc_a = (( base_aF - base_aI )/1000 / 60 / 60 / 24 / 30 / 365) ;
// mostra tudo
data_atualOut="Data Atual: " + diaF + "/" +mesF + "/" + anoF;
System.out.println(data_atualOut);
JOptionPane.showMessageDialog(null,data_atualOut);
data_nascOut="Data Nasc: " + (int)diaI + "/" +(int)mesI + "/" + (int)anoI;
System.out.println(data_nascOut);
JOptionPane.showMessageDialog(null,data_nascOut);
message="Idade Atual : "+ (int)calc_a +  " anos "   + (int)calc_m + " meses " + (int)calc_d + " dias" ;
JOptionPane.showMessageDialog(null, message) ;
//D = Integer.getInteger(nm)
System.out.println(message);
System.exit(0);
}
}

OBS : Informando data de Nasc: 10/08/1979
----------- Resultado deve ser: ----------------------

Data Atual: 21/3/2010
Data Nasc: 10/8/1979
Idade Atual : 31 anos 5 meses 11 dias

Nenhum comentário: