Guest NoOne Posted November 17, 2006 at 10:07 PM Report #65014 Posted November 17, 2006 at 10:07 PM 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?
mgl Posted November 18, 2006 at 12:08 PM Report #65067 Posted November 18, 2006 at 12:08 PM 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.
Guest NoOne Posted November 18, 2006 at 12:15 PM Report #65070 Posted November 18, 2006 at 12:15 PM 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
mgl Posted November 18, 2006 at 02:35 PM Report #65109 Posted November 18, 2006 at 02:35 PM 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.
Guest NoOne Posted November 18, 2006 at 03:05 PM Report #65119 Posted November 18, 2006 at 03:05 PM ya lol, distracçao
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now