KOMO HAGO EL SIGUIENTE PROGRAMA

sb3
19 de Enero del 2003
escribir una funcion que reciba una fecha y entrege TRUE si la fecha esta correcta o FALSE si la fecha es incorrecta.Por ejemplo verificarfecha
(03042002) entrega TRUE y verificarfecha(29022002) entrega FALSE.

por fa ke alguien me ayude a solucionar este programa....
obviamente debemos escrivir un programa para luego hacer la funcion, tambien kuando se komplile lo debe hacer ben....


este es un pekeño desafio....

GScalise
19 de Enero del 2003
es relativamente fácil...
El orden a seguir sería: transformar la entrada (long) a tres int dia, mes y anyo.
Puede hacerse de dos maneras:
a) usando Strings y subStrings
if(Integer(entrada).toString().length()!=8)
return false;
int dia = Integer.parseInt(Integer(entrada).toString().substring(0,2))
int mes = Integer.parseInt(Integer(entrada).toString().substring(2,4))
int anyo = Integer.parseInt(Integer(entrada).toString().substring(4,8))

b) otra forma es usando módulos y divisiones:
int dia = entrada/1000000;
entrada = entrada - dia * 1000000;
int mes = entrada/10000;
int anyo = entrada - mes * 10000;

Ahora ya tenemos dia, mes y anyo.

Queremos aplicar un algoritmo rápido para saber si todo esta bien.
en primer lugar, los límites:
anyo no tiene restricciones, pero mes no puede ser mayor que 12, tampoco puede ser menor o igual a cero. El dia no puede ser cero o menor que cero, y el limite superior depende del mes.

public static boolean fechaBien(int dia, int mes, int anyo)
{
if(mes > 12 || mes <=0 || dia <= 0)
return false;
else
switch(mes)
{
// Meses de 31 dias
case 1: // Enero
case 3: // Marzo
case 5: // Mayo
case 7: // Julio
case 8: // Agosto
case 10: // Octubre
case 12: // Diciembre
{
return (dia <= 31);
};

// Meses de 30 dias
case 4: // Abril
case 6: // Junio
case 9: // Septiembre
case 11: // Noviembre
{
return (dia <= 30);
};

// Febrero... caso especial! es bisiesto el año?
// Un año es bisiesto si se cumplen la condicion básica de ser divisible por 4 (anyo%4==0)
// Y el caso especial: no es bisiesto si es divisible por 100, salvo cuando es divisible tambien por 400
case 2:
{
boolean bisiesto = false;
if(anyo%4==0) //Es divisible por cuatro
{
if(anyo%100!=0) // No divisible por cien
bisiesto = true;
else if (anyo%400==0) // Si es divisible por cien, debe ser divisible por 400 tambien
bisiesto = true;
};
if(!bisiesto) // Si el año no es bisiesto, febrero tiene 28 dias
return (dia <= 28); (devuelve true si dia es menor o igual a 28)
else
return (dia <= 29);
}
} // Fin del switch
} // Fin de la función

Suerte!