• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

NoOne

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

5 mensagens neste tópico

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :confused:)

cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora