Jump to content

receber data actual e data de nascimento e escrever idade por extenso.


Recommended Posts

Posted
Pretende-se uma aplicação que dada uma data (dia, mês e ano), o nome e a data de nascimento

(ano, mês e dia) dos funcionários de um dado departamento ( com idades compreendidas entre 20 e

65 anos), escreva uma sequência de mensagens indicando a idade (por extenso) dos funcionários

naquela data.

import javax.swing.JOptionPane;

public class Main {
  
   // calcular a idade recebe como parametros a data actual e a data de nascimento
   public static int Calc_idade(int dia, int mes, int ano, int dia_actual, int mes_actual, int ano_actual)
   {
       int idade;
       idade=ano_actual-ano;
       if (mes_actual == mes)
       {
            if (dia_actual < dia)
                idade=idade+1;
            } else
            {
                if (mes_actual < mes)
                        idade=idade+1;
            }
       return idade;  
   }

    
    public static void main(String[] args) {
        String d,a,m,nome,dh,mh,ah;
        int dia, ano, mes, dia_actual, mes_actual, ano_actual, idade1=0; 
        
        // nome do funcionario
        nome=JOptionPane.showInputDialog("Nome: ");
        
        // ciclo ate idade tar coompreendida entre os 20 e os 65
        do
        {
            // ciclo para ler data actual e controlar s está correcta
            do {
                
                dh=JOptionPane.showInputDialog("Dia: ");
                dia_actual=Integer.parseInt(dh);
                mh=JOptionPane.showInputDialog("Mês: ");
                mes_actual=Integer.parseInt(mh); 
                ah=JOptionPane.showInputDialog("Ano: ");
                ano_actual=Integer.parseInt(ah);
                if ((mes_actual==2) && (ano_actual % 4 == 0) && (ano_actual % 100!= 0) && (dia_actual<=29))
                       break;
                if ((mes_actual == 1) || (mes_actual == 3) ||(mes_actual == 5) || (mes_actual == 7) ||(mes_actual == 8) ||(mes_actual == 10) || (mes_actual == 12) && (dia_actual <= 31))
                       break;
                if ((mes_actual  == 4) || (mes_actual  == 6) || (mes_actual  == 9) || (mes_actual  == 11) && (dia_actual<=30))
                       break;
                JOptionPane.showMessageDialog(null,"ATENÇÃO DATA INVALIDA");
            } while (mes_actual>12 && dia_actual>31);
           
            // ciclo para ler data de nascimento e controlar s está correcta, se estivar chama a funcão que calcula a idade 
            do { 
                d=JOptionPane.showInputDialog("Dia de nascimento: ");
                dia=Integer.parseInt(d);
                m=JOptionPane.showInputDialog("Mês de nascimento: ");
                mes=Integer.parseInt(m); 
                a=JOptionPane.showInputDialog("Ano de nascimento: ");
                ano=Integer.parseInt(a);  
                if ((mes==2) && (ano % 4 == 0) && (ano % 100!= 0) && (dia<=29))
                 {
                       idade1=Calc_idade(dia,mes,ano,dia_actual, mes_actual, ano_actual);
                 }else
                     if ((mes == 1) || (mes == 3) ||(mes == 5) || (mes == 7) ||(mes == 8) ||(mes == 10) || (mes == 12) && (dia <= 31))
                     {
                        idade1=Calc_idade(dia,mes,ano,dia_actual, mes_actual, ano_actual);
                     } else
                        if ((mes  == 4) || (mes  == 6) || (mes  == 9) || (mes  == 11) && (dia<=30))
                        {
                            idade1=Calc_idade(dia,mes,ano,dia_actual, mes_actual, ano_actual);
                        }
                   if (idade1<20 || idade1>65)
                        JOptionPane.showMessageDialog(null,"ATENÇÃO IDADE DEVE SER ENTRE OS 20 E 65 ANOS");
            }while(mes>12 && dia>31);
     }while(idade1<20 || idade1>65);
     
     // resto do exercicio não resolvida
     JOptionPane.showMessageDialog(null,"idade: "+idade1);
     System.exit(0);
    }
    
}

bem, a parte de controlar as datas ta um pouco confusa, mas a funcionar...

quanto ah parte d escrever por extenso é q n tou a ver nenhuma forma (n mto extensa) de o fazer :S alguma sugestão?

Posted

decompões o nº, e vês qual é o 1º algarismo. Se fôr 2 mandas "vinte" para o ecra, se for 3 mandas "trinta", e assim sucessivamente. Dp, o 2º algarismo, se for 0, ignoras, caso contrario, mandas "e" para o ecra, e dp se for 1 mandas "um", 2 mandas "dois" etc.

Por exemplo:

31 mandavas: trinta e um

agora, converter isto para java é q é complicado (para mim 😕 )

cumps.

Posted

pois foi o k pensei, vai ficar grande ah brava :/

s calhar vou usar 2 vectors e um switch

EDIT:

tentei assim:

// string para as dezenas
     String[] dezenas = new String[6];
     dezenas[0]=" ";
     dezenas[1]=" ";
     dezenas[2]="Vinte";
     dezenas[3]="Trinta";
     dezenas[4]="Quarenta";
     dezenas[5]="Cinquenta";
     dezenas[6]="Sessenta";
     
     // string para as unidades
     String[] unidades = new String[9];
     unidades[0]=" ";
     unidades[1]="e um";
     unidades[2]="e dois";
     unidades[3]="e três";
     unidades[4]="e quatro";
     unidades[5]="e cinco";
     unidades[6]="e seis";
     unidades[7]="e sete";
     unidades[8]= "e oito";
     unidades[9]="e nove";
     
     
     JOptionPane.showMessageDialog(null," "+dezenas[idade1/10]+unidades[idade1%10]);

mas deu este erro:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6

        at Main.main(Main.java:84)

Java Result: 1

pk? :S

Posted

penso q seja pq o teu vector tem 7 elementos e não 6, a mesma coisa com o de 9 elementos, são 10.

ora vê: 0,1,2,3,4,5,6,7,8,9 = 10 elementos

cumps.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.